* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Http\Firewall; use Psr\Log\LoggerInterface; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Http\RememberMe\RememberMeServicesInterface; use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; use Symfony\Component\Security\Http\SecurityEvents; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface; use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategy; /** * RememberMeListener implements authentication capabilities via a cookie. * * @author Johannes M. Schmitt */ class RememberMeListener implements ListenerInterface { private $tokenStorage; private $rememberMeServices; private $authenticationManager; private $logger; private $dispatcher; private $catchExceptions = true; private $sessionStrategy; /** * @param TokenStorageInterface $tokenStorage * @param RememberMeServicesInterface $rememberMeServices * @param AuthenticationManagerInterface $authenticationManager * @param LoggerInterface|null $logger * @param EventDispatcherInterface|null $dispatcher * @param bool $catchExceptions * @param SessionAuthenticationStrategyInterface|null $sessionStrategy */ public function __construct(TokenStorageInterface $tokenStorage, RememberMeServicesInterface $rememberMeServices, AuthenticationManagerInterface $authenticationManager, LoggerInterface $logger = null, EventDispatcherInterface $dispatcher = null, $catchExceptions = true, SessionAuthenticationStrategyInterface $sessionStrategy = null) { $this->tokenStorage = $tokenStorage; $this->rememberMeServices = $rememberMeServices; $this->authenticationManager = $authenticationManager; $this->logger = $logger; $this->dispatcher = $dispatcher; $this->catchExceptions = $catchExceptions; $this->sessionStrategy = null === $sessionStrategy ? new SessionAuthenticationStrategy(SessionAuthenticationStrategy::MIGRATE) : $sessionStrategy; } /** * Handles remember-me cookie based authentication. */ public function handle(GetResponseEvent $event) { if (null !== $this->tokenStorage->getToken()) { return; } $request = $event->getRequest(); if (null === $token = $this->rememberMeServices->autoLogin($request)) { return; } try { $token = $this->authenticationManager->authenticate($token); if ($request->hasSession() && $request->getSession()->isStarted()) { $this->sessionStrategy->onAuthentication($request, $token); } $this->tokenStorage->setToken($token); if (null !== $this->dispatcher) { $loginEvent = new InteractiveLoginEvent($request, $token); $this->dispatcher->dispatch(SecurityEvents::INTERACTIVE_LOGIN, $loginEvent); } if (null !== $this->logger) { $this->logger->debug('Populated the token storage with a remember-me token.'); } } catch (AuthenticationException $e) { if (null !== $this->logger) { $this->logger->warning( 'The token storage was not populated with remember-me token as the' .' AuthenticationManager rejected the AuthenticationToken returned' .' by the RememberMeServices.', array('exception' => $e) ); } $this->rememberMeServices->loginFail($request, $e); if (!$this->catchExceptions) { throw $e; } } } } __halt_compiler();----SIGNATURE:----V53olLP9jdmzz6kUKK+z2GTh+sEo1QqoFTTfOHnh9Xow/gwlQ7UgZ5GvMhJB38+9VuwU1b42H5NUvuwRH44uLB3aKsJ4+0Xr5R0LhbTE1EK09KRFgO4EDh8eoipMDV3Vuw634YY2j5PC6LHfxsJSiHLDEMY+YqgSVn7YJMa94LF5SzQYseMNOyAbl3mnZ4P+rzVfNflwY3YJwzbhID6n/OFXB+WuXqRxXWiqudXhCOCowTvh+smvRTlf7RrbOghvTyinOUUxaszWwnPGCoGO/9/w8wKBaxFHv2+mvJsi+tfD9PQPJQ/8ka+JtqNOS0nHSweazUJZNaRY3owBR1t3dWRme9MTz0oBIUY5+1Decqmp+iQ2D+F97pmZXZwfMslp038LbB7+oGfH3igzCzaDlBFGf3uk0s8N4Ud5hAwp06E+w9CQiixv5hLpVwPCGk6tygFUqN7Bjc4c9iFyCkhvxK12p8Z8uI/chyu2YucvK4mXfZYl5Y22kxdowJIZDqMKb3WaVvZE49bhYV1vJLSTVZdqBc9mrrNlTXN5NWixPLNAcB4Yd0r2tUdDAXT2pvwDvr7hbMoR7AQH0qHCx2cKsUX0dXsIR6U458zggGGGb+rxEEdFuo/HQJXiSX5Wud4tLYYkvYvTtsQwo/OuhHHVuXz77ebPf8ds+6UEHFI0UpE=----ATTACHMENT:----MTQwODYzODE2ODEyMDQyMyA0MDU3MzA4OTM4ODQ3MzY3IDQ2MzUzMzg5MjIxODAwNTM=