Просмотр исходного кода

[clsi-cache] base64 encode X-All-Files header if needed (#25579)

* [clsi-cache] base64 encode X-All-Files header if needed

* [clsi-cache] add explicit error check

Co-authored-by: Brian Gough <brian.gough@overleaf.com>

---------

Co-authored-by: Brian Gough <brian.gough@overleaf.com>
GitOrigin-RevId: bd3b6381b68398aac4a07e48cd69e6aa97e94f18
Jakob Ackermann 1 год назад
Родитель
Сommit
e25a69936e
1 измененных файлов с 5 добавлено и 1 удалено
  1. 5 1
      services/web/app/src/Features/Compile/ClsiCacheHandler.js

+ 5 - 1
services/web/app/src/Features/Compile/ClsiCacheHandler.js

@@ -145,6 +145,10 @@ async function getRedirectWithFallback(
       } = await fetchRedirectWithResponse(u, {
       } = await fetchRedirectWithResponse(u, {
         signal,
         signal,
       })
       })
+      let allFilesRaw = headers.get('X-All-Files')
+      if (!allFilesRaw.startsWith('[')) {
+        allFilesRaw = Buffer.from(allFilesRaw, 'base64url').toString()
+      }
       // Success, return the cache entry.
       // Success, return the cache entry.
       return {
       return {
         location,
         location,
@@ -152,7 +156,7 @@ async function getRedirectWithFallback(
         shard: headers.get('X-Shard') || 'cache',
         shard: headers.get('X-Shard') || 'cache',
         lastModified: new Date(headers.get('X-Last-Modified')),
         lastModified: new Date(headers.get('X-Last-Modified')),
         size: parseInt(headers.get('X-Content-Length'), 10),
         size: parseInt(headers.get('X-Content-Length'), 10),
-        allFiles: JSON.parse(headers.get('X-All-Files')),
+        allFiles: JSON.parse(allFilesRaw),
       }
       }
     } catch (err) {
     } catch (err) {
       if (err instanceof RequestFailedError && err.response.status === 404) {
       if (err instanceof RequestFailedError && err.response.status === 404) {