From 4a2e2ba599bdd3716f84fc9eb9a9056d154b2d76 Mon Sep 17 00:00:00 2001 From: XiYang6666 <1782356858@qq.com> Date: Mon, 13 May 2024 10:57:29 +0800 Subject: [PATCH] :bug: fix Gravatar cache --- server/api/getAvatar.ts | 6 +++++- server/api/getIcon.ts | 2 +- server/getGravatarUrl.ts | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/server/api/getAvatar.ts b/server/api/getAvatar.ts index f1446ed..1e4e081 100644 --- a/server/api/getAvatar.ts +++ b/server/api/getAvatar.ts @@ -1,7 +1,11 @@ import { getGravatarUrl } from "../getGravatarUrl"; const config = useRuntimeConfig(); +let lastGetTime: number; export default defineEventHandler(async (event) => { - return sendRedirect(event, getGravatarUrl(config.ownerEmail).toString()); + if (!(lastGetTime && lastGetTime + config.avatarCacheTime >= Date.now())) { + lastGetTime = Date.now(); + } + return sendRedirect(event, getGravatarUrl(config.ownerEmail, 256, lastGetTime).toString()); }); diff --git a/server/api/getIcon.ts b/server/api/getIcon.ts index a699db0..e8aebc9 100644 --- a/server/api/getIcon.ts +++ b/server/api/getIcon.ts @@ -15,7 +15,7 @@ export default defineEventHandler(async (event) => { } const avatarUrl = getGravatarUrl(config.ownerEmail); - const imageBlob: Blob = await $fetch(avatarUrl); + const imageBlob: Blob = await $fetch(avatarUrl.toString()); const radius = 64; const sharpImage = sharp(Buffer.from(await imageBlob.arrayBuffer())); diff --git a/server/getGravatarUrl.ts b/server/getGravatarUrl.ts index 0ec03e0..566839d 100644 --- a/server/getGravatarUrl.ts +++ b/server/getGravatarUrl.ts @@ -1,9 +1,9 @@ import { createHash } from "crypto"; -export function getGravatarUrl(email: string, size: number = 256) { +export function getGravatarUrl(email: string, size: number = 256, time?: number) { const runtimeConfig = useRuntimeConfig(); const trimmedEmail = email.trim().toLowerCase(); const hash = createHash("sha256").update(trimmedEmail).digest("hex"); - return new URL(`/avatar/${hash}?s=${size}&d=identicon}`, runtimeConfig.gravatarUrl); + return new URL(`/avatar/${hash}?s=${size}&d=identicon}${time ? `&t=${time}` : ""}`, runtimeConfig.gravatarUrl); }