CspSubscriber.php in Blazy 8.2
Namespace
Drupal\blazy\EventSubscriberFile
src/EventSubscriber/CspSubscriber.phpView source
<?php
namespace Drupal\blazy\EventSubscriber;
use Drupal\Core\Asset\LibraryDependencyResolverInterface;
use Drupal\Core\Render\AttachmentsInterface;
use Drupal\csp\CspEvents;
use Drupal\csp\Event\PolicyAlterEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Alter CSP policy for Blazy.
*/
class CspSubscriber implements EventSubscriberInterface {
/**
* The Library Dependency Resolver service.
*
* @var \Drupal\Core\Asset\LibraryDependencyResolverInterface
*/
private $libraryDependencyResolver;
/**
* CspSubscriber constructor.
*
* @param \Drupal\Core\Asset\LibraryDependencyResolverInterface $libraryDependencyResolver
* The Library Dependency Resolver Service.
*/
public function __construct(LibraryDependencyResolverInterface $libraryDependencyResolver) {
$this->libraryDependencyResolver = $libraryDependencyResolver;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events = [];
if (class_exists(CspEvents::class)) {
$events[CspEvents::POLICY_ALTER] = [
'onCspPolicyAlter',
];
}
return $events;
}
/**
* Alter CSP policy to allow data img-src.
*
* @param \Drupal\csp\Event\PolicyAlterEvent $alterEvent
* The Policy Alter event.
*/
public function onCspPolicyAlter(PolicyAlterEvent $alterEvent) : void {
$policy = $alterEvent
->getPolicy();
$response = $alterEvent
->getResponse();
if ($response instanceof AttachmentsInterface) {
$attachments = $response
->getAttachments();
$libraries = isset($attachments['library']) ? $this->libraryDependencyResolver
->getLibrariesWithDependencies($attachments['library']) : [];
if (in_array('blazy/load', $libraries)) {
$policy
->fallbackAwareAppendIfEnabled('img-src', [
'data:',
]);
}
}
}
}
Classes
Name![]() |
Description |
---|---|
CspSubscriber | Alter CSP policy for Blazy. |