107 lines
3.5 KiB
PHP
Executable File
107 lines
3.5 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
/**
|
|
* Public media files entry point
|
|
*/
|
|
// phpcs:disable Magento2.Functions.DiscouragedFunction.DiscouragedWithAlternative
|
|
// phpcs:disable Magento2.Functions.DiscouragedFunction.Discouraged
|
|
// phpcs:disable Magento2.Security.IncludeFile.FoundIncludeFile
|
|
// phpcs:disable Magento2.Security.LanguageConstruct.ExitUsage
|
|
|
|
use Magento\Framework\App\Bootstrap;
|
|
use Magento\Framework\App\Cache\Frontend\Factory;
|
|
use Magento\Framework\App\ObjectManagerFactory;
|
|
use Magento\Framework\HTTP\PhpEnvironment\Request;
|
|
use Magento\Framework\Stdlib\Cookie\PhpCookieReader;
|
|
|
|
require dirname(__DIR__) . '/app/bootstrap.php';
|
|
|
|
$mediaDirectory = null;
|
|
$allowedResources = [];
|
|
$configCacheFile = BP . '/var/resource_config.json';
|
|
|
|
$isAllowed = function ($resource, array $allowedResources) {
|
|
foreach ($allowedResources as $allowedResource) {
|
|
if (0 === stripos($resource, $allowedResource)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
$createBootstrap = function (array $params = []) {
|
|
// phpcs:ignore Magento2.Security.Superglobal.SuperglobalUsageWarning
|
|
$params = array_merge($_SERVER, $params);
|
|
|
|
return Bootstrap::create(BP, $params);
|
|
};
|
|
|
|
$request = new \Magento\MediaStorage\Model\File\Storage\Request(
|
|
new Request(
|
|
new PhpCookieReader(),
|
|
new Magento\Framework\Stdlib\StringUtils()
|
|
)
|
|
);
|
|
$relativePath = $request->getPathInfo();
|
|
if (file_exists($configCacheFile) && is_readable($configCacheFile)) {
|
|
$config = json_decode(file_get_contents($configCacheFile), true);
|
|
|
|
// Checking update time
|
|
if (isset($config['update_time'], $config['media_directory'], $config['allowed_resources'])
|
|
&& filemtime($configCacheFile) + $config['update_time'] > time()
|
|
) {
|
|
$mediaDirectory = $config['media_directory'];
|
|
$allowedResources = $config['allowed_resources'];
|
|
|
|
// Serve file if it's materialized
|
|
if ($mediaDirectory) {
|
|
$fileAbsolutePath = __DIR__ . '/' . $relativePath;
|
|
$fileRelativePath = str_replace(rtrim($mediaDirectory, '/') . '/', '', $fileAbsolutePath);
|
|
|
|
if (!$isAllowed($fileRelativePath, $allowedResources)) {
|
|
require_once 'errors/404.php';
|
|
exit;
|
|
}
|
|
|
|
if (is_readable($fileAbsolutePath)) {
|
|
if (is_dir($fileAbsolutePath)) {
|
|
require_once 'errors/404.php';
|
|
exit;
|
|
}
|
|
|
|
// Need to run for object manager instantiation.
|
|
$createBootstrap();
|
|
|
|
$transfer = new \Magento\Framework\File\Transfer\Adapter\Http(
|
|
new \Magento\Framework\HTTP\PhpEnvironment\Response(),
|
|
new \Magento\Framework\File\Mime()
|
|
);
|
|
$transfer->send($fileAbsolutePath);
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Materialize file in application
|
|
$params = [];
|
|
if (empty($mediaDirectory)) {
|
|
$params[ObjectManagerFactory::INIT_PARAM_DEPLOYMENT_CONFIG] = [];
|
|
$params[Factory::PARAM_CACHE_FORCED_OPTIONS] = ['frontend_options' => ['disable_save' => true]];
|
|
}
|
|
$bootstrap = $createBootstrap($params);
|
|
/** @var \Magento\MediaStorage\App\Media $app */
|
|
$app = $bootstrap->createApplication(
|
|
\Magento\MediaStorage\App\Media::class,
|
|
[
|
|
'mediaDirectory' => $mediaDirectory,
|
|
'configCacheFile' => $configCacheFile,
|
|
'isAllowed' => $isAllowed,
|
|
'relativeFileName' => $relativePath,
|
|
]
|
|
);
|
|
$bootstrap->run($app);
|