* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Authentication; use Symfony\Component\Security\Core\Event\AuthenticationFailureEvent; use Symfony\Component\Security\Core\Event\AuthenticationEvent; use Symfony\Component\Security\Core\AuthenticationEvents; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Security\Core\Exception\AccountStatusException; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Exception\ProviderNotFoundException; use Symfony\Component\Security\Core\Authentication\Provider\AuthenticationProviderInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** * AuthenticationProviderManager uses a list of AuthenticationProviderInterface * instances to authenticate a Token. * * @author Fabien Potencier * @author Johannes M. Schmitt */ class AuthenticationProviderManager implements AuthenticationManagerInterface { private $providers; private $eraseCredentials; private $eventDispatcher; /** * @param iterable|AuthenticationProviderInterface[] $providers An iterable with AuthenticationProviderInterface instances as values * @param bool $eraseCredentials Whether to erase credentials after authentication or not * * @throws \InvalidArgumentException */ public function __construct($providers, $eraseCredentials = true) { if (!$providers) { throw new \InvalidArgumentException('You must at least add one authentication provider.'); } $this->providers = $providers; $this->eraseCredentials = (bool) $eraseCredentials; } public function setEventDispatcher(EventDispatcherInterface $dispatcher) { $this->eventDispatcher = $dispatcher; } /** * {@inheritdoc} */ public function authenticate(TokenInterface $token) { $lastException = null; $result = null; foreach ($this->providers as $provider) { if (!$provider instanceof AuthenticationProviderInterface) { throw new \InvalidArgumentException(sprintf('Provider "%s" must implement the AuthenticationProviderInterface.', get_class($provider))); } if (!$provider->supports($token)) { continue; } try { $result = $provider->authenticate($token); if (null !== $result) { break; } } catch (AccountStatusException $e) { $lastException = $e; break; } catch (AuthenticationException $e) { $lastException = $e; } } if (null !== $result) { if (true === $this->eraseCredentials) { $result->eraseCredentials(); } if (null !== $this->eventDispatcher) { $this->eventDispatcher->dispatch(AuthenticationEvents::AUTHENTICATION_SUCCESS, new AuthenticationEvent($result)); } return $result; } if (null === $lastException) { $lastException = new ProviderNotFoundException(sprintf('No Authentication Provider found for token of class "%s".', get_class($token))); } if (null !== $this->eventDispatcher) { $this->eventDispatcher->dispatch(AuthenticationEvents::AUTHENTICATION_FAILURE, new AuthenticationFailureEvent($token, $lastException)); } $lastException->setToken($token); throw $lastException; } } __halt_compiler();----SIGNATURE:----PfBXbe1Q0nOQZc/8/Obqzscs+2CkErBKkt8o2WzNaYb90r65NtusPdiy482xoU9rTy1xFn9X6ISAtsPOXCujlgBldsp2RKJWfVkildxXvcTcONvkczBYSkvNkMMFOrB5YVdlG4fxusmUf/N5VkawBLRFj5Nplh69TfY7EKBiqBhr9a/tRfo32lPDQ35Kb3Ex5hS7XAkLk07WNhVytyGMncTiuCmANvfb4dNDH+Cz5Y5WMjPXIynX1+zaiwblnJFP5zz1M+ot+UvXr4c4qF27XnI81Nuki28nVOETmqYGKykbZsKGEk9RX8LDXnR8cMKwf9oQOF9J7t9SFo0Vl7E1ntD0zEdKYseuYA6lYd/S4grIkA1C5/a8AxOH+tosnn4eTQqKY+BeaNi/wuBgdIppi70shoKMfWyC5NRI25zzWWXmPrMzzzpTfQvbF/+7o3/ZwUtsdl1J6zVtqJJpaCd7QQQ+twULq6KcgFPD14912w5lkvkKxFwZ+hqjX4Y513ha4obF8uD4g1L4JkLlf1LpnYkGXDez9lX+vZ1YjnaKqpKO6aio5tqccM2Bd//UaNdCmI/7xfSGm7HQY5aoXIZJ60Nrih9b8CQ9KyVVCifQRQXYXvBFBHLNB7RrsRR3/Ts3HMoR/j0NAAFrdIB4dkBDnhebnM+2I3ufN3MajSLjsGU=----ATTACHMENT:----MzAxMjk0Mjc5NjU0MzMxOCA2ODI1Njg1MjkxODk4NzEgNDAyNjE3MzM2NzAyNjQxNQ==