From 321f2f320bd496bbbad37f68dd93b89e412d9162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Wolda=C5=84ski?= Date: Tue, 17 Sep 2024 15:58:40 +0200 Subject: [PATCH] [TASK] Improve handling of storage proxy Previous implementation was too limited and did not resolve properly nested paths on file storage configuration --- Classes/XClass/ResourceLocalDriver.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Classes/XClass/ResourceLocalDriver.php b/Classes/XClass/ResourceLocalDriver.php index 404722c2..285479af 100644 --- a/Classes/XClass/ResourceLocalDriver.php +++ b/Classes/XClass/ResourceLocalDriver.php @@ -15,6 +15,7 @@ use FriendsOfTYPO3\Headless\Utility\UrlUtility; use Psr\Http\Message\ServerRequestInterface; use TYPO3\CMS\Core\Http\ApplicationType; +use TYPO3\CMS\Core\Http\Uri; use TYPO3\CMS\Core\Resource\Driver\LocalDriver; use TYPO3\CMS\Core\Resource\ResourceStorage; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -42,7 +43,21 @@ protected function determineBaseUrl(): void if ($this->hasCapability(ResourceStorage::CAPABILITY_PUBLIC)) { $urlUtility = GeneralUtility::makeInstance(UrlUtility::class)->withRequest($request); - $this->configuration['baseUri'] = $urlUtility->getStorageProxyUrl(); + + $basePath = match (true) { + (($this->configuration['baseUri'] ?? '') !== '') => $this->configuration['baseUri'], + (($this->configuration['basePath'] ?? '') !== '' && $this->configuration['pathType'] === 'relative') => $this->configuration['basePath'], + default => '', + }; + + if ($basePath !== '') { + $frontendUri = (new Uri($urlUtility->getFrontendUrl())); + + $path = new Uri(trim($basePath, '/')); + $this->configuration['baseUri'] = (string)$frontendUri->withPath('/' . trim((new Uri($urlUtility->getProxyUrl()))->getPath(), '/') . '/' . trim($path->getPath(), '/')); + } else { + $this->configuration['baseUri'] = $urlUtility->getStorageProxyUrl(); + } } parent::determineBaseUrl();