* * 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:----i71veUKNKrOyTbGGx+gS/bjMJ/ZcOM5Ig1sgXgtd9MiduOhAH344++thglld59YYz8cGZsblZPzCZz845tp25TRZzMFHFzkfLr3g42CCp6DuA8bansGHAkDl5fMq/amAf0N2NBU+VK1NLKv+P8CpBQyrYox8KLfQLalpY+A9FaO36QUaGA9r0r68eBkDbkRZuiJoJ+UlizXs4GR2Aji/b3bd7QNl+5fx9UgAWJJeTmFGlGEtzBqx4i/RfGIRIOgke6+FVVlzmugR1y0D+BzvoBRrjbOfXQ+foPXmIr7tcP0xxW5sxiPX5tsWSLJg1J1OO/238TUXJvqKijreAB5WnxgD7aIhgCj3enPv05FXmp+Jb/akl5aDTuKFuhGAlKlPg6lrj6m2aPkpemJdd7CQOfMcDgWaYpIAG1LA8vdDKqp/DtTjIj1HDIoG/Qv6gJKlmCFK5DTNt7sbXtyEIXDaVDLAu130Duqd/ht981eoNEQulQpONydAbAW+CwqgZBkCxC4ylgtZkMFDabaiQrPPnN60y2NHDhje59QsK6LEMtXK0L5/IXVlR/KQbX2UW9hElKQG5IOKi2MaSNg+z95x/iF28x5RBHKe1APrXowHMOpAiwSYRYgVDwigAzMobdUrpqZj3bFNFyLhJ14aBUaD9Z3a7v65m7CtADbts3+jKvg=----ATTACHMENT:----MTgyMDM1NjQ4MTU5MTc1OCAzNTc3Nzk4MTIyMDg1MTg1IDc4ODg2ODU3NjY0NjE4NQ==