<?php
namespace Cms\CoreBundle\EventListeners;
use DateTime;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
final class CacheOverrideListener implements EventSubscriberInterface
{
/**
* @var ParameterBagInterface
*/
protected ParameterBagInterface $params;
/**
* @param ParameterBagInterface $params
*/
public function __construct(ParameterBagInterface $params)
{
$this->params = $params;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents(): array
{
return [
KernelEvents::RESPONSE => ['onKernelResponse', -1001],
];
}
/**
* @param ResponseEvent $event
* @return void
*/
public function onKernelResponse(ResponseEvent $event): void
{
$host = $event->getRequest()->getHost();
switch (true) {
case preg_match(
'/^([-a-zA-Z0-9]+)\.([-a-zA-Z0-9]+)\.' . preg_quote(
$this->params->get('cms.container.staging.domain')
) . '$/',
$host
) === 1:
case preg_match(
'/^([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(
$this->params->get('dashboard.hostname')
) . '$/i',
$host
) === 1:
case preg_match(
'/^([-a-zA-Z0-9]+)\\.' . preg_quote($this->params->get('dashboard.hostname')) . '$/',
$host
) === 1:
case preg_match('/^([-a-zA-Z0-9]+)\\.' . preg_quote('ngrok.io') . '$/', $host) === 1:
case $host === $this->params->get('dashboard.hostname'):
$event->getResponse()
->setExpires(new DateTime('@0'))
->setPrivate()
->setMaxAge(0)
->headers->addCacheControlDirective('must-revalidate');
$event->getResponse()->headers->addCacheControlDirective('no-cache');
$event->getResponse()->headers->addCacheControlDirective('no-store');
break;
default:
$event->getResponse()
->setExpires(new DateTime())
->setPrivate()
->setMaxAge(0);
}
}
}