src/EventListener/RequestListener.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Exception;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpKernel\Event\RequestEvent;
  6. class RequestListener
  7. {
  8.     public const MAINTENANCE_IPS = [
  9.         '37.58.179.19',
  10.     ];
  11.     /**
  12.      * @param RequestEvent $event
  13.      *
  14.      * @return void
  15.      *
  16.      * @throws Exception
  17.      */
  18.     public function onKernelRequest(RequestEvent $event)
  19.     {
  20.         if (!$event->isMasterRequest() || in_array($this->getIPClient(), self::MAINTENANCE_IPStrue)) {
  21.             return;
  22.         }
  23.         if (isset($_SERVER['IS_MAINTENANCE']) && 'true' === $_SERVER['IS_MAINTENANCE']) {
  24.             $response = new Response('Maintenance'Response::HTTP_SERVICE_UNAVAILABLE);
  25.             $response->headers->add([
  26.                 'Access-Control-Expose-Headers' => 'X-Pol-Maintenance',
  27.                 'X-Pol-Maintenance' => $_SERVER['IS_MAINTENANCE'],
  28.             ]);
  29.             $response->setContent(json_encode(['isMaintenance' => true]));
  30.             $event->setResponse($response);
  31.         }
  32.     }
  33.     /**
  34.      * Retourne l'IP Public du Client.
  35.      * Le cas d'un proxy devant le serveur web est géré.
  36.      *
  37.      * @return string
  38.      */
  39.     public function getIPClient()
  40.     {
  41.         return $_SERVER['HTTP_CF_CONNECTING_IP']
  42.             ?? $_SERVER['HTTP_CLIENT_IP']
  43.             ?? $_SERVER['HTTP_X_FORWARDED_FOR']
  44.             ?? $_SERVER['REMOTE_ADDR']
  45.             ?? '127.0.0.1'
  46.         ;
  47.     }
  48. }