vendor/pimcore/pimcore/bundles/CoreBundle/EventListener/MaintenancePageListener.php line 75

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  * @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  * @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace Pimcore\Bundle\CoreBundle\EventListener;
  15. use Pimcore\Bundle\CoreBundle\EventListener\Traits\ResponseInjectionTrait;
  16. use Pimcore\Tool\Session;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  19. use Symfony\Component\HttpKernel\KernelInterface;
  20. class MaintenancePageListener
  21. {
  22.     use ResponseInjectionTrait;
  23.     /**
  24.      * @var KernelInterface
  25.      */
  26.     protected $kernel;
  27.     /**
  28.      * @var string
  29.      */
  30.     protected $templateCode null;
  31.     /**
  32.      * @param KernelInterface $kernel
  33.      */
  34.     public function __construct(KernelInterface $kernel)
  35.     {
  36.         $this->kernel $kernel;
  37.     }
  38.     /**
  39.      * @param string $code
  40.      */
  41.     public function setTemplateCode($code)
  42.     {
  43.         $this->templateCode $code;
  44.     }
  45.     /**
  46.      * @return string
  47.      */
  48.     public function getTemplateCode()
  49.     {
  50.         return $this->templateCode;
  51.     }
  52.     /**
  53.      * @param string $path
  54.      */
  55.     public function loadTemplateFromResource($path)
  56.     {
  57.         $templateFile $this->kernel->locateResource($path);
  58.         if (file_exists($templateFile)) {
  59.             $this->setTemplateCode(file_get_contents($templateFile));
  60.         }
  61.     }
  62.     /**
  63.      * @param GetResponseEvent $event
  64.      */
  65.     public function onKernelRequest(GetResponseEvent $event)
  66.     {
  67.         if (!$event->isMasterRequest()) {
  68.             return;
  69.         }
  70.         $request $event->getRequest();
  71.         $maintenance false;
  72.         $file = \Pimcore\Tool\Admin::getMaintenanceModeFile();
  73.         if (!is_file($file)) {
  74.             return;
  75.         }
  76.         $conf = include($file);
  77.         if (isset($conf['sessionId'])) {
  78.             $requestSessionId Session::getSessionId();
  79.             $maintenance true;
  80.             if ($conf['sessionId'] === $requestSessionId) {
  81.                 $maintenance false;
  82.             }
  83.         } else {
  84.             @unlink($file);
  85.         }
  86.         // do not activate the maintenance for the server itself
  87.         // this is to avoid problems with monitoring agents
  88.         $serverIps = ['127.0.0.1'];
  89.         if ($maintenance && !in_array($request->getClientIp(), $serverIps)) {
  90.             $response = new Response($this->getTemplateCode(), 503);
  91.             $event->setResponse($response);
  92.         }
  93.     }
  94. }