From 30db9f0667bf7f7a5f186ea667a524d1e3b502db Mon Sep 17 00:00:00 2001 From: Yassine Doghri Date: Wed, 14 Jun 2023 17:20:14 +0000 Subject: [PATCH] fix(s3): serve files without cache if dummy cache handler + add http referer header to redirect --- modules/Media/FileManagers/S3.php | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/modules/Media/FileManagers/S3.php b/modules/Media/FileManagers/S3.php index d728feb8..e0a0e4c9 100644 --- a/modules/Media/FileManagers/S3.php +++ b/modules/Media/FileManagers/S3.php @@ -188,6 +188,8 @@ class S3 implements FileManagerInterface public function serve(string $key): Response { $cacheName = 'object_presigned_uri_' . str_replace('/', '-', $key) . '_' . $this->config->s3['bucket']; + + /** @var string $found */ if (! $found = cache($cacheName)) { try { $cmd = $this->s3->getCommand('GetObject', [ @@ -206,14 +208,20 @@ class S3 implements FileManagerInterface ->save($cacheName, $found, DAY); } - $lastModifiedTimestamp = cache() - ->getMetaData($cacheName)['mtime']; - $lastModified = new DateTime(); - $lastModified->setTimestamp($lastModifiedTimestamp); - /** @var Response $response */ $response = service('response'); + if (cache()->getMetaData($cacheName) === null) { + return $response->setHeader('HTTP_REFERER', previous_url()) + ->redirect($found); + } + + $lastModifiedTimestamp = cache() + ->getMetaData($cacheName)['mtime']; + + $lastModified = new DateTime(); + $lastModified->setTimestamp($lastModifiedTimestamp); + // Remove Cache-Control header before redefining it header_remove('Cache-Control'); @@ -222,7 +230,9 @@ class S3 implements FileManagerInterface 'last-modified' => $lastModified->format(DATE_RFC7231), 'etag' => md5($cacheName), 'public' => true, - ])->redirect($found); + ]) + ->setHeader('HTTP_REFERER', previous_url()) + ->redirect($found); } private function prefixKey(string $key): string