src/Bundles/UserBundle/EventListener/User/BeforeLogoutListener.php line 23

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Bundles\UserBundle\EventListener\User;
  4. use App\Bundles\AuditBundle\Service\SessionAuditEntry\SessionAuditEntryModifier;
  5. use App\Platform\Service\SessionProvider;
  6. use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\Security\Http\Event\LogoutEvent;
  10. #[AsEventListener(eventLogoutEvent::class, method'onLogout'priority8)]
  11. class BeforeLogoutListener
  12. {
  13.     public function __construct(
  14.         private readonly SessionAuditEntryModifier $sessionAuditEntryModifier,
  15.         private readonly SessionProvider $sessionProvider,
  16.     ) {
  17.     }
  18.     public function onLogout(LogoutEvent $event): void
  19.     {
  20.         if (!$this->isLogoutRequest($event->getRequest())) {
  21.             return;
  22.         }
  23.         $session $this->sessionProvider->provide($event->getRequest());
  24.         $this->sessionAuditEntryModifier->markLogoutTimeBySession($session);
  25.         $request $event->getRequest();
  26.         if ($request->query->has('expiredSession')) {
  27.             $event->setResponse(new RedirectResponse('/login?expiredSession=true'));
  28.         }
  29.     }
  30.     private function isLogoutRequest(Request $request): bool
  31.     {
  32.         return $request->attributes->get('_route') === 'app_logout';
  33.     }
  34. }