etracker-8.x-3.x-dev/src/EventSubscriber/CspSubscriber.php
src/EventSubscriber/CspSubscriber.php
<?php
namespace Drupal\etracker\EventSubscriber;
use Drupal\csp\CspEvents;
use Drupal\csp\Event\PolicyAlterEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Class CspPolicyAlterSubscriber.
*/
class CspSubscriber implements EventSubscriberInterface {
const TRACKING_DOMAIN = 'www.etracker.de';
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents(): array {
if (!class_exists(CspEvents::class)) {
return [];
}
return [
CspEvents::POLICY_ALTER => 'onCspPolicyAlter',
];
}
/**
* Alter CSP policy for tracking requests.
*
* @param \Drupal\csp\Event\PolicyAlterEvent $alterEvent
* The policy alter event.
*/
public function onCspPolicyAlter(PolicyAlterEvent $alterEvent): void {
$policy = $alterEvent->getPolicy();
$policy->fallbackAwareAppendIfEnabled('script-src', [self::TRACKING_DOMAIN]);
$policy->fallbackAwareAppendIfEnabled('script-src-elem', [self::TRACKING_DOMAIN]);
}
}
