<?php
namespace App\EventListener;
use Exception;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class DebugRequestListener implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => 'onKernelRequest',
];
}
/**
* @param RequestEvent $event
*
* @return void
*
* @throws Exception
*/
public function onKernelRequest(RequestEvent $event)
{
if (!$event->isMasterRequest() || in_array($this->getIPClient(), RequestListener::MAINTENANCE_IPS, true)) {
return;
}
if ('prod' !== $_ENV['APP_ENV']) {
return;
}
$debug = $event->getRequest()->get('debug');
if (null === $debug) {
return;
}
$response = new Response('Forbidden', Response::HTTP_FORBIDDEN);
$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'
;
}
}