. */ declare(strict_types=1); namespace App\EventSubscriber\LogSystem; 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. */ class LogoutLoggerEventSubscriber implements \Symfony\Component\EventDispatcher\EventSubscriberInterface { protected EventLogger $logger; protected bool $gpdr_compliance; public function __construct(EventLogger $logger, bool $gpdr_compliance) { $this->logger = $logger; $this->gpdr_compliance = $gpdr_compliance; } public function __invoke(LogoutEvent $event) { $request = $event->getRequest(); $token = $event->getToken(); if (null === $token) { return; } $log = new UserLogoutLogEntry($request->getClientIp(), $this->gpdr_compliance); $user = $token->getUser(); if ($user instanceof User) { $log->setTargetElement($user); } $this->logger->logAndFlush($log); } /** * @return array */ public static function getSubscribedEvents(): array { return [\Symfony\Component\Security\Http\Event\LogoutEvent::class => '']; } }