src/EventListener/PasswordResetListener.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\HttpKernel\HttpKernel;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\RouterInterface;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\HttpKernelInterface;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\Security\Core\User\UserInterface;
  10. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  11. use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
  12. /**
  13.  * Listener that check if the user needs to update its password
  14.  */
  15. class PasswordResetListener
  16. {
  17.     protected $router;
  18.     protected $tokenStorage;
  19.     public function __construct(UsageTrackingTokenStorage $tokenStorageRouterInterface $router)
  20.     {
  21.         $this->router       $router;
  22.         $this->tokenStorage $tokenStorage;
  23.     }
  24.     public function onKernelRequest(RequestEvent $event)
  25.     {
  26.         // Check that the current request is a "MASTER_REQUEST"
  27.         // Ignore any sub-request
  28.         if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
  29.             return;
  30.         }
  31.         // Check if the route we try to access is "edit_password_page"
  32.         if ($event->getRequest()->attributes->get("_route") == "edit_password_page") {
  33.             return;
  34.         }
  35.         // Check token authentication availability
  36.         if ($this->tokenStorage->getToken()) {
  37.             $user $this->tokenStorage->getToken()->getUser();
  38.             if($user instanceof UserInterface) {
  39.                 // Check boolean "password_reset"
  40.                 // If true, force the user to change its password
  41.                 if($user->getPasswordReset()) {
  42.                     $event->setResponse(new RedirectResponse($this->router->generate("edit_password_page")));
  43.                     $event->stopPropagation();
  44.                 }
  45.             }
  46.         }
  47.     }
  48. }