diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml index 05dc5d0e..a61fddc6 100644 --- a/config/packages/framework.yaml +++ b/config/packages/framework.yaml @@ -4,6 +4,9 @@ framework: csrf_protection: true handle_all_throwables: true + # We set this header by ourself, so we can disable it here + disallow_search_engine_index: false + # Must be set to true, to enable the change of HTTP method via _method parameter, otherwise our delete routines does not work anymore # TODO: Rework delete routines to work without _method parameter as it is not recommended anymore (see https://github.com/symfony/symfony/issues/45278) http_method_override: true diff --git a/src/EventListener/DisallowSearchEngineIndexingRequestListener.php b/src/EventListener/DisallowSearchEngineIndexingRequestListener.php new file mode 100644 index 00000000..b75b3116 --- /dev/null +++ b/src/EventListener/DisallowSearchEngineIndexingRequestListener.php @@ -0,0 +1,55 @@ +. + */ + +declare(strict_types=1); + + +namespace App\EventListener; + +use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\EventDispatcher\Attribute\AsEventListener; +use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; + +#[AsEventListener] +class DisallowSearchEngineIndexingRequestListener +{ + private const HEADER_NAME = 'X-Robots-Tag'; + + private readonly bool $enabled; + + public function __construct(#[Autowire(param: 'partdb.demo_mode')] bool $demo_mode) + { + // Disable this listener in demo mode + $this->enabled = !$demo_mode; + } + + public function __invoke(ResponseEvent $event): void + { + //Skip if disabled + if (!$this->enabled) { + return; + } + + if (!$event->getResponse()->headers->has(static::HEADER_NAME)) { + $event->getResponse()->headers->set(static::HEADER_NAME, 'noindex'); + } + } +} \ No newline at end of file