src/EventSubscriber/RedirectUserSubscriber.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use App\Helper\UserHelper;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpKernel\HttpKernelInterface;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use Symfony\Component\Routing\RouterInterface as Router;
  11. use Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException;
  12. use Symfony\Component\Security\Core\Security;
  13. class RedirectUserSubscriber implements EventSubscriberInterface
  14. {
  15. /**
  16. * @var Security $security
  17. */
  18. public $security;
  19. /**
  20. * @var Router $router
  21. */
  22. public $router;
  23. /**
  24. * @var string $passwordPolicyDeadline
  25. */
  26. private string $passwordPolicyDeadline;
  27. public function __construct(Security $security, Router $router, string $passwordPolicyDeadline)
  28. {
  29. $this->security = $security;
  30. $this->router = $router;
  31. $this->passwordPolicyDeadline = $passwordPolicyDeadline;
  32. }
  33. public function onKernelRequest(RequestEvent $event): void
  34. {
  35. $route = $event->getRequest()->get('_route');
  36. $type = $event->getRequestType();
  37. try {
  38. if (HttpKernelInterface::MAIN_REQUEST === $type) {
  39. /** @var User $user */
  40. if ($user = $this->security->getUser()) {
  41. $allowedRoutes = ['first_login', 'update_password', 'user_profile', 'supplier_profile', 'app_logout', 'app_reset_password', 'app_forgot_password_request'];
  42. $passwordPolicyDeadline = new \DateTime($this->passwordPolicyDeadline);
  43. $now = new \DateTime();
  44. if ($now >= $passwordPolicyDeadline && !$user->isPasswordUpdatedForNewPolicy() && !in_array($route, $allowedRoutes)) {
  45. $event->setResponse(new RedirectResponse($this->router->generate('update_password')));
  46. return;
  47. }
  48. if (!$user->isSecured() && $route !== 'first_login') {
  49. $event->setResponse(new RedirectResponse($this->router->generate('first_login')));
  50. return;
  51. }
  52. }
  53. $isAdmin = $this->security->isGranted('ROLE_ADMIN');
  54. $isUser = $this->security->isGranted('ROLE_USER');
  55. if (($isAdmin || $isUser) && $route == 'fos_user_security_login') {
  56. $event->setResponse(new RedirectResponse($this->router->generate('dashboard')));
  57. }
  58. }
  59. } catch (AuthenticationCredentialsNotFoundException $e) {
  60. }
  61. }
  62. public static function getSubscribedEvents(): array
  63. {
  64. return [
  65. KernelEvents::REQUEST => 'onKernelRequest',
  66. ];
  67. }
  68. }