custom/plugins/CampitSecurityHeaders/src/Subscriber/Core/AddSecurityHeaders.php line 33

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Campit\SecurityHeaders\Subscriber\Core;
  4. use Campit\SecurityHeaders\Rule\IsValidResponseInterface;
  5. use Campit\SecurityHeaders\Service\ConfigReader;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. class AddSecurityHeaders implements EventSubscriberInterface
  10. {
  11.     private ConfigReader $configReader;
  12.     private IsValidResponseInterface $isValidResponse;
  13.     public function __construct(
  14.         ConfigReader $configReader,
  15.         IsValidResponseInterface $isValidResponse
  16.     ) {
  17.         $this->configReader $configReader;
  18.         $this->isValidResponse $isValidResponse;
  19.     }
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             KernelEvents::RESPONSE => 'setSecurityHeaders',
  24.         ];
  25.     }
  26.     public function setSecurityHeaders(ResponseEvent $event): void
  27.     {
  28.         if (!($this->isValidResponse)($event)) {
  29.             return;
  30.         }
  31.         $response $event->getResponse();
  32.         $context $response->getContext();
  33.         $contentSecurityPolicyHeader $this->configReader->contentSecurityPolicyHeader($context->getSalesChannelId());
  34.         if ($contentSecurityPolicyHeader) {
  35.             $response->headers->set('Content-Security-Policy'$contentSecurityPolicyHeader);
  36.         }
  37.         $contentSecurityPolicyReportOnlyHeader $this->configReader->contentSecurityPolicyReportOnlyHeader($context->getSalesChannelId());
  38.         if ($contentSecurityPolicyReportOnlyHeader) {
  39.             $response->headers->set('Content-Security-Policy-Report-Only'$contentSecurityPolicyReportOnlyHeader);
  40.         }
  41.         $permissionPolicyHeader $this->configReader->permissionPolicyHeader($context->getSalesChannelId());
  42.         if ($permissionPolicyHeader) {
  43.             $response->headers->set('Permissions-Policy'$permissionPolicyHeader);
  44.         }
  45.     }
  46. }