<?php
namespace App\EventListener;
use Exception;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
class RequestListener
{
public const MAINTENANCE_IPS = [
'37.58.179.19',
];
/**
* @param RequestEvent $event
*
* @return void
*
* @throws Exception
*/
public function onKernelRequest(RequestEvent $event)
{
if (!$event->isMasterRequest() || in_array($this->getIPClient(), self::MAINTENANCE_IPS, true)) {
return;
}
if (isset($_SERVER['IS_MAINTENANCE']) && 'true' === $_SERVER['IS_MAINTENANCE']) {
$response = new Response('Maintenance', Response::HTTP_SERVICE_UNAVAILABLE);
$response->headers->add([
'Access-Control-Expose-Headers' => 'X-Pol-Maintenance',
'X-Pol-Maintenance' => $_SERVER['IS_MAINTENANCE'],
]);
$response->setContent(json_encode(['isMaintenance' => true]));
$event->setResponse($response);
}
}
/**
* Retourne l'IP Public du Client.
* Le cas d'un proxy devant le serveur web est géré.
*
* @return string
*/
public function getIPClient()
{
return $_SERVER['HTTP_CF_CONNECTING_IP']
?? $_SERVER['HTTP_CLIENT_IP']
?? $_SERVER['HTTP_X_FORWARDED_FOR']
?? $_SERVER['REMOTE_ADDR']
?? '127.0.0.1'
;
}
}