Skip to content
Snippets Groups Projects
Select Git revision
  • 8aef1cb697526af53810bee3b0cdab302d6774fe
  • master default protected
  • 5.x
  • ll-php8-bs5
  • release_5_bs5
  • ll-php8
  • 4.x
  • laminas_migration
  • release_1.0.0.2
  • release_4.0.0
  • release_3.2.8
  • bootstrap4_migration
  • 1.0.0.3
  • 6.0.7
  • 6.0.6
  • 6.0.5
  • 6.0.4
  • 6.0.3
  • 6.0.2
  • 6.0.1
  • 5.1.1
  • 6.0.0
  • 5.1.0
  • 5.0.0
  • 4.0.2
  • 3.2.11
  • 4.0.1
  • 3.2.10
  • 4.0.0
  • 1.0.0.2
  • 3.2.9
  • 3.2.8
32 results

Db.php

Blame
  • 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;
        }
    }