From db6acc97a5d84d3b9c382daf6c156ee5524bfd5c Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 21 Feb 2022 03:16:40 +0900 Subject: [PATCH] =?UTF-8?q?=E9=9D=99=E6=AD=A2=E7=94=BB=E5=83=8F=E3=81=AE?= =?UTF-8?q?=E5=A0=B4=E5=90=88=E3=81=AFstatic=E3=81=A7=E3=81=AA=E3=81=84URL?= =?UTF-8?q?=E3=81=AB=E3=83=AA=E3=83=80=E3=82=A4=E3=83=AC=E3=82=AF=E3=83=88?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=82=AD=E3=83=A3=E3=83=83=E3=82=B7=E3=83=A5?= =?UTF-8?q?=E3=83=92=E3=83=83=E3=83=88=E3=81=95=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/server/proxy/avatar.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/server/proxy/avatar.ts b/packages/backend/src/server/proxy/avatar.ts index 2f52ffd8ddd5..3a64c0e7e3bb 100644 --- a/packages/backend/src/server/proxy/avatar.ts +++ b/packages/backend/src/server/proxy/avatar.ts @@ -61,8 +61,8 @@ export async function proxyAvatar(ctx: Koa.Context) { } if (!user.avatarUrl) return ctx.redirect(Users.getIdenticonUrl(user)); if (ctx.query.url !== user.avatarUrl) { - logger.info(`redirect`); // 最新の、キャッシュすべきURLへリダイレクト + logger.info(`redirect`); const url = new URL(ctx.URL); url.searchParams.set('url', user.avatarUrl); return ctx.redirect(url.toString()); @@ -81,6 +81,20 @@ export async function proxyAvatar(ctx: Koa.Context) { return ctx.redirect(Users.getIdenticonUrl(user)); } + //#region If image is not animated, redirect to non static url + const metadata = await sharp(path).metadata(); + const isAnimated = metadata.pages && metadata.pages > 1; + if (ctx.query.static && !isAnimated) { + logger.info(`redirect to non static url`); + cleanup(); + const url = new URL(ctx.URL); + url.searchParams.delete('static'); + ctx.status = 301; + ctx.redirect(url.toString()); + return; + } + //#endregion + ctx.set('Content-Type', 'image/webp'); ctx.set('Cache-Control', 'max-age=31536000, immutable');