diff --git a/package-lock.json b/package-lock.json index 32582d06..a350da90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ "i18next-fs-backend": "^2.1.5", "i18next-http-middleware": "^3.3.2", "image-size": "^1.0.2", + "jimp": "^0.22.12", "json-bigint": "^1.0.0", "jsonwebtoken": "^9.0.1", "lambert-server": "^1.2.12", diff --git a/src/api/middlewares/ImageProxy.ts b/src/api/middlewares/ImageProxy.ts index f642ff27..4c324afd 100644 --- a/src/api/middlewares/ImageProxy.ts +++ b/src/api/middlewares/ImageProxy.ts @@ -47,11 +47,9 @@ const resizeSupported = new Set([...sharpSupported, ...jimpSupported]); export async function ImageProxy(req: Request, res: Response) { const path = req.originalUrl.split("/").slice(2); - const secret = Config.get().security.requestSignature; - // src/api/util/utility/EmbedHandlers.ts getProxyUrl const hash = crypto - .createHmac("sha1", secret) + .createHmac("sha1", Config.get().security.requestSignature) .update(path.slice(1).join("/")) .digest("base64") .replace(/\+/g, "-") @@ -159,7 +157,10 @@ export async function ImageProxy(req: Request, res: Response) { } res.header("Content-Type", contentType); - res.setHeader("Cache-Control", "public, max-age=" + 1000 * 60 * 60 * 24); + res.setHeader( + "Cache-Control", + "public, max-age=" + Config.get().cdn.proxyCacheHeaderSeconds, + ); res.send(resultBuffer); } diff --git a/src/util/config/types/CdnConfiguration.ts b/src/util/config/types/CdnConfiguration.ts index 03319081..842cb87c 100644 --- a/src/util/config/types/CdnConfiguration.ts +++ b/src/util/config/types/CdnConfiguration.ts @@ -1,17 +1,17 @@ /* Spacebar: A FOSS re-implementation and extension of the Discord.com backend. Copyright (C) 2023 Spacebar and Spacebar Contributors - + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. - + You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ @@ -25,4 +25,6 @@ export class CdnConfiguration extends EndpointConfiguration { endpointPublic: string | null = null; endpointPrivate: string | null = null; + + proxyCacheHeaderSeconds: number = 60 * 60 * 24; }