Commit 30db9f06 authored by Yassine Doghri's avatar Yassine Doghri
Browse files

fix(s3): serve files without cache if dummy cache handler + add http referer header to redirect

parent 4c1a3e50
Loading
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -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);
        }

        /** @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);

        /** @var Response $response */
        $response = service('response');

        // 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