2003-04-23 21:01:18 +00:00
< ? php
2017-03-06 18:32:30 +00:00
namespace LAM\LOGIN ;
2017-02-11 18:39:05 +00:00
use LAM\LIB\TWO_FACTOR\TwoFactorProviderService ;
2017-03-06 18:32:30 +00:00
use \LAMConfig ;
use \LAMCfgMain ;
use \htmlSpacer ;
use \htmlOutputText ;
use \htmlSelect ;
use \htmlInputField ;
use \htmlGroup ;
use \htmlInputCheckbox ;
use \htmlButton ;
use \htmlStatusMessage ;
2020-06-17 09:28:05 +00:00
use LAMException ;
2017-03-06 18:32:30 +00:00
use \Ldap ;
2017-10-31 14:22:34 +00:00
use \htmlResponsiveRow ;
use \htmlDiv ;
2003-03-13 19:48:49 +00:00
/*
2009-10-27 18:47:12 +00:00
This code is part of LDAP Account Manager ( http :// www . ldap - account - manager . org / )
2006-03-03 17:30:35 +00:00
Copyright ( C ) 2003 - 2006 Michael Duergner
2020-02-16 19:31:42 +00:00
2005 - 2020 Roland Gruber
2003-03-13 19:48:49 +00:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
2003-03-14 11:32:28 +00:00
2003-03-13 19:48:49 +00:00
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
2003-03-14 11:32:28 +00:00
2003-03-13 19:48:49 +00:00
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
2005-07-20 18:07:10 +00:00
*/
2003-03-14 11:32:28 +00:00
2005-07-20 18:07:10 +00:00
/**
* Login form of LDAP Account Manager .
*
* @ author Michael Duergner
2010-01-25 16:38:36 +00:00
* @ author Roland Gruber
2005-07-20 18:07:10 +00:00
* @ package main
2003-03-13 19:48:49 +00:00
*/
2003-03-18 20:55:43 +00:00
2005-11-03 12:31:16 +00:00
/** status messages */
2018-12-23 16:21:50 +00:00
include_once ( __DIR__ . " /../lib/status.inc " );
2008-02-21 19:24:37 +00:00
2010-01-25 16:56:19 +00:00
/** check environment */
2018-12-23 16:21:50 +00:00
include __DIR__ . '/../lib/checkEnvironment.inc' ;
2008-02-21 19:24:37 +00:00
2006-04-23 16:33:25 +00:00
/** security functions */
2018-12-23 16:21:50 +00:00
include_once ( __DIR__ . " /../lib/security.inc " );
2006-10-18 16:08:58 +00:00
/** self service functions */
2018-12-23 16:21:50 +00:00
include_once ( __DIR__ . " /../lib/selfService.inc " );
2005-07-20 18:07:10 +00:00
/** access to configuration options */
2018-12-23 16:21:50 +00:00
include_once ( __DIR__ . " /../lib/config.inc " );
2017-03-06 18:32:30 +00:00
$licenseValidator = null ;
2016-08-21 09:16:44 +00:00
if ( isLAMProVersion ()) {
2018-12-23 16:21:50 +00:00
include_once ( __DIR__ . " /../lib/env.inc " );
2016-10-25 17:50:46 +00:00
$licenseValidator = new \LAM\ENV\LAMLicenseValidator ();
$licenseValidator -> validateAndRedirect ( 'config/mainlogin.php?invalidLicense=1' , 'config/mainlogin.php?invalidLicense=2' );
2016-08-21 09:16:44 +00:00
}
2003-03-23 14:41:15 +00:00
2012-10-28 14:37:54 +00:00
/** Upgrade functions */
2018-12-23 16:21:50 +00:00
include_once ( __DIR__ . " /../lib/upgrade.inc " );
2012-10-28 14:37:54 +00:00
2009-07-08 18:03:28 +00:00
// set session save path
if ( strtolower ( session_module_name ()) == 'files' ) {
2010-02-06 11:50:26 +00:00
session_save_path ( dirname ( __FILE__ ) . '/../sess' );
2009-07-08 18:03:28 +00:00
}
2010-02-06 11:50:26 +00:00
// start empty session and change ID for security reasons
2018-03-10 17:48:11 +00:00
lam_start_session ();
2010-02-06 11:50:26 +00:00
session_destroy ();
2018-03-10 17:48:11 +00:00
lam_start_session ();
2010-02-06 11:50:26 +00:00
session_regenerate_id ( true );
2003-04-23 21:01:18 +00:00
2013-01-10 18:11:29 +00:00
$profiles = getConfigProfiles ();
2008-05-25 16:25:09 +00:00
// save last selected login profile
2013-07-21 10:05:16 +00:00
if ( isset ( $_GET [ 'useProfile' ])) {
2013-01-10 18:11:29 +00:00
if ( in_array ( $_GET [ 'useProfile' ], $profiles )) {
2015-12-19 09:12:47 +00:00
setcookie ( " lam_default_profile " , $_GET [ 'useProfile' ], time () + 365 * 60 * 60 * 24 , '/' , null , null , true );
2010-07-30 16:08:20 +00:00
}
else {
unset ( $_GET [ 'useProfile' ]);
}
2008-05-25 16:25:09 +00:00
}
2013-07-21 10:05:16 +00:00
// save last selected language
if ( isset ( $_POST [ 'language' ])) {
2015-12-19 09:12:47 +00:00
setcookie ( 'lam_last_language' , htmlspecialchars ( $_POST [ 'language' ]), time () + 365 * 60 * 60 * 24 , '/' , null , null , true );
2013-07-21 10:05:16 +00:00
}
2010-02-06 11:50:26 +00:00
// init some session variables
$default_Config = new LAMCfgMain ();
$_SESSION [ " cfgMain " ] = $default_Config ;
2013-08-13 18:22:21 +00:00
setSSLCaCert ();
2010-02-06 11:50:26 +00:00
$default_Profile = $default_Config -> default ;
2013-01-10 18:11:29 +00:00
if ( isset ( $_COOKIE [ " lam_default_profile " ]) && in_array ( $_COOKIE [ " lam_default_profile " ], $profiles )) {
2010-02-06 11:50:26 +00:00
$default_Profile = $_COOKIE [ " lam_default_profile " ];
}
// Reload loginpage after a profile change
2013-01-10 18:11:29 +00:00
if ( isset ( $_GET [ 'useProfile' ]) && in_array ( $_GET [ 'useProfile' ], $profiles )) {
2010-07-30 16:08:20 +00:00
logNewMessage ( LOG_DEBUG , " Change server profile to " . $_GET [ 'useProfile' ]);
2020-03-02 15:44:15 +00:00
$_SESSION [ 'config' ] = new LAMConfig ( $_GET [ 'useProfile' ]); // Recreate the config object with the submitted
2010-02-06 11:50:26 +00:00
}
// Load login page
2013-01-10 18:11:29 +00:00
elseif ( ! empty ( $default_Profile ) && in_array ( $default_Profile , $profiles )) {
2010-02-06 11:50:26 +00:00
$_SESSION [ " config " ] = new LAMConfig ( $default_Profile ); // Create new Config object
}
2013-01-10 18:11:29 +00:00
else if ( sizeof ( $profiles ) > 0 ) {
// use first profile as fallback
$_SESSION [ " config " ] = new LAMConfig ( $profiles [ 0 ]);
}
2013-01-12 11:28:43 +00:00
else {
$_SESSION [ " config " ] = null ;
}
2013-01-10 18:11:29 +00:00
2017-05-06 11:48:48 +00:00
$error_message = null ;
2013-01-10 18:11:29 +00:00
if ( ! isset ( $default_Config -> default ) || ! in_array ( $default_Config -> default , $profiles )) {
$error_message = _ ( 'No default profile set. Please set it in the server profile configuration.' );
}
2010-02-06 11:50:26 +00:00
2014-02-02 12:36:12 +00:00
$possibleLanguages = getLanguages ();
$encoding = 'UTF-8' ;
2013-07-21 10:05:16 +00:00
if ( isset ( $_COOKIE [ 'lam_last_language' ])) {
2014-02-02 12:36:12 +00:00
foreach ( $possibleLanguages as $lang ) {
if ( strpos ( $_COOKIE [ 'lam_last_language' ], $lang -> code ) === 0 ) {
$_SESSION [ 'language' ] = $lang -> code ;
$encoding = $lang -> encoding ;
break ;
}
}
2013-07-21 10:05:16 +00:00
}
elseif ( ! empty ( $_SESSION [ " config " ])) {
2014-02-02 12:36:12 +00:00
$defaultLang = $_SESSION [ " config " ] -> get_defaultLanguage ();
foreach ( $possibleLanguages as $lang ) {
if ( strpos ( $defaultLang , $lang -> code ) === 0 ) {
$_SESSION [ 'language' ] = $lang -> code ;
$encoding = $lang -> encoding ;
break ;
}
}
2013-01-05 16:22:58 +00:00
}
else {
2014-02-02 12:36:12 +00:00
$_SESSION [ 'language' ] = 'en_GB.utf8' ;
2013-01-05 16:22:58 +00:00
}
2010-02-06 11:50:26 +00:00
if ( isset ( $_POST [ 'language' ])) {
2014-02-02 12:36:12 +00:00
foreach ( $possibleLanguages as $lang ) {
if ( strpos ( $_POST [ 'language' ], $lang -> code ) === 0 ) {
$_SESSION [ 'language' ] = $lang -> code ;
$encoding = $lang -> encoding ;
break ;
}
}
2010-02-06 11:50:26 +00:00
}
2014-02-02 12:36:12 +00:00
2010-02-06 11:50:26 +00:00
$_SESSION [ 'header' ] = " <!DOCTYPE HTML PUBLIC \" -//W3C//DTD HTML 4.01 Transitional//EN \" \" http://www.w3.org/TR/html4/loose.dtd \" > \n \n " ;
$_SESSION [ 'header' ] .= " <html> \n <head> \n " ;
2014-02-02 12:36:12 +00:00
$_SESSION [ 'header' ] .= " <meta http-equiv= \" content-type \" content= \" text/html; charset= " . $encoding . " \" > \n " ;
2010-02-06 11:50:26 +00:00
$_SESSION [ 'header' ] .= " <meta http-equiv= \" pragma \" content= \" no-cache \" > \n <meta http-equiv= \" cache-control \" content= \" no-cache \" > " ;
2019-05-20 13:48:37 +00:00
$manifestUrl = str_replace ( '/templates/login.php' , '' , getCallingURL ());
$manifestUrl = preg_replace ( '/http(s)?:\\/\\/([^\\/])+/' , '' , $manifestUrl );
$manifestUrl = preg_replace ( '/\\?.*/' , '' , $manifestUrl );
2020-02-16 19:31:42 +00:00
$_SESSION [ 'header' ] .= '<link rel="manifest" href="' . $manifestUrl . '/templates/manifest.php" crossorigin="use-credentials">' ;
2010-02-06 11:50:26 +00:00
2020-06-21 19:12:44 +00:00
setlanguage (); // setting correct language
2005-06-03 12:09:08 +00:00
/**
2020-06-17 09:28:05 +00:00
* Displays the login window .
*
* @ param \LAM\ENV\LAMLicenseValidator $licenseValidator license validator
* @ param string $error_message error message to display
* @ param string $errorDetails error details
2020-06-21 19:33:43 +00:00
* @ param string $extraMessage extra message that is shown as info
2020-06-17 09:28:05 +00:00
*/
2020-06-21 19:33:43 +00:00
function display_LoginPage ( $licenseValidator , $error_message , $errorDetails = null , $extraMessage = null ) {
2018-01-16 17:31:52 +00:00
$config_object = $_SESSION [ 'config' ];
$cfgMain = $_SESSION [ " cfgMain " ];
2010-01-25 16:38:36 +00:00
logNewMessage ( LOG_DEBUG , " Display login page " );
2003-04-23 21:01:18 +00:00
// generate 256 bit key and initialization vector for user/passwd-encryption
2017-04-02 17:37:06 +00:00
if ( function_exists ( 'openssl_random_pseudo_bytes' ) && ( $cfgMain -> encryptSession == 'true' )) {
$key = openssl_random_pseudo_bytes ( 32 );
$iv = openssl_random_pseudo_bytes ( 16 );
2005-08-10 19:18:35 +00:00
// save both in cookie
2015-12-19 09:12:47 +00:00
setcookie ( " Key " , base64_encode ( $key ), 0 , " / " , null , null , true );
setcookie ( " IV " , base64_encode ( $iv ), 0 , " / " , null , null , true );
2003-10-02 17:54:04 +00:00
}
2015-08-02 19:16:46 +00:00
2003-07-14 21:59:09 +00:00
$profiles = getConfigProfiles ();
2003-07-23 08:08:25 +00:00
echo $_SESSION [ " header " ];
2017-11-04 10:29:38 +00:00
printHeaderContents ( 'LDAP Account Manager' , '..' );
2003-07-23 08:08:25 +00:00
?>
</ head >
2017-11-24 18:22:11 +00:00
< body class = " admin " >
2005-05-15 13:14:45 +00:00
< ? php
2010-07-30 16:08:20 +00:00
// include all JavaScript files
2017-11-04 10:29:38 +00:00
printJsIncludes ( '..' );
2015-08-02 19:16:46 +00:00
2012-10-28 14:37:54 +00:00
// upgrade if pdf/profiles contain single files
if ( containsFiles ( '../config/profiles' ) || containsFiles ( '../config/pdf' )) {
$result = testPermissions ();
if ( sizeof ( $result ) > 0 ) {
StatusMessage ( 'ERROR' , 'Unable to migrate configuration files. Please allow write access to these paths:' , implode ( '<br>' , $result ));
}
else {
2013-01-10 18:11:29 +00:00
upgradeConfigToServerProfileFolders ( $profiles );
2012-10-29 19:41:22 +00:00
StatusMessage ( 'INFO' , 'Config file migration finished.' );
2012-10-28 14:37:54 +00:00
}
}
2015-08-02 19:16:46 +00:00
2016-10-25 17:50:46 +00:00
if ( isLAMProVersion () && $licenseValidator -> isEvaluationLicense ()) {
StatusMessage ( 'INFO' , _ ( 'Evaluation Licence' ));
}
2005-05-15 13:14:45 +00:00
?>
2010-07-30 16:08:20 +00:00
2010-08-31 18:05:17 +00:00
< table border = 0 width = " 100% " class = " lamHeader ui-corner-all " >
2003-07-23 08:08:25 +00:00
< tr >
2017-11-23 17:40:04 +00:00
< td align = " left " height = " 30 " width = " 34% " >
2017-10-31 14:22:34 +00:00
< a class = " lamLogo " href = " http://www.ldap-account-manager.org/ " target = " new_window " >
< ? php
2019-05-12 07:50:23 +00:00
echo getLAMVersionText ();
2017-10-31 14:22:34 +00:00
?>
</ a >
2009-05-03 18:23:25 +00:00
</ td >
2017-11-23 17:40:04 +00:00
< td align = " center " height = 30 width = " 34% " >
< span class = " hide-for-small " >
2018-12-23 10:01:29 +00:00
< a href = " http://www.ldap-account-manager.org/lamcms/lamPro " > < ? php if ( ! isLAMProVersion ()) { echo _ ( " Want more features? Get LAM Pro! " );} ?> </a>
2017-11-23 17:40:04 +00:00
</ span >
</ td >
< td align = " right " height = 30 width = " 34% " >
< a class = " margin-right5 " href = " ./config/index.php " >< IMG alt = " configuration " src = " ../graphics/tools.png " >& nbsp ; < span class = " hide-for-small " >< ? php echo _ ( " LAM configuration " ) ?> </span></a>
</ td >
2003-07-23 08:08:25 +00:00
</ tr >
</ table >
2015-08-02 19:16:46 +00:00
2017-10-31 14:22:34 +00:00
< br >
2010-07-30 16:08:20 +00:00
2003-10-18 11:26:49 +00:00
< ? php
2013-01-05 16:08:51 +00:00
if ( ! empty ( $config_object )) {
2013-01-05 16:22:58 +00:00
// check extensions
$extList = getRequiredExtensions ();
2017-10-24 19:06:18 +00:00
foreach ( $extList as $extension ) {
if ( ! extension_loaded ( $extension )) {
StatusMessage ( " ERROR " , " A required PHP extension is missing! " , $extension );
2013-01-05 16:22:58 +00:00
echo " <br> " ;
}
}
// check TLS
2013-01-05 16:08:51 +00:00
$useTLS = $config_object -> getUseTLS ();
if ( isset ( $useTLS ) && ( $useTLS == " yes " )) {
if ( ! function_exists ( 'ldap_start_tls' )) {
StatusMessage ( " ERROR " , " Your PHP installation does not support TLS encryption! " );
echo " <br> " ;
}
2009-05-03 17:31:39 +00:00
}
}
2013-01-12 11:28:43 +00:00
else {
StatusMessage ( 'WARN' , _ ( 'Please enter the configuration and create a server profile.' ));
}
2006-05-01 08:56:40 +00:00
// check if session expired
if ( isset ( $_GET [ 'expired' ])) {
StatusMessage ( " ERROR " , _ ( " Your session expired, please log in again. " ));
echo " <br> " ;
}
2010-05-28 08:48:57 +00:00
// check if main config was saved
if ( isset ( $_GET [ 'confMainSavedOk' ])) {
StatusMessage ( " INFO " , _ ( " Your settings were successfully saved. " ));
echo " <br> " ;
}
2010-05-28 13:45:34 +00:00
// check if a server profile was saved
if ( isset ( $_GET [ 'configSaveOk' ])) {
StatusMessage ( " INFO " , _ ( " Your settings were successfully saved. " ), htmlspecialchars ( $_GET [ 'configSaveFile' ]));
echo " <br> " ;
}
elseif ( isset ( $_GET [ 'configSaveFailed' ])) {
StatusMessage ( " ERROR " , _ ( " Cannot open config file! " ), htmlspecialchars ( $_GET [ 'configSaveFile' ]));
echo " <br> " ;
}
2010-08-28 13:00:12 +00:00
// check if self service was saved
if ( isset ( $_GET [ 'selfserviceSaveOk' ])) {
2011-08-16 17:14:49 +00:00
StatusMessage ( " INFO " , _ ( " Your settings were successfully saved. " ), htmlspecialchars ( $_GET [ 'selfserviceSaveOk' ]));
2010-08-28 13:00:12 +00:00
echo " <br> " ;
2017-02-11 21:07:38 +00:00
}
if ( isset ( $_GET [ '2factor' ]) && ( $_GET [ '2factor' ] == 'error' )) {
StatusMessage ( 'ERROR' , _ ( " Unable to start 2-factor authentication. " ));
echo " <br> " ;
}
elseif ( isset ( $_GET [ '2factor' ]) && ( $_GET [ '2factor' ] == 'noToken' )) {
StatusMessage ( 'ERROR' , _ ( " Unable to start 2-factor authentication because no tokens were found. " ));
echo " <br> " ;
2010-08-28 13:00:12 +00:00
}
2013-01-05 16:08:51 +00:00
if ( ! empty ( $config_object )) {
2003-07-23 08:08:25 +00:00
?>
2012-09-09 14:02:27 +00:00
< br >< br >
2015-08-02 19:16:46 +00:00
< div class = " centeredTable " >
2017-10-31 14:22:34 +00:00
< div class = " roundedShadowBox limitWidth " style = " position:relative; z-index:5; " >
< table border = " 0 " rules = " none " bgcolor = " white " class = " ui-corner-all " >
2005-01-15 12:11:03 +00:00
< tr >
2017-10-31 14:22:34 +00:00
< td class = " loginLogo hide-for-small " style = " border-style:none " rowspan = " 3 " >
2005-01-15 12:11:03 +00:00
</ td >
2015-08-02 19:16:46 +00:00
< td style = " border-style:none " >
2005-01-15 12:11:03 +00:00
< form action = " login.php " method = " post " >
2012-09-09 14:02:27 +00:00
< ? php
2017-10-31 14:22:34 +00:00
$tabindex = 1 ;
$row = new htmlResponsiveRow ();
$row -> add ( new htmlSpacer ( null , '30px' ), 0 , 12 , 12 );
2012-09-09 14:02:27 +00:00
// user name
2017-10-31 14:22:34 +00:00
$row -> addLabel ( new htmlOutputText ( _ ( " User name " )));
2012-09-09 14:02:27 +00:00
if ( $config_object -> getLoginMethod () == LAMConfig :: LOGIN_LIST ) {
$admins = $config_object -> get_Admins ();
$adminList = array ();
2017-10-24 19:06:18 +00:00
foreach ( $admins as $admin ) {
$text = explode ( " , " , $admin );
2012-09-09 14:02:27 +00:00
$text = explode ( " = " , $text [ 0 ]);
2013-03-24 10:01:54 +00:00
if ( isset ( $text [ 1 ])) {
2017-10-24 19:06:18 +00:00
$adminList [ $text [ 1 ]] = $admin ;
2013-03-24 10:01:54 +00:00
}
else {
2017-10-24 19:06:18 +00:00
$adminList [ $text [ 0 ]] = $admin ;
2013-03-24 10:01:54 +00:00
}
2012-09-09 14:02:27 +00:00
}
2013-05-25 13:24:55 +00:00
$selectedAdmin = array ();
if ( isset ( $_POST [ 'username' ]) && in_array ( $_POST [ 'username' ], $adminList )) {
$selectedAdmin = array ( $_POST [ 'username' ]);
}
$userSelect = new htmlSelect ( 'username' , $adminList , $selectedAdmin );
2012-09-09 14:02:27 +00:00
$userSelect -> setHasDescriptiveElements ( true );
2017-10-31 14:22:34 +00:00
$userSelect -> setTransformSingleSelect ( false );
2017-11-24 18:22:11 +00:00
if ( empty ( $_COOKIE [ 'lam_login_name' ])) {
$userSelect -> setCSSClasses ( array ( 'lam-initial-focus' ));
}
2017-11-04 10:29:38 +00:00
$row -> addField ( new htmlDiv ( null , $userSelect ));
2012-09-09 14:02:27 +00:00
}
else {
if ( $config_object -> getHttpAuthentication () == 'true' ) {
2017-10-31 14:22:34 +00:00
$httpAuth = new htmlDiv ( null , new htmlOutputText ( $_SERVER [ 'PHP_AUTH_USER' ] . ' ' , false ));
$httpAuth -> setCSSClasses ( array ( 'text-left' , 'margin3' ));
$row -> addField ( $httpAuth );
2012-09-09 14:02:27 +00:00
}
else {
2013-01-20 19:13:27 +00:00
$user = '' ;
if ( isset ( $_COOKIE [ " lam_login_name " ])) {
$user = $_COOKIE [ " lam_login_name " ];
}
2017-11-24 18:22:11 +00:00
$userNameInput = new htmlInputField ( 'username' , $user );
if ( empty ( $_COOKIE [ 'lam_login_name' ])) {
$userNameInput -> setCSSClasses ( array ( 'lam-initial-focus' ));
}
$userInput = new htmlDiv ( null , $userNameInput );
2017-10-31 14:22:34 +00:00
$row -> addField ( $userInput );
2012-09-09 14:02:27 +00:00
}
}
// password
2017-10-31 14:22:34 +00:00
$row -> addLabel ( new \htmlOutputText ( _ ( " Password " )));
2012-09-09 14:02:27 +00:00
if (( $config_object -> getLoginMethod () == LAMConfig :: LOGIN_SEARCH ) && ( $config_object -> getHttpAuthentication () == 'true' )) {
2017-10-31 14:22:34 +00:00
$passwordInputFake = new htmlDiv ( null , new htmlOutputText ( '**********' ));
$passwordInputFake -> setCSSClasses ( array ( 'text-left' , 'margin3' ));
$row -> addField ( $passwordInputFake );
2012-09-09 14:02:27 +00:00
}
else {
$passwordInput = new htmlInputField ( 'passwd' );
$passwordInput -> setIsPassword ( true );
2017-11-24 18:22:11 +00:00
if (( $config_object -> getLoginMethod () == LAMConfig :: LOGIN_SEARCH ) && ! empty ( $_COOKIE [ 'lam_login_name' ])) {
$passwordInput -> setCSSClasses ( array ( 'lam-initial-focus' ));
}
2017-10-31 14:22:34 +00:00
$row -> addField ( $passwordInput );
2012-09-09 14:02:27 +00:00
}
// language
2017-10-31 14:22:34 +00:00
$row -> addLabel ( new htmlOutputText ( _ ( " Language " )));
2014-02-02 12:36:12 +00:00
$possibleLanguages = getLanguages ();
2012-09-09 14:02:27 +00:00
$languageList = array ();
$defaultLanguage = array ();
2014-02-02 12:36:12 +00:00
foreach ( $possibleLanguages as $lang ) {
$languageList [ $lang -> description ] = $lang -> code ;
if ( strpos ( trim ( $_SESSION [ " language " ]), $lang -> code ) === 0 ) {
$defaultLanguage [] = $lang -> code ;
2012-09-09 14:02:27 +00:00
}
}
$languageSelect = new htmlSelect ( 'language' , $languageList , $defaultLanguage );
$languageSelect -> setHasDescriptiveElements ( true );
2017-10-31 14:22:34 +00:00
$row -> addField ( $languageSelect , true );
2013-01-20 19:13:27 +00:00
// remember login user
if (( $config_object -> getLoginMethod () == LAMConfig :: LOGIN_SEARCH ) && ! ( $config_object -> getHttpAuthentication () == 'true' )) {
2017-10-31 14:22:34 +00:00
$row -> add ( new htmlOutputText ( ' ' , false ), 0 , 6 , 6 );
2013-01-20 19:13:27 +00:00
$rememberGroup = new htmlGroup ();
$doRemember = false ;
if ( isset ( $_COOKIE [ " lam_login_name " ])) {
$doRemember = true ;
}
$rememberGroup -> addElement ( new htmlInputCheckbox ( 'rememberLogin' , $doRemember ));
$rememberGroup -> addElement ( new htmlSpacer ( '1px' , null ));
$rememberGroup -> addElement ( new htmlOutputText ( _ ( 'Remember user name' )));
2017-10-31 14:22:34 +00:00
$rememberDiv = new htmlDiv ( null , $rememberGroup );
$rememberDiv -> setCSSClasses ( array ( 'text-left' , 'margin3' ));
$row -> add ( $rememberDiv , 12 , 6 , 6 );
2013-01-20 19:13:27 +00:00
}
2012-09-09 14:02:27 +00:00
// login button
2017-10-31 14:22:34 +00:00
$row -> add ( new htmlSpacer ( null , '20px' ), 12 );
$row -> add ( new htmlButton ( 'checklogin' , _ ( " Login " )), 12 );
2015-08-02 19:16:46 +00:00
2017-10-31 14:22:34 +00:00
parseHtml ( null , $row , array (), false , $tabindex , 'user' );
2012-09-09 14:02:27 +00:00
?>
2005-01-15 12:11:03 +00:00
</ form >
2004-02-16 17:02:01 +00:00
</ td >
2017-10-31 14:22:34 +00:00
< td class = " loginRightBox hide-for-small " style = " border-style:none " >
</ td >
</ tr >
< tr >
< td colspan = " 2 " style = " border-style:none; " >
2020-06-30 18:24:38 +00:00
< ? php
$row = new htmlResponsiveRow ();
// error message
if ( ! empty ( $error_message )) {
$row -> add ( new \htmlSpacer ( null , '5px' ), 12 );
$message = new htmlStatusMessage ( 'ERROR' , $error_message , $errorDetails );
$row -> add ( $message , 12 );
}
if ( ! empty ( $extraMessage )) {
$extraMessage = new htmlStatusMessage ( 'INFO' , $extraMessage );
$row -> add ( $extraMessage , 12 );
}
parseHtml ( null , $row , array (), false , $tabindex , 'user' );
?>
2017-10-31 14:22:34 +00:00
< hr class = " margin20 " >
</ td >
2005-01-15 12:11:03 +00:00
</ tr >
< tr >
2017-10-31 14:22:34 +00:00
< td style = " border-style:none; " >
2005-01-15 12:11:03 +00:00
< form action = " login.php " method = " post " >
2012-09-09 14:02:27 +00:00
< ? php
2017-10-31 14:22:34 +00:00
$row = new htmlResponsiveRow ();
$row -> addLabel ( new htmlOutputText ( _ ( " LDAP server " )));
$serverUrl = new htmlOutputText ( $config_object -> getServerDisplayNameGUI ());
$serverUrlDiv = new htmlDiv ( null , $serverUrl );
$serverUrlDiv -> setCSSClasses ( array ( 'text-left' , 'margin3' ));
$row -> addField ( $serverUrlDiv );
$row -> addLabel ( new htmlOutputText ( _ ( " Server profile " )));
2012-09-09 14:02:27 +00:00
$profileSelect = new htmlSelect ( 'profile' , $profiles , array ( $_SESSION [ 'config' ] -> getName ()));
$profileSelect -> setOnchangeEvent ( 'loginProfileChanged(this)' );
2017-10-31 14:22:34 +00:00
$row -> addField ( $profileSelect );
2012-09-09 14:02:27 +00:00
2017-10-31 14:22:34 +00:00
parseHtml ( null , $row , array (), true , $tabindex , 'user' );
2012-09-09 14:02:27 +00:00
?>
2005-01-15 12:11:03 +00:00
</ form >
2004-02-16 17:02:01 +00:00
</ td >
2017-10-31 14:22:34 +00:00
< td class = " loginRightBox hide-for-small " style = " border-style:none " >
</ td >
2005-01-15 12:11:03 +00:00
</ tr >
</ table >
2008-07-30 20:34:19 +00:00
</ div >
2015-08-02 19:16:46 +00:00
</ div >
2013-01-05 16:08:51 +00:00
< ? php
}
?>
2003-07-23 08:08:25 +00:00
< br >< br >
2017-10-31 14:22:34 +00:00
< ? PHP
2020-04-03 14:53:55 +00:00
if ( isLAMProVersion () && $licenseValidator -> isExpiringSoon ()) {
$expirationDate = $licenseValidator -> getLicense () -> getExpirationDate () -> format ( 'Y-m-d' );
$expirationTimeStamp = $licenseValidator -> getLicense () -> getExpirationDate () -> getTimestamp ();
if ( $cfgMain -> showLicenseWarningOnScreen ()) {
$licenseMessage = sprintf ( _ ( 'Your licence expires on %s. You need to purchase a new licence to be able to use LAM Pro after this date.' ), $expirationDate );
StatusMessage ( 'WARN' , $licenseMessage );
}
if ( $cfgMain -> sendLicenseWarningByEmail () && ! $cfgMain -> wasLicenseWarningSent ( $expirationTimeStamp )) {
$cfgMain -> licenseEmailDateSent = $expirationTimeStamp ;
$cfgMain -> save ();
$mailer = new \LAM\ENV\LicenseWarningMailer ( $cfgMain );
$mailer -> sendMail ( $expirationDate );
}
2017-10-31 14:22:34 +00:00
}
?>
< br >< br >
2003-07-23 08:08:25 +00:00
</ body >
</ html >
< ? php
2003-04-23 21:01:18 +00:00
}
2003-03-14 11:32:28 +00:00
// checking if the submitted username/password is correct.
2017-10-31 14:22:34 +00:00
if ( isset ( $_POST [ 'checklogin' ])) {
2018-12-23 16:21:50 +00:00
include_once ( __DIR__ . " /../lib/ldap.inc " ); // Include ldap.php which provides Ldap class
2003-03-20 16:41:52 +00:00
2003-08-13 19:21:36 +00:00
$_SESSION [ 'ldap' ] = new Ldap ( $_SESSION [ 'config' ]); // Create new Ldap object
2015-08-02 19:16:46 +00:00
2011-08-23 19:05:05 +00:00
$clientSource = $_SERVER [ 'REMOTE_ADDR' ];
if ( isset ( $_SERVER [ 'REMOTE_HOST' ])) {
$clientSource .= '/' . $_SERVER [ 'REMOTE_HOST' ];
}
if (( $_SESSION [ 'config' ] -> getLoginMethod () == LAMConfig :: LOGIN_SEARCH ) && ( $_SESSION [ 'config' ] -> getHttpAuthentication () == 'true' )) {
$username = $_SERVER [ 'PHP_AUTH_USER' ];
$password = $_SERVER [ 'PHP_AUTH_PW' ];
2003-03-14 11:32:28 +00:00
}
2009-05-03 15:40:14 +00:00
else {
2013-01-20 19:13:27 +00:00
if ( isset ( $_POST [ 'rememberLogin' ]) && ( $_POST [ 'rememberLogin' ] == 'on' )) {
2015-12-19 09:12:47 +00:00
setcookie ( 'lam_login_name' , $_POST [ 'username' ], time () + 60 * 60 * 24 * 365 , '/' , null , null , true );
2013-01-20 19:13:27 +00:00
}
2013-01-20 19:28:14 +00:00
else if ( isset ( $_COOKIE [ 'lam_login_name' ]) && ( $_SESSION [ 'config' ] -> getLoginMethod () == LAMConfig :: LOGIN_SEARCH )) {
2015-12-19 09:12:47 +00:00
setcookie ( 'lam_login_name' , '' , time () + 60 * 60 * 24 * 365 , '/' , null , null , true );
2013-01-20 19:13:27 +00:00
}
2011-08-23 19:05:05 +00:00
if ( $_POST [ 'passwd' ] == " " ) {
logNewMessage ( LOG_DEBUG , " Empty password for login " );
$error_message = _ ( " Empty password submitted. Please try again. " );
2018-01-16 17:31:52 +00:00
display_LoginPage ( $licenseValidator , $error_message ); // Empty password submitted. Return to login page.
2011-08-23 19:05:05 +00:00
exit ();
2010-05-07 19:12:06 +00:00
}
2009-03-07 18:17:57 +00:00
$username = $_POST [ 'username' ];
2011-08-23 19:05:05 +00:00
$password = $_POST [ 'passwd' ];
}
// search user in LDAP if needed
2020-06-27 18:47:43 +00:00
$searchLDAP = null ;
2011-08-23 19:05:05 +00:00
if ( $_SESSION [ 'config' ] -> getLoginMethod () == LAMConfig :: LOGIN_SEARCH ) {
$searchFilter = $_SESSION [ 'config' ] -> getLoginSearchFilter ();
2020-06-17 09:28:05 +00:00
$searchFilter = str_replace ( '%USER%' , $username , $searchFilter );
2011-12-03 19:02:28 +00:00
$searchDN = '' ;
$searchPassword = '' ;
2018-03-03 09:28:21 +00:00
$configLoginSearchDn = $_SESSION [ 'config' ] -> getLoginSearchDN ();
if ( ! empty ( $configLoginSearchDn )) {
$searchDN = $configLoginSearchDn ;
2011-12-03 19:02:28 +00:00
$searchPassword = $_SESSION [ 'config' ] -> getLoginSearchPassword ();
}
2011-08-23 19:05:05 +00:00
$searchSuccess = true ;
$searchError = '' ;
$searchLDAP = new Ldap ( $_SESSION [ 'config' ]);
2020-06-17 09:28:05 +00:00
try {
$searchLDAP -> connect ( $searchDN , $searchPassword , true );
$searchResult = ldap_search ( $searchLDAP -> server (), $_SESSION [ 'config' ] -> getLoginSearchSuffix (), $searchFilter , array ( 'dn' ), 0 , 0 , 0 , LDAP_DEREF_NEVER );
if ( $searchResult ) {
$searchInfo = ldap_get_entries ( $searchLDAP -> server (), $searchResult );
if ( $searchInfo ) {
cleanLDAPResult ( $searchInfo );
if ( sizeof ( $searchInfo ) == 0 ) {
$searchSuccess = false ;
$searchError = _ ( 'Wrong password/user name combination. Please try again.' );
}
elseif ( sizeof ( $searchInfo ) > 1 ) {
$searchSuccess = false ;
$searchError = _ ( 'The given user name matches multiple LDAP entries.' );
}
else {
$username = $searchInfo [ 0 ][ 'dn' ];
}
}
else {
$searchSuccess = false ;
$searchError = _ ( 'Unable to find the user name in LDAP.' );
if ( ldap_errno ( $searchLDAP -> server ()) != 0 ) {
$searchError .= ' ' . getDefaultLDAPErrorString ( $searchLDAP -> server ());
}
}
}
else {
$searchSuccess = false ;
$searchError = _ ( 'Unable to find the user name in LDAP.' );
if ( ldap_errno ( $searchLDAP -> server ()) != 0 ) {
$searchError .= ' ' . getDefaultLDAPErrorString ( $searchLDAP -> server ());
}
}
if ( ! $searchSuccess ) {
$error_message = $searchError ;
logNewMessage ( LOG_ERR , 'User ' . $username . ' (' . $clientSource . ') failed to log in. ' . $searchError . '' );
$searchLDAP -> close ();
display_LoginPage ( $licenseValidator , $error_message );
exit ();
2009-03-07 18:17:57 +00:00
}
$searchLDAP -> close ();
2011-08-23 19:05:05 +00:00
}
2020-06-17 09:28:05 +00:00
catch ( LAMException $e ) {
$searchLDAP -> close ();
display_LoginPage ( $licenseValidator , $e -> getTitle (), $e -> getMessage ());
exit ();
}
2011-08-23 19:05:05 +00:00
}
// try to connect to LDAP
2020-06-17 09:28:05 +00:00
try {
$_SESSION [ 'ldap' ] -> connect ( $username , $password ); // Connect to LDAP server for verifying username/password
2011-08-23 19:05:05 +00:00
$_SESSION [ 'loggedIn' ] = true ;
// set security settings for session
$_SESSION [ 'sec_session_id' ] = session_id ();
$_SESSION [ 'sec_client_ip' ] = $_SERVER [ 'REMOTE_ADDR' ];
$_SESSION [ 'sec_sessionTime' ] = time ();
2015-05-14 09:18:45 +00:00
addSecurityTokenToSession ();
2011-08-23 19:05:05 +00:00
// logging
logNewMessage ( LOG_NOTICE , 'User ' . $username . ' (' . $clientSource . ') successfully logged in.' );
2017-02-11 18:39:05 +00:00
// Load main frame or 2 factor page
if ( $_SESSION [ 'config' ] -> getTwoFactorAuthentication () == TwoFactorProviderService :: TWO_FACTOR_NONE ) {
metaRefresh ( " ./main.php " );
}
else {
$_SESSION [ '2factorRequired' ] = true ;
metaRefresh ( " ./login2Factor.php " );
}
2011-08-23 19:05:05 +00:00
die ();
}
2020-06-17 09:28:05 +00:00
catch ( LAMException $e ) {
2020-06-21 19:33:43 +00:00
$extraMessage = null ;
if (( $searchLDAP !== null ) && ( $e -> getLdapErrorCode () == 49 )) {
2020-06-30 18:51:20 +00:00
$extraMessage = getExtraInvalidCredentialsMessage ( $searchLDAP -> server (), $username );
2020-06-28 09:16:37 +00:00
$searchLDAP -> close ();
2020-06-21 19:33:43 +00:00
}
display_LoginPage ( $licenseValidator , $e -> getTitle (), $e -> getMessage (), $extraMessage );
2011-08-23 19:05:05 +00:00
exit ();
2020-06-17 09:28:05 +00:00
}
2003-03-14 11:32:28 +00:00
}
2003-03-20 16:37:20 +00:00
2012-10-28 14:37:54 +00:00
//displays the login window
2018-01-16 17:31:52 +00:00
display_LoginPage ( $licenseValidator , $error_message );
2003-08-16 17:30:20 +00:00
?>