Select Git revision
-
Bertrand Gauthier authored
L'adapter d'authentification Db a été supprimé à tort, il est nécessaire car il empêche l'auth de planter si aucune table "user" n'existe.
Bertrand Gauthier authoredL'adapter d'authentification Db a été supprimé à tort, il est nécessaire car il empêche l'auth de planter si aucune table "user" n'existe.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
User.php 5.29 KiB
<?php
namespace UnicaenAuth\Service;
use Zend\ServiceManager\ServiceManager;
use UnicaenApp\Service\Ldap\People as LdapPeopleService;
use UnicaenAuth\Options\AuthenticationOptionsInterface;
use \ZfcUser\Authentication\Adapter\AdapterChainEvent as AuthEvent;
/**
* Service d'enregistrement dans la table des utilisateurs de l'application
* de l'utilisateur authentifié avec succès.
*
* @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
*/
class User implements \Zend\ServiceManager\ServiceManagerAwareInterface
{
/**
* @var ServiceManager
*/
protected $serviceManager;
/**
* @var AuthenticationOptionsInterface
*/
protected $options;
/**
* @var \ZfcUser\Options\ModuleOptions
*/
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 \UnicaenApp\Exception("Identité rencontrée inattendue.");
}
// recherche de l'individu dans l'annuaire LDAP
$ldapPeople = $this->getLdapPeopleService()->getMapper()->findByUsername($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 \UnicaenApp\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 \UnicaenApp\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 AuthenticationOptionsInterface2 $options
*/
public function setOptions(AuthenticationOptionsInterface $options)
{
$this->options = $options;
}
/**
* @return AuthenticationOptionsInterface
*/
public function getOptions()
{
if (!$this->options instanceof AuthenticationOptionsInterface) {
$this->setOptions($this->getServiceManager()->get('unicaen-auth_module_options'));
}
return $this->options;
}
/**
* @param \ZfcUser\Options\AuthenticationOptionsInterface $options
*/
public function setZfcUserOptions(\ZfcUser\Options\AuthenticationOptionsInterface $options)
{
$this->zfcUserOptions = $options;
}
/**
* @return \ZfcUser\Options\AuthenticationOptionsInterface
*/
public function getZfcUserOptions()
{
if (!$this->zfcUserOptions instanceof \ZfcUser\Options\AuthenticationOptionsInterface) {
$this->setZfcUserOptions($this->getServiceManager()->get('zfcuser_module_options'));
}
return $this->zfcUserOptions;
}
}