forked from magedevel/async-import
-
Notifications
You must be signed in to change notification settings - Fork 0
/
get.php
84 lines (76 loc) · 2.71 KB
/
get.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?php
/**
* Public media files entry point
*
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
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;
};
$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 (filemtime($configCacheFile) + $config['update_time'] > time()) {
$mediaDirectory = $config['media_directory'];
$allowedResources = $config['allowed_resources'];
// Serve file if it's materialized
if ($mediaDirectory) {
if (!$isAllowed($relativePath, $allowedResources)) {
require_once 'errors/404.php';
exit;
}
$mediaAbsPath = $mediaDirectory . '/' . $relativePath;
if (is_readable($mediaAbsPath)) {
if (is_dir($mediaAbsPath)) {
require_once 'errors/404.php';
exit;
}
$transfer = new \Magento\Framework\File\Transfer\Adapter\Http(
new \Magento\Framework\HTTP\PhpEnvironment\Response(),
new \Magento\Framework\File\Mime()
);
$transfer->send($mediaAbsPath);
exit;
}
}
}
}
// Materialize file in application
$params = $_SERVER;
if (empty($mediaDirectory)) {
$params[ObjectManagerFactory::INIT_PARAM_DEPLOYMENT_CONFIG] = [];
$params[Factory::PARAM_CACHE_FORCED_OPTIONS] = ['frontend_options' => ['disable_save' => true]];
}
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $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);