<?php/** * Pimcore * * This source file is available under two different licenses: * - GNU General Public License version 3 (GPLv3) * - Pimcore Enterprise License (PEL) * Full copyright and license information is available in * LICENSE.md which is distributed with this source code. * * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org) * @license http://www.pimcore.org/license GPLv3 and PEL */namespace Pimcore\Bundle\CoreBundle\EventListener;use Pimcore\Bundle\CoreBundle\EventListener\Traits\ResponseInjectionTrait;use Pimcore\Tool\Session;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpKernel\Event\GetResponseEvent;use Symfony\Component\HttpKernel\KernelInterface;class MaintenancePageListener{ use ResponseInjectionTrait; /** * @var KernelInterface */ protected $kernel; /** * @var string */ protected $templateCode = null; /** * @param KernelInterface $kernel */ public function __construct(KernelInterface $kernel) { $this->kernel = $kernel; } /** * @param $code */ public function setTemplateCode($code) { $this->templateCode = $code; } /** * @return string */ public function getTemplateCode() { return $this->templateCode; } /** * @param string $path */ public function loadTemplateFromResource($path) { $templateFile = $this->kernel->locateResource($path); if (file_exists($templateFile)) { $this->setTemplateCode(file_get_contents($templateFile)); } } /** * @param GetResponseEvent $event */ public function onKernelRequest(GetResponseEvent $event) { if (!$event->isMasterRequest()) { return; } $request = $event->getRequest(); $maintenance = false; $file = \Pimcore\Tool\Admin::getMaintenanceModeFile(); if (!is_file($file)) { return; } $conf = include($file); if (isset($conf['sessionId'])) { $requestSessionId = Session::getSessionId(); $maintenance = true; if ($conf['sessionId'] === $requestSessionId) { $maintenance = false; } } else { @unlink($file); } // do not activate the maintenance for the server itself // this is to avoid problems with monitoring agents $serverIps = ['127.0.0.1']; if ($maintenance && !in_array($request->getClientIp(), $serverIps)) { $response = new Response($this->getTemplateCode(), 503); $event->setResponse($response); } }}