src/Cms/CoreBundle/EventListeners/CacheOverrideListener.php line 40

Open in your IDE?
  1. <?php
  2. namespace Cms\CoreBundle\EventListeners;
  3. use DateTime;
  4. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. final class CacheOverrideListener implements EventSubscriberInterface
  9. {
  10.     /**
  11.      * @var ParameterBagInterface
  12.      */
  13.     protected ParameterBagInterface $params;
  14.     /**
  15.      * @param ParameterBagInterface $params
  16.      */
  17.     public function __construct(ParameterBagInterface $params)
  18.     {
  19.         $this->params $params;
  20.     }
  21.     /**
  22.      * {@inheritdoc}
  23.      */
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             KernelEvents::RESPONSE => ['onKernelResponse', -1001],
  28.         ];
  29.     }
  30.     /**
  31.      * @param ResponseEvent $event
  32.      * @return void
  33.      */
  34.     public function onKernelResponse(ResponseEvent $event): void
  35.     {
  36.         $host $event->getRequest()->getHost();
  37.         switch (true) {
  38.             case preg_match(
  39.                     '/^([-a-zA-Z0-9]+)\.([-a-zA-Z0-9]+)\.' preg_quote(
  40.                         $this->params->get('cms.container.staging.domain')
  41.                     ) . '$/',
  42.                     $host
  43.                 ) === 1:
  44.             case preg_match(
  45.                     '/^([0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12})\\.' preg_quote(
  46.                         $this->params->get('dashboard.hostname')
  47.                     ) . '$/i',
  48.                     $host
  49.                 ) === 1:
  50.             case preg_match(
  51.                     '/^([-a-zA-Z0-9]+)\\.' preg_quote($this->params->get('dashboard.hostname')) . '$/',
  52.                     $host
  53.                 ) === 1:
  54.             case preg_match('/^([-a-zA-Z0-9]+)\\.' preg_quote('ngrok.io') . '$/'$host) === 1:
  55.             case $host === $this->params->get('dashboard.hostname'):
  56.                 $event->getResponse()
  57.                     ->setExpires(new DateTime('@0'))
  58.                     ->setPrivate()
  59.                     ->setMaxAge(0)
  60.                     ->headers->addCacheControlDirective('must-revalidate');
  61.                 $event->getResponse()->headers->addCacheControlDirective('no-cache');
  62.                 $event->getResponse()->headers->addCacheControlDirective('no-store');
  63.                 break;
  64.             default:
  65.                 $event->getResponse()
  66.                     ->setExpires(new DateTime())
  67.                     ->setPrivate()
  68.                     ->setMaxAge(0);
  69.         }
  70.     }
  71. }