<?php
namespace App\EventSubscriber;
use App\Form\LoginType;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Twig\Environment;
use App\Service\SiteConfig;
use Symfony\Component\DependencyInjection\ContainerInterface;
class MaintenanceSubscriber implements EventSubscriberInterface
{
private bool $isDev;
public function __construct(
private SiteConfig $config,
private Security $security,
private ContainerBagInterface $params,
private ContainerInterface $container,
) {
$this->isDev = ($params->get('kernel.environment') == 'dev');
}
public function onKernelRequest(RequestEvent $event)
{
if (!$event->isMainRequest()) {
return;
}
$request = $event->getRequest();
$isMaintenance = $this->config->getMaintenanceMode();
$ActivedItmConnect = $this->config->getActivedItmConnect();
$ignoredRoutes = [
'_wdt',
'_profiler',
// 'login',
'logout',
'itmconnect',
'callback',
'admin',
// 'contact',
'maintenance',
'token',
'authorize',
'authorize2',
'.well-known/jwks.json',
'fr/.well-known/jwks.json',
'api/oauth2/',
'before-authorize',
'api/users/preferences',
'api/users/categories'
];
function contains(string $haystack, array $needle): bool
{
foreach ($needle as $item) {
if (str_contains($haystack, $item)) {
return true;
}
}
return false;
}
if ($this->security->getUser() !== null) {
return;
}
if (contains($request->getPathInfo(), $ignoredRoutes)) {
return;
}
if ($request->cookies->get('maintenance') !== null && !$ActivedItmConnect) {
return;
}
if (isset($_GET['tokenAccess']) && $_GET['tokenAccess'] == 'aconseil') {
return;
}
if ($ActivedItmConnect) {
$route = '/itmconnect';
} elseif ($isMaintenance) {
$route = '/maintenance';
}
//get actual route to redirect after have access maintenance or after login via itmConnect
$session = $request->getSession();
if ($session->get('customReferrer') === null)
$session->set('customReferrer', $request->getUri());
if ($isMaintenance || $ActivedItmConnect) {
$event->setResponse(new RedirectResponse($route));
}
}
public static function getSubscribedEvents()
{
return [
'kernel.request' => 'onKernelRequest',
];
}
}