google_tag-8.x-1.x-dev/src/EventSubscriber/CspSubscriber.php

src/EventSubscriber/CspSubscriber.php
<?php

declare(strict_types=1);

namespace Drupal\google_tag\EventSubscriber;

use Drupal\csp\CspEvents;
use Drupal\csp\Event\PolicyAlterEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Csp Policy alter event subscriber.
 */
final class CspSubscriber implements EventSubscriberInterface {

  /**
   * GA domains.
   */
  private const DOMAINS = [
    'https://www.google-analytics.com',
    'https://www.googletagmanager.com',
  ];

  /**
   * {@inheritDoc}
   */
  public static function getSubscribedEvents(): array {
    return [
      CspEvents::POLICY_ALTER => 'alterPolicy',
    ];
  }

  /**
   * Fires an event on csp policy alter event.
   *
   * @param \Drupal\csp\Event\PolicyAlterEvent $event
   *   Event object.
   */
  public function alterPolicy(PolicyAlterEvent $event): void {
    $policy = $event->getPolicy();
    if ($policy->hasDirective('img-src')) {
      $policy->appendDirective('img-src', self::DOMAINS);
    }
    elseif ($policy->hasDirective('default-src')) {
      $imgDirective = array_merge($policy->getDirective('default-src'), self::DOMAINS);
      $policy->setDirective('img-src', $imgDirective);
    }
    if ($policy->hasDirective('connect-src')) {
      $policy->appendDirective('connect-src', self::DOMAINS);
    }
    elseif ($policy->hasDirective('default-src')) {
      $connectDirective = array_merge($policy->getDirective('default-src'), self::DOMAINS);
      $policy->setDirective('connect-src', $connectDirective);
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc