Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php
/**
* Copyright 2025 Adobe
* All Rights Reserved.
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

Expand All @@ -12,11 +12,8 @@
use Magento\Csp\Model\SubresourceIntegrityFactory;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Csp\Model\SubresourceIntegrityCollector;
use Magento\Csp\Model\SubresourceIntegrityRepositoryPool;
use Magento\Deploy\Package\Processor\ProcessorInterface;
use Magento\Csp\Model\SubresourceIntegrity\HashGenerator;
use Magento\Framework\App\ObjectManager;
use Psr\Log\LoggerInterface;

/**
* Post-processor that generates integrity hashes after static content package deployed.
Expand All @@ -43,39 +40,22 @@ class Integrity implements ProcessorInterface
*/
private SubresourceIntegrityCollector $integrityCollector;

/**
* @var SubresourceIntegrityRepositoryPool
*/
private SubresourceIntegrityRepositoryPool $repositoryPool;

/**
* @var LoggerInterface
*/
private LoggerInterface $logger;

/**
* @param Filesystem $filesystem
* @param HashGenerator $hashGenerator
* @param SubresourceIntegrityFactory $integrityFactory
* @param SubresourceIntegrityCollector $integrityCollector
* @param LoggerInterface|null $logger
* @param SubresourceIntegrityRepositoryPool|null $repositoryPool
*/
public function __construct(
Filesystem $filesystem,
HashGenerator $hashGenerator,
SubresourceIntegrityFactory $integrityFactory,
SubresourceIntegrityCollector $integrityCollector,
?LoggerInterface $logger = null,
?SubresourceIntegrityRepositoryPool $repositoryPool = null
SubresourceIntegrityCollector $integrityCollector
) {
$this->filesystem = $filesystem;
$this->hashGenerator = $hashGenerator;
$this->integrityFactory = $integrityFactory;
$this->integrityCollector = $integrityCollector;
$this->logger = $logger ?? ObjectManager::getInstance()->get(LoggerInterface::class);
$this->repositoryPool = $repositoryPool ??
ObjectManager::getInstance()->get(SubresourceIntegrityRepositoryPool::class);
}

/**
Expand All @@ -88,7 +68,7 @@ public function process(Package $package, array $options): bool
);

foreach ($package->getFiles() as $file) {
if (strtolower($file->getExtension()) === "js") {
if ($file->getExtension() == "js") {
$integrity = $this->integrityFactory->create(
[
"data" => [
Expand All @@ -104,21 +84,6 @@ public function process(Package $package, array $options): bool
}
}

// Save collected data directly to repository before process exits
$collectedData = $this->integrityCollector->release();
if (!empty($collectedData)) {
$area = explode('/', $package->getPath())[0];
try {
$this->repositoryPool->get($area)->saveBunch($collectedData);
} catch (\Exception $e) {
//phpcs:ignore
$this->logger->error('Integrity PostProcessor: Failed saving to ' . $area . ' repository: ' . $e->getMessage());
}

// Clear collector for next package (if any)
$this->integrityCollector->clear();
}

return true;
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
<?php
/**
* Copyright 2025 Adobe
* All Rights Reserved.
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Csp\Model\Deploy\Package\Processor\PostProcessor;

use Magento\Csp\Model\SubresourceIntegrityRepositoryPool;
use Magento\Deploy\Package\Package;
use Magento\Deploy\Package\PackageFileFactory;
use Magento\Deploy\Service\DeployStaticFile;
use Magento\Framework\App\DeploymentConfig\Writer\PhpFormatter;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Exception\FileSystemException;
use Magento\Framework\Filesystem;
use Magento\Framework\View\Asset\Minification;
Expand All @@ -22,7 +20,6 @@
use Magento\Csp\Model\SubresourceIntegrity\HashGenerator;
use Magento\Framework\Filesystem\DriverInterface;
use Magento\Csp\Model\SubresourceIntegrityCollector;
use Psr\Log\LoggerInterface;

/**
* Class Adds Integrity attribute to requirejs-map.js asset
Expand Down Expand Up @@ -62,16 +59,6 @@ class Map extends \Magento\Deploy\Package\Processor\PostProcessor\Map
*/
private FileSystem $filesystem;

/**
* @var SubresourceIntegrityRepositoryPool
*/
private SubresourceIntegrityRepositoryPool $repositoryPool;

/**
* @var LoggerInterface
*/
private LoggerInterface $logger;

/**
* Constructor
*
Expand All @@ -84,9 +71,6 @@ class Map extends \Magento\Deploy\Package\Processor\PostProcessor\Map
* @param DriverInterface $driver
* @param SubresourceIntegrityCollector $integrityCollector
* @param FileSystem $filesystem
* @param SubresourceIntegrityRepositoryPool|null $repositoryPool
* @param LoggerInterface|null $logger
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
DeployStaticFile $deployStaticFile,
Expand All @@ -97,20 +81,14 @@ public function __construct(
HashGenerator $hashGenerator,
DriverInterface $driver,
SubresourceIntegrityCollector $integrityCollector,
Filesystem $filesystem,
?SubresourceIntegrityRepositoryPool $repositoryPool = null,
?LoggerInterface $logger = null
Filesystem $filesystem
) {
$this->minification = $minification;
$this->integrityFactory = $integrityFactory;
$this->hashGenerator = $hashGenerator;
$this->driver = $driver;
$this->integrityCollector = $integrityCollector;
$this->filesystem = $filesystem;
$this->repositoryPool = $repositoryPool ??
ObjectManager::getInstance()->get(SubresourceIntegrityRepositoryPool::class);
$this->logger = $logger ??
ObjectManager::getInstance()->get(LoggerInterface::class);
parent::__construct($deployStaticFile, $formatter, $packageFileFactory, $minification);
}

Expand Down Expand Up @@ -140,18 +118,7 @@ public function process(Package $package, array $options): bool
]
]
);
// Save immediately to repository instead of using collector
$area = $package->getArea();

if (!empty($area)) {
try {
$this->repositoryPool->get($area)->save($integrity);
$this->logger->info("Map PostProcessor: Saved SRI hash for {$relativePath} in {$area} area");
} catch (\Exception $e) {
//phpcs:ignore
$this->logger->error("Map PostProcessor: Failed to save SRI hash for {$relativePath} in {$area} area");
}
}
$this->integrityCollector->collect($integrity);
}
}
return true;
Expand Down
14 changes: 2 additions & 12 deletions app/code/Magento/Csp/Model/SubresourceIntegrityCollector.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php
/**
* Copyright 2025 Adobe
* All Rights Reserved.
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

Expand Down Expand Up @@ -46,14 +46,4 @@ public function release(): array
{
return $this->data;
}

/**
* Clear all collected data.
*
* @return void
*/
public function clear(): void
{
$this->data = [];
}
}
106 changes: 0 additions & 106 deletions app/code/Magento/Csp/Plugin/GenerateBundleAssetIntegrity.php

This file was deleted.

Loading
Loading