- <?php
- /*
-  * This file is part of the Symfony package.
-  *
-  * (c) Fabien Potencier <fabien@symfony.com>
-  *
-  * 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\HttpFoundation\Request;
- use Symfony\Component\HttpKernel\Event\RequestEvent;
- 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\Event\InteractiveLoginEvent;
- use Symfony\Component\Security\Http\RememberMe\RememberMeServicesInterface;
- use Symfony\Component\Security\Http\SecurityEvents;
- use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategy;
- use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface;
- use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
- trigger_deprecation('symfony/security-http', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', RememberMeListener::class);
- /**
-  * RememberMeListener implements authentication capabilities via a cookie.
-  *
-  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
-  *
-  * @final
-  *
-  * @deprecated since Symfony 5.3, use the new authenticator system instead
-  */
- class RememberMeListener extends AbstractListener
- {
-     private $tokenStorage;
-     private $rememberMeServices;
-     private $authenticationManager;
-     private $logger;
-     private $dispatcher;
-     private $catchExceptions = true;
-     private $sessionStrategy;
-     public function __construct(TokenStorageInterface $tokenStorage, RememberMeServicesInterface $rememberMeServices, AuthenticationManagerInterface $authenticationManager, LoggerInterface $logger = null, EventDispatcherInterface $dispatcher = null, bool $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 = $sessionStrategy ?? new SessionAuthenticationStrategy(SessionAuthenticationStrategy::MIGRATE);
-     }
-     /**
-      * {@inheritdoc}
-      */
-     public function supports(Request $request): ?bool
-     {
-         return null; // always run authenticate() lazily with lazy firewalls
-     }
-     /**
-      * Handles remember-me cookie based authentication.
-      */
-     public function authenticate(RequestEvent $event)
-     {
-         if (null !== $this->tokenStorage->getToken()) {
-             return;
-         }
-         $request = $event->getRequest();
-         try {
-             if (null === $token = $this->rememberMeServices->autoLogin($request)) {
-                 return;
-             }
-         } catch (AuthenticationException $e) {
-             if (null !== $this->logger) {
-                 $this->logger->warning(
-                     'The token storage was not populated with remember-me token as the'
-                    .' RememberMeServices was not able to create a token from the remember'
-                    .' me information.', ['exception' => $e]
-                 );
-             }
-             $this->rememberMeServices->loginFail($request);
-             if (!$this->catchExceptions) {
-                 throw $e;
-             }
-             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($loginEvent, SecurityEvents::INTERACTIVE_LOGIN);
-             }
-             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.', ['exception' => $e]
-                 );
-             }
-             $this->rememberMeServices->loginFail($request, $e);
-             if (!$this->catchExceptions) {
-                 throw $e;
-             }
-         }
-     }
- }
-