. */ declare(strict_types=1); namespace App\EventSubscriber\LogSystem; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use App\Entity\LogSystem\UserLogoutLogEntry; use App\Entity\UserSystem\User; use App\Services\LogSystem\EventLogger; use Symfony\Component\Security\Http\Event\LogoutEvent; /** * This handler logs to event log, if a user logs out. */ final class LogLogoutEventSubscriber implements EventSubscriberInterface { public function __construct(private readonly EventLogger $logger, private readonly bool $gdpr_compliance) { } public function logLogout(LogoutEvent $event): void { $request = $event->getRequest(); $token = $event->getToken(); if (!$token instanceof TokenInterface) { return; } $log = new UserLogoutLogEntry($request->getClientIp(), $this->gdpr_compliance); $user = $token->getUser(); if ($user instanceof User) { $log->setTargetElement($user); } $this->logger->logAndFlush($log); } /** * @return array */ public static function getSubscribedEvents(): array { return [LogoutEvent::class => 'logLogout']; } }