*/ namespace Blossom\Classes; class Employee implements ExternalIdentity { private static $connection; private $config; private $entry; /** * @param array $config * @param string $username * @param string $password * @throws Exception */ public static function authenticate($username,$password) { global $DIRECTORY_CONFIG; $config = $DIRECTORY_CONFIG['Employee']; $bindUser = sprintf(str_replace('{username}','%s',$config['DIRECTORY_USER_BINDING']),$username); $connection = ldap_connect($config['DIRECTORY_SERVER']) or die("Couldn't connect to ADS"); ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, 3); if (ldap_bind($connection,$bindUser,$password)) { return true; } } /** * Loads an entry from the LDAP server for the given user * * @param array $config * @param string $username */ public function __construct($username) { global $DIRECTORY_CONFIG; $this->config = $DIRECTORY_CONFIG['Employee']; $this->openConnection(); $result = ldap_search( self::$connection, $this->config['DIRECTORY_BASE_DN'], $this->config['DIRECTORY_USERNAME_ATTRIBUTE']."=$username" ); if (ldap_count_entries(self::$connection,$result)) { $entries = ldap_get_entries(self::$connection, $result); $this->entry = $entries[0]; } else { throw new \Exception('ldap/unknownUser'); } } /** * Creates the connection to the LDAP server */ private function openConnection() { if (!self::$connection) { if (self::$connection = ldap_connect($this->config['DIRECTORY_SERVER'])) { ldap_set_option(self::$connection, LDAP_OPT_PROTOCOL_VERSION,3); ldap_set_option(self::$connection, LDAP_OPT_REFERRALS, 0); if (!empty($this->config['DIRECTORY_ADMIN_BINDING'])) { if (!ldap_bind( self::$connection, $this->config['DIRECTORY_ADMIN_BINDING'], $this->config['DIRECTORY_ADMIN_PASS'] )) { throw new \Exception(ldap_error(self::$connection)); } } else { if (!ldap_bind(self::$connection)) { throw new \Exception(ldap_error(self::$connection)); } } } else { throw new \Exception(ldap_error(self::$connection)); } } } /** * @return string */ public function getUsername() { return $this->get('cn'); } public function getFirstname() { return $this->get('givenname'); } public function getLastname() { return $this->get('sn'); } public function getEmail() { return $this->get('mail'); } public function getPhone() { return $this->get('telephonenumber'); } public function getAddress() { return $this->get('postaladdress'); } public function getCity() { return $this->get('l'); } public function getState() { return $this->get('st'); } public function getZip() { return $this->get('postalcode'); } /** * Returns the first scalar value from the entry's field * * @param string $field * @return string */ private function get($field) { return isset($this->entry[$field][0]) ? $this->entry[$field][0] : ''; } }