2 declare(strict_types = 1);
19 use Psr\Http\Message\ResponseInterface;
20 use Psr\Http\Message\ServerRequestInterface;
44 public function dumpAction(ServerRequestInterface $request): ResponseInterface
46 $parameters = [
'eID' =>
'dumpFile'];
49 $parameters[
't'] = $t;
53 $parameters[
'f'] = $f;
57 $parameters[
'p'] = $p;
60 if (hash_equals(GeneralUtility::hmac(implode(
'|', $parameters),
'resourceStorageDumpFile'), $this->
getGetOrPost($request,
'token'))) {
61 if (isset($parameters[
'f'])) {
64 if ($file->isDeleted() || $file->isMissing() || !$this->isFileValid($file)) {
71 $file = GeneralUtility::makeInstance(ProcessedFileRepository::class)->findByUid($parameters[
'p']);
72 if (!$file || $file->isDeleted() || !$this->isFileValid($file->getOriginalFile())) {
82 foreach (
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
'FileDumpEID.php'][
'checkFileAccess'] ?? [] as $className) {
83 $hookObject = GeneralUtility::makeInstance($className);
85 throw new \UnexpectedValueException($className .
' must implement interface ' . FileDumpEIDHookInterface::class, 1394442417);
87 $response = $hookObject->checkFileAccess($file);
88 if ($response instanceof ResponseInterface) {
93 return $file->getStorage()->streamFile($file);
103 protected function getGetOrPost(ServerRequestInterface $request,
string $parameter): string
105 return (
string)($request->getParsedBody()[$parameter] ?? $request->getQueryParams()[$parameter] ??
'');
111 || GeneralUtility::verifyFilenameAgainstDenyPattern(basename($file->
getIdentifier()));