From 090ecaa553d8e93a5740ce028a354bd7838e091d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurent=20L=C3=A9cluse?= <laurent.lecluse@unicaen.fr> Date: Thu, 5 Dec 2019 10:12:19 +0100 Subject: [PATCH] =?UTF-8?q?R=C3=A9solution=20d=C3=A9finitive=20du=20bug=20?= =?UTF-8?q?li=C3=A9=20aux=20donn=C3=A9es=20de=20login=20r=C3=A9siduelles?= =?UTF-8?q?=20en=20m=C3=A9moire=20apr=C3=A8s=20d=C3=A9connexion.=20Utilisa?= =?UTF-8?q?tion=20de=20la=20config=20pour=20la=20recherche=20LDAP=20en=20c?= =?UTF-8?q?as=20d'usurpation=20d'identit=C3=A9.=20Mise=20en=20place=20d'un?= =?UTF-8?q?=20EventManager=20unique=20et=20d=C3=A9di=C3=A9=20=C3=A0=20Unic?= =?UTF-8?q?aenAuth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/module.config.php | 1 + .../Adapter/AbstractFactory.php | 7 +++-- .../Authentication/Adapter/Cas.php | 9 ------ src/UnicaenAuth/Authentication/Adapter/Db.php | 9 ------ .../Authentication/Adapter/Ldap.php | 11 +------ .../Authentication/Storage/Chain.php | 3 -- .../Storage/ChainServiceFactory.php | 4 +-- src/UnicaenAuth/Event/EventManager.php | 8 +++++ src/UnicaenAuth/Event/EventManagerFactory.php | 29 +++++++++++++++++++ .../Provider/Identity/ChainServiceFactory.php | 4 +-- 10 files changed, 48 insertions(+), 37 deletions(-) create mode 100644 src/UnicaenAuth/Event/EventManager.php create mode 100644 src/UnicaenAuth/Event/EventManagerFactory.php diff --git a/config/module.config.php b/config/module.config.php index e031665..7012282 100644 --- a/config/module.config.php +++ b/config/module.config.php @@ -494,6 +494,7 @@ return [ 'UnicaenApp\HistoriqueListener' => HistoriqueListenerFactory::class, 'UnicaenAuth\HistoriqueListener' => HistoriqueListenerFactory::class, + \UnicaenAuth\Event\EventManager::class => \UnicaenAuth\Event\EventManagerFactory::class, ], 'lazy_services' => [ // Mapping services to their class names is required since the ServiceManager is not a declarative DIC. diff --git a/src/UnicaenAuth/Authentication/Adapter/AbstractFactory.php b/src/UnicaenAuth/Authentication/Adapter/AbstractFactory.php index 6a32bd9..fa4e56d 100644 --- a/src/UnicaenAuth/Authentication/Adapter/AbstractFactory.php +++ b/src/UnicaenAuth/Authentication/Adapter/AbstractFactory.php @@ -6,7 +6,7 @@ use Interop\Container\ContainerInterface; use UnicaenApp\Exception\LogicException; use UnicaenAuth\Options\ModuleOptions; use UnicaenAuth\Service\User; -use Zend\EventManager\EventManager; +use UnicaenAuth\Event\EventManager; use Zend\EventManager\EventManagerAwareInterface; use Zend\Router\Http\TreeRouteStack; use Zend\ServiceManager\AbstractFactoryInterface; @@ -62,10 +62,13 @@ class AbstractFactory implements AbstractFactoryInterface if ($adapter instanceof EventManagerAwareInterface) { /** @var EventManager $eventManager */ - $eventManager = $container->get('EventManager'); + $eventManager = $container->get(EventManager::class); $adapter->setEventManager($eventManager); $userService = $container->get('unicaen-auth_user_service'); /* @var $userService \UnicaenAuth\Service\User */ $eventManager->attach('userAuthenticated', [$userService, 'userAuthenticated'], 100); + $eventManager->attach('clear', function() use ($adapter){ + $adapter->getStorage()->clear(); + }); } return $adapter; diff --git a/src/UnicaenAuth/Authentication/Adapter/Cas.php b/src/UnicaenAuth/Authentication/Adapter/Cas.php index d1b0689..12cae0a 100644 --- a/src/UnicaenAuth/Authentication/Adapter/Cas.php +++ b/src/UnicaenAuth/Authentication/Adapter/Cas.php @@ -78,15 +78,6 @@ class Cas extends AbstractAdapter implements EventManagerAwareInterface $this->router = $router; } - public function getStorage() - { - if (null === $this->storage) { - $this->setStorage(new Session()); - } - - return $this->storage; - } - /** * Réalise l'authentification. * diff --git a/src/UnicaenAuth/Authentication/Adapter/Db.php b/src/UnicaenAuth/Authentication/Adapter/Db.php index 2f13e4c..39b1c8d 100644 --- a/src/UnicaenAuth/Authentication/Adapter/Db.php +++ b/src/UnicaenAuth/Authentication/Adapter/Db.php @@ -37,15 +37,6 @@ class Db extends \ZfcUser\Authentication\Adapter\Db implements ServiceLocatorAwa return $this; } - public function getStorage() - { - if (null === $this->storage) { - $this->setStorage(new Session()); - } - - return $this->storage; - } - /** * Authentification. * diff --git a/src/UnicaenAuth/Authentication/Adapter/Ldap.php b/src/UnicaenAuth/Authentication/Adapter/Ldap.php index 41f7087..711935d 100644 --- a/src/UnicaenAuth/Authentication/Adapter/Ldap.php +++ b/src/UnicaenAuth/Authentication/Adapter/Ldap.php @@ -78,15 +78,6 @@ class Ldap extends AbstractAdapter implements EventManagerAwareInterface $this->appModuleOptions = $appModuleOptions; } - public function getStorage() - { - if (null === $this->storage) { - $this->setStorage(new Session()); - } - - return $this->storage; - } - /** * * @param EventInterface $e @@ -224,7 +215,7 @@ class Ldap extends AbstractAdapter implements EventManagerAwareInterface // verif existence du login usurpé if ($this->usernameUsurpe) { // s'il nexiste pas, échec de l'authentification - if (!$this->getLdapAuthAdapter()->getLdap()->searchEntries("(supannAliasLogin=$this->usernameUsurpe)")) { + if (!@$this->getLdapAuthAdapter()->getLdap()->searchEntries("(".$this->getOptions()->getLdapUsername()."=$this->usernameUsurpe)")) { $this->usernameUsurpe = null; $success = false; } diff --git a/src/UnicaenAuth/Authentication/Storage/Chain.php b/src/UnicaenAuth/Authentication/Storage/Chain.php index bf958d0..c357b79 100644 --- a/src/UnicaenAuth/Authentication/Storage/Chain.php +++ b/src/UnicaenAuth/Authentication/Storage/Chain.php @@ -163,9 +163,6 @@ class Chain implements StorageInterface, EventManagerAwareInterface */ public function getEventManager() { - if (null === $this->eventManager) { - $this->eventManager = new EventManager(); - } return $this->eventManager; } diff --git a/src/UnicaenAuth/Authentication/Storage/ChainServiceFactory.php b/src/UnicaenAuth/Authentication/Storage/ChainServiceFactory.php index ca4eafc..7318ad8 100644 --- a/src/UnicaenAuth/Authentication/Storage/ChainServiceFactory.php +++ b/src/UnicaenAuth/Authentication/Storage/ChainServiceFactory.php @@ -4,7 +4,7 @@ namespace UnicaenAuth\Authentication\Storage; use Interop\Container\ContainerInterface; use UnicaenAuth\Options\ModuleOptions; -use Zend\EventManager\EventManager; +use UnicaenAuth\Event\EventManager; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; @@ -33,7 +33,7 @@ class ChainServiceFactory implements FactoryInterface $chain = new Chain(); /** @var EventManager $eventManager */ - $eventManager = $container->get('EventManager'); + $eventManager = $container->get(EventManager::class); $chain->setEventManager($eventManager); diff --git a/src/UnicaenAuth/Event/EventManager.php b/src/UnicaenAuth/Event/EventManager.php new file mode 100644 index 0000000..d5bbabb --- /dev/null +++ b/src/UnicaenAuth/Event/EventManager.php @@ -0,0 +1,8 @@ +<?php + +namespace UnicaenAuth\Event; + +class EventManager extends \Zend\EventManager\EventManager +{ + +} \ No newline at end of file diff --git a/src/UnicaenAuth/Event/EventManagerFactory.php b/src/UnicaenAuth/Event/EventManagerFactory.php new file mode 100644 index 0000000..74d9c3b --- /dev/null +++ b/src/UnicaenAuth/Event/EventManagerFactory.php @@ -0,0 +1,29 @@ +<?php + +namespace UnicaenAuth\Event; + +use Interop\Container\ContainerInterface; + +/** + * Description of EventManagerFactory + * + * @author LECLUSE Laurent <laurent.lecluse at unicaen.fr> + */ +class EventManagerFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return EventManager + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null) + { + $shared = $container->has('SharedEventManager') ? $container->get('SharedEventManager') : null; + $eventManager = new EventManager($shared); + + return $eventManager; + } +} \ No newline at end of file diff --git a/src/UnicaenAuth/Provider/Identity/ChainServiceFactory.php b/src/UnicaenAuth/Provider/Identity/ChainServiceFactory.php index 41c874b..1909a84 100644 --- a/src/UnicaenAuth/Provider/Identity/ChainServiceFactory.php +++ b/src/UnicaenAuth/Provider/Identity/ChainServiceFactory.php @@ -4,8 +4,8 @@ namespace UnicaenAuth\Provider\Identity; use BjyAuthorize\Service\Authorize; use Interop\Container\ContainerInterface; +use UnicaenAuth\Event\EventManager; use UnicaenAuth\Service\UserContext; -use Zend\EventManager\EventManager; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; @@ -32,7 +32,7 @@ class ChainServiceFactory implements FactoryInterface $authorizeService = $container->get('BjyAuthorize\Service\Authorize'); /** @var EventManager $eventManager */ - $eventManager = $container->get('EventManager'); + $eventManager = $container->get(EventManager::class); $chain->setUserContextService($userContextService); $chain->setAuthorizeService($authorizeService); -- GitLab