diff --git a/authentication/ldap/controller.php b/authentication/ldap/controller.php index dd5ab8061ef2abb75165d6cecd196a581e0baf3c..e0c496a45e9b96ec3ed11003fce9ff270bdefdb3 100644 --- a/authentication/ldap/controller.php +++ b/authentication/ldap/controller.php @@ -5,17 +5,13 @@ use Library\Authentication\AuthYubico; use Concrete\Core\Authentication\AuthenticationTypeController; use Config; -use Exception; -use Package; +use Loader; use User; use UserInfo; -use View; class Controller extends AuthenticationTypeController { - const YUBIKEY_VERIFY_URL = "http://api.yubico.com/wsapi/2.0/verify"; - public function getHandle() { return 'ldap'; } @@ -26,34 +22,34 @@ class Controller extends AuthenticationTypeController { public function edit() { - $this->set('form', \Loader::helper('form')); - $this->set('ldapServerURI', \Config::get('auth.ldap.ldapServerURI', '')); - $this->set('ldapBaseDN', \Config::get('auth.ldap.ldapBaseDN', '')); - $this->set('ldapBindDN', \Config::get('auth.ldap.ldapBindDN', '')); - $this->set('ldapBindPassword', \Config::get('auth.ldap.ldapBindPassword', '')); - $this->set('ldapSearchFilter', \Config::get('auth.ldap.ldapSearchFilter', '')); - $this->set('yubikeyEnabled',\Config::get('auth.ldap.yubikeyEnabled', false)); - $this->set('yubikeyClientID',\Config::get('auth.ldap.yubikeyClientID', '')); - $this->set('yubikeySecretKey',\Config::get('auth.ldap.yubikeySecretKey', '')); - $this->set('yubikeyServerURI',\Config::get('auth.ldap.yubikeyServerURI', '')); - $this->set('yubikeyLDAPAtttribute',\Config::get('auth.ldap.yubikeyLDAPAtttribute', 'pager')); - $this->set('yubikeyAllowEmptyKey',\Config::get('auth.ldap.yubikeyAllowEmptyKey', false)); + $this->set('form', Loader::helper('form')); + $this->set('ldapServerURI', Config::get('auth.ldap.ldapServerURI', '')); + $this->set('ldapBaseDN', Config::get('auth.ldap.ldapBaseDN', '')); + $this->set('ldapBindDN', Config::get('auth.ldap.ldapBindDN', '')); + $this->set('ldapBindPassword', Config::get('auth.ldap.ldapBindPassword', '')); + $this->set('ldapSearchFilter', Config::get('auth.ldap.ldapSearchFilter', '')); + $this->set('yubikeyEnabled', Config::get('auth.ldap.yubikeyEnabled', false)); + $this->set('yubikeyClientID', Config::get('auth.ldap.yubikeyClientID', '')); + $this->set('yubikeySecretKey', Config::get('auth.ldap.yubikeySecretKey', '')); + $this->set('yubikeyServerURI', Config::get('auth.ldap.yubikeyServerURI', '')); + $this->set('yubikeyLDAPAtttribute', Config::get('auth.ldap.yubikeyLDAPAtttribute', 'pager')); + $this->set('yubikeyAllowEmptyKey', Config::get('auth.ldap.yubikeyAllowEmptyKey', false)); } public function saveAuthenticationType($args) { - \Config::save('auth.ldap.ldapServerURI',$args['ldapServerURI']); - \Config::save('auth.ldap.ldapBaseDN',$args['ldapBaseDN']); - \Config::save('auth.ldap.ldapBindDN',$args['ldapBindDN']); - \Config::save('auth.ldap.ldapBindPassword',$args['ldapBindPassword']); - \Config::save('auth.ldap.ldapSearchFilter',$args['ldapSearchFilter']); - \Config::save('auth.ldap.yubikeyEnabled',$args['yubikeyEnabled']); - \Config::save('auth.ldap.yubikeyClientID',$args['yubikeyClientID']); - \Config::save('auth.ldap.yubikeySecretKey',$args['yubikeySecretKey']); - \Config::save('auth.ldap.yubikeyServerURI',$args['yubikeyServerURI']); - \Config::save('auth.ldap.yubikeyLDAPAtttribute',$args['yubikeyLDAPAtttribute']); - \Config::save('auth.ldap.yubikeyAllowEmptyKey',$args['yubikeyAllowEmptyKey']); + Config::save('auth.ldap.ldapServerURI',$args['ldapServerURI']); + Config::save('auth.ldap.ldapBaseDN',$args['ldapBaseDN']); + Config::save('auth.ldap.ldapBindDN',$args['ldapBindDN']); + Config::save('auth.ldap.ldapBindPassword',$args['ldapBindPassword']); + Config::save('auth.ldap.ldapSearchFilter',$args['ldapSearchFilter']); + Config::save('auth.ldap.yubikeyEnabled',$args['yubikeyEnabled']); + Config::save('auth.ldap.yubikeyClientID',$args['yubikeyClientID']); + Config::save('auth.ldap.yubikeySecretKey',$args['yubikeySecretKey']); + Config::save('auth.ldap.yubikeyServerURI',$args['yubikeyServerURI']); + Config::save('auth.ldap.yubikeyLDAPAtttribute',$args['yubikeyLDAPAtttribute']); + Config::save('auth.ldap.yubikeyAllowEmptyKey',$args['yubikeyAllowEmptyKey']); } public function getAuthenticationTypeIconHTML() { @@ -61,19 +57,19 @@ class Controller extends AuthenticationTypeController { } private function __connect() { - if (!is_object($this->ldap_conn)) { - $this->ldap_conn = ldap_connect(\Config::get('auth.ldap.ldapServerURI','')) + if (!is_object($this->ldapConn)) { + $this->ldapConn = ldap_connect(Config::get('auth.ldap.ldapServerURI','')) or die(t('Connection to LDAP Server failed.')); - ldap_set_option($this->ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3); - $bindDN = \Config::get('auth.ldap.ldapBindDN', ''); - $bindPW = \Config::get('auth.ldap.ldapBindPassword', ''); + ldap_set_option($this->ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3); + $bindDN = Config::get('auth.ldap.ldapBindDN', ''); + $bindPW = Config::get('auth.ldap.ldapBindPassword', ''); if ($bindDN) { - $this->ldap_bind = ldap_bind($this->ldap_conn,$bindDN,$bindPW); + $this->ldapBind = ldap_bind($this->ldapConn,$bindDN,$bindPW); } else { - $this->ldap_bind = ldap_bind($this->ldap_conn); + $this->ldapBind = ldap_bind($this->ldapConn); } - if (!$this->ldap_bind) { - throw new Exception(t("Binding with LDAP Server failed.")); + if (!$this->ldapBind) { + throw new \Exception(t("Binding with LDAP Server failed.")); } } } @@ -88,11 +84,12 @@ class Controller extends AuthenticationTypeController { public function authenticate() { $valc = Loader::helper('concrete/validation'); + $vals = Loader::helper('validation/strings'); $post = $this->post(); //Check for empty username and password if (empty($post['uName']) || empty($post['uPassword'])) { - throw new Exception(t('Please provide both username and password.')); + throw new \Exception(t('Please provide both username and password.')); } $uName = $post['uName']; @@ -110,37 +107,37 @@ class Controller extends AuthenticationTypeController { //Connect to ldap, do the search and then auth the user $this->__connect(); - $search_result = ldap_search($this->ldap_conn,\Config::get('auth.ldap.ldapBaseDN', ''), + $searchResult = ldap_search($this->ldapConn,Config::get('auth.ldap.ldapBaseDN', ''), $searchFilter); - if (ldap_count_entries($this->ldap_conn,$search_result)!=1) { + if (ldap_count_entries($this->ldapConn,$searchResult)!=1) { throw new \Exception(t('Invalid username or password.')); } - $entry = ldap_first_entry($this->ldap_conn,$search_result); + $entry = ldap_first_entry($this->ldapConn,$searchResult); //get it here because of the new bind. - if (\Config::get('auth.ldap.yubikeyEnabled',false)) { - $yubikeys = ldap_get_values($this->ldap_conn,$entry,\Config::get('auth.ldap.yubikeyLDAPAtttribute','pager')); + if (Config::get('auth.ldap.yubikeyEnabled',false)) { + $yubikeys = ldap_get_values($this->ldapConn,$entry,Config::get('auth.ldap.yubikeyLDAPAtttribute','pager')); } $user_bind = ldap_bind($this->ldap_conn,ldap_get_dn($this->ldap_conn,$entry),$uPassword); if (!$user_bind) { throw new \Exception(t('Invalid username or password.')); } - ldap_close($this->ldap_conn); + ldap_close($this->ldapConn); //Start yubikey two-factor - if (\Config::get('auth.ldap.yubikeyEnabled',false)) { - if ($yubikeys) { + if (Config::get('auth.ldap.yubikeyEnabled',false)) { + if (!empty($yubikeys)) { if (!$this->yubikeyIsOtp($uOTP)) { - throw new Exception(t('Invalid username or password.')); + throw new \Exception(t('Invalid username or password.')); } //Check the otp and then the key id - $clientID = \Config::get('auth.ldap.yubikeyClientID',''); - $secretKey = \Config::get('auth.ldap.yubikeySecretKey',''); + $clientID = Config::get('auth.ldap.yubikeyClientID',''); + $secretKey = Config::get('auth.ldap.yubikeySecretKey',''); $https = 1; $yubi = new AuthYubico($clientID,$secretKey,$https); $auth = $yubi->verify($uOTP); if (\PEAR::isError($auth)) { - throw new Exception(t('Invalid username or password.')); + throw new \Exception(t('Invalid username or password.')); } $foundKey = 0; foreach ($yubikeys as $yubikey) { @@ -150,11 +147,11 @@ class Controller extends AuthenticationTypeController { } } if (!$foundKey) { - throw new Exception(t('Invalid username or password.')); + throw new \Exception(t('Invalid username or password.')); } } else { - if (!\Config::get('auth.ldap.yubikeyAllowEmptyKey',false)) { - throw new Exception(t('Yubikey is required to login.')); + if (!Config::get('auth.ldap.yubikeyAllowEmptyKey',false)) { + throw new \Exception(t('Yubikey is required to login.')); } } } @@ -188,6 +185,7 @@ class Controller extends AuthenticationTypeController { } } if ($post['uMaintainLogin']) { + //This is a little tricky. Use concrete AT to create a cookie. $user->setAuthTypeCookie('concrete'); } return $user;