From e8d3f1b9883eb2cc838dcd965924ef28c937ec75 Mon Sep 17 00:00:00 2001 From: Julian Hofmann Date: Mon, 22 Dec 2025 18:14:27 +0100 Subject: [PATCH] [FEATURE] Handle basic auth correctly Using https://:@example.com is deprecated. With this patch, filefill will pass the username and password in the options to Guzzle. Fixes: #13 --- Classes/Resource/Handler/DomainResource.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Classes/Resource/Handler/DomainResource.php b/Classes/Resource/Handler/DomainResource.php index de4a8d8..94fdde7 100644 --- a/Classes/Resource/Handler/DomainResource.php +++ b/Classes/Resource/Handler/DomainResource.php @@ -29,6 +29,7 @@ class DomainResource implements RemoteResourceInterface { protected readonly RequestFactory $requestFactory; protected readonly string $url; + protected readonly array $requestOptions; /** * @param string $configuration @@ -37,9 +38,20 @@ class DomainResource implements RemoteResourceInterface public function __construct($configuration, ?RequestFactory $requestFactory = null) { $this->requestFactory = $requestFactory ?: GeneralUtility::makeInstance(RequestFactory::class); - $urlParts = parse_url((string)$configuration); + $urlParts = parse_url((string) $configuration); $urlParts['scheme'] = $urlParts['scheme'] ?? $_SERVER['REQUEST_SCHEME']; $this->url = rtrim(HttpUtility::buildUrl($urlParts), '/') . '/'; + + if (isset($urlParts['user']) && isset($urlParts['pass'])) { + $this->requestOptions = [ + 'auth' => [ + $urlParts['user'], + $urlParts['pass'], + ], + ]; + } else { + $this->requestOptions = []; + } } /** @@ -51,7 +63,7 @@ public function __construct($configuration, ?RequestFactory $requestFactory = nu public function hasFile($fileIdentifier, $filePath, ?FileInterface $fileObject = null): bool { try { - $response = $this->requestFactory->request($this->url . ltrim($filePath, '/'), 'HEAD'); + $response = $this->requestFactory->request($this->url . ltrim($filePath, '/'), 'HEAD', $this->requestOptions); return $response->getStatusCode() === 200; } catch (TransferException $e) { @@ -70,7 +82,7 @@ public function getFile($fileIdentifier, $filePath, ?FileInterface $fileObject = try { $fileName = $this->url . ltrim($filePath, '/'); - return @fopen($fileName, 'r') ?: $this->requestFactory->request($fileName)->getBody()->getContents(); + return @fopen($fileName, 'r') ?: $this->requestFactory->request($fileName, 'GET', $this->requestOptions)->getBody()->getContents(); } catch (RequestException $e) { return false; }