* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ declare(strict_types=1); namespace PrestaShop\Module\Mbo\Module\SourceHandler; use GuzzleHttp\Exception\GuzzleException; use PrestaShop\Module\Mbo\Module\SourceRetriever\AddonsUrlSourceRetriever; use PrestaShop\PrestaShop\Core\Module\SourceHandler\SourceHandlerInterface; use PrestaShop\PrestaShop\Core\Module\SourceHandler\ZipSourceHandler; class AddonsUrlSourceHandler implements SourceHandlerInterface { private const URL_VALIDATION_REGEX = "/^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{0,256}api-addons\\.prestashop\\.com(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)$/"; private const ZIP_FILENAME_PATTERN = '/(\w+)\.zip\b/'; /** * @var ZipSourceHandler */ private $zipSourceHandler; /** * @var AddonsUrlSourceRetriever */ private $addonsUrlSourceRetriever; public function __construct( AddonsUrlSourceRetriever $addonsUrlSourceRetriever, ZipSourceHandler $zipSourceHandler ) { $this->zipSourceHandler = $zipSourceHandler; $this->addonsUrlSourceRetriever = $addonsUrlSourceRetriever; } /** * @throws GuzzleException */ public function canHandle($source): bool { return $this->addonsUrlSourceRetriever->assertCanBeDownloaded($source); } public function getModuleName($source): ?string { return $this->addonsUrlSourceRetriever->getModuleName($source); } public function handle(string $source): void { $path = $this->addonsUrlSourceRetriever->get($source); $this->zipSourceHandler->handle($path); @unlink($path); } }