*/ class User implements ServiceManagerAwareInterface { /** * @var ServiceManager */ protected $serviceManager; /** * @var ModuleOptions */ protected $options; /** * @var AuthenticationOptionsInterface */ protected $zfcUserOptions; /** * @var LdapPeopleService */ protected $ldapPeopleService; /** * Save authenticated user in database from LDAP data. * * @return bool */ public function userAuthenticated(AuthEvent $e) { if (!$this->getOptions()->getSaveLdapUserInDatabase()) { return false; } if (!($username = $e->getIdentity())) { return false; } if (is_int($username)) { // c'est un id: l'utilisateur existe déjà dans la bdd (et pas dans le LDAP), rien à faire return true; } if (!is_string($username)) { throw new Exception("Identité rencontrée inattendue."); } // recherche de l'individu dans l'annuaire LDAP $ldapPeople = $this->getLdapPeopleService()->getMapper()->findOneByUsername($username); if (!$ldapPeople) { return false; } // update/insert de l'utilisateur dans la table de l'appli $mapper = $this->getServiceManager()->get('zfcuser_user_mapper'); /* @var $mapper \ZfcUser\Mapper\User */ try { $entity = $mapper->findByUsername($username); } catch (PDOException $pdoe) { throw new Exception( "Erreur lors de la recherche de l'utilisateur '$username' dans la base de données : " . $pdoe->getMessage(), null, $pdoe); return true; } if (!$entity) { $entityClass = $this->getZfcUserOptions()->getUserEntityClass(); $entity = new $entityClass; $entity->setUsername($username); $method = 'insert'; } else { $method = 'update'; } $entity->setEmail($ldapPeople->getMail()); $entity->setDisplayName($ldapPeople->getDisplayName()); $entity->setPassword('ldap'); $entity->setState(in_array('deactivated', ldap_explode_dn($ldapPeople->getDn(), 1)) ? 0 : 1); try { $mapper->$method($entity); } catch (PDOException $pdoe) { throw new Exception( "Erreur lors de l'enregistrement de l'utilisateur '$username' dans la base de données : " . $pdoe->getMessage(), null, $pdoe); return true; } return true; } /** * Retrieve service manager instance * * @return ServiceManager */ public function getServiceManager() { return $this->serviceManager; } /** * Set service manager * * @param ServiceManager $serviceManager */ public function setServiceManager(ServiceManager $serviceManager) { $this->serviceManager = $serviceManager; } /** * get ldap people service * * @return LdapPeopleService */ public function getLdapPeopleService() { if (null === $this->ldapPeopleService) { $this->ldapPeopleService = $this->getServiceManager()->get('ldap_people_service'); } return $this->ldapPeopleService; } /** * set ldap people service * * @param LdapPeopleService $service * @return User */ public function setLdapPeopleService(LdapPeopleService $service) { $this->ldapPeopleService = $service; return $this; } /** * @param ModuleOptions $options */ public function setOptions(ModuleOptions $options) { $this->options = $options; } /** * @return ModuleOptions */ public function getOptions() { if (!$this->options instanceof ModuleOptions) { $this->setOptions($this->getServiceManager()->get('unicaen-auth_module_options')); } return $this->options; } /** * @param AuthenticationOptionsInterface $options */ public function setZfcUserOptions(AuthenticationOptionsInterface $options) { $this->zfcUserOptions = $options; } /** * @return AuthenticationOptionsInterface */ public function getZfcUserOptions() { if (!$this->zfcUserOptions instanceof AuthenticationOptionsInterface) { $this->setZfcUserOptions($this->getServiceManager()->get('zfcuser_module_options')); } return $this->zfcUserOptions; } }