<?php
namespace App\EventListener;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\Response;
class MaintenanceListener
{
private $container;
private $params;
public function __construct(ContainerInterface $container, ParameterBagInterface $params)
{
$this->container = $container;
$this->params = $params;
}
public function onKernelRequest(RequestEvent $event)
{
$isMaintenanceMode = $this->params->get('maintenance_mode');
$maintenanceIps = $this->params->get('maintenance_allowed_ips');
$ips = preg_split("/\,/", $maintenanceIps);
$found = false;
if ($isMaintenanceMode){
foreach($ips as $ip){
if($event->getRequest()->getClientIp() == $ip){
$found = true;
break;
}
}
if(!$found){
$template = $this->container->get('twig')->render('maintenance.html.twig');
$event->setResponse(new Response($template, 503));
$event->stopPropagation();
}
}
}
}