<?php
namespace App\EventListener;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class SessionIdleHandler
{
protected $session;
protected $securityToken;
protected $router;
protected $maxIdleTime;
protected $translator;
public function __construct(SessionInterface $session, TokenStorageInterface $securityToken, RouterInterface $router, TranslatorInterface $translator, $maxIdleTime)
{
$this->session = $session;
$this->router = $router;
$this->maxIdleTime = $maxIdleTime;
$this->securityToken = $securityToken;
$this->translator = $translator;
}
public function onKernelRequest(RequestEvent $event)
{
date_default_timezone_set('Africa/Kampala');
if (HttpKernelInterface::MASTER_REQUEST != $event->getRequestType()) {
return;
}
if ($this->maxIdleTime > 0) {
$this->session->start();
$lapse = time() - $this->session->getMetadataBag()->getLastUsed();
if ($lapse > $this->maxIdleTime) {
$this->securityToken->setToken(null);
$this->session->getFlashBag()->set('info', $this->translator->trans('login.session_timeout'));
$event->setResponse(new RedirectResponse($this->router->generate('app_login')));
}
}
}
}