<?php
namespace App\EventSubscriber;
use App\Entity\WhiteList;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
class RequestSubscriber implements EventSubscriberInterface
{
public function __construct(EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage)
{
$this->em = $entityManager;
$this->tokenStorage = $tokenStorage;
}
public static function getSubscribedEvents()
{
// return the subscribed events, their methods and priorities
return [
KernelEvents::CONTROLLER => [
['logException', 0],
],
];
}
/**
* @param ControllerEvent $event
*/
public function logException($event)
{
$token = $this->tokenStorage->getToken();
if($token) {
$this_user = $token->getUser();
if (
$this_user != 'anon.' and
$_SERVER['FIREWALL'] == 'true'
) {
$user_ip = $_SERVER['REMOTE_ADDR'];
$white_list = $this->em->getRepository(WhiteList::class)->findBy(['ip' => $user_ip]);
if (!$white_list) {
if(isset($_SESSION))
session_destroy();
$event->setController(function () {
return new RedirectResponse('/logout/no/valid/ip');
});
}
}
}
}
}