From a5a01a667eab895987ed1f43def0fe5e78291051 Mon Sep 17 00:00:00 2001 From: keven1024 Date: Thu, 9 Apr 2026 00:02:56 +0800 Subject: [PATCH] refactor(front): replace MD5 with SHA1 for user avatar generation and update related components to use native hash calculation --- front/components/About/AboutBaseInfo.vue | 13 ++++++++----- front/lib/calcFileHash.ts | 12 ++++++++---- front/package.json | 5 ++--- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/front/components/About/AboutBaseInfo.vue b/front/components/About/AboutBaseInfo.vue index 6f30756..e1ee345 100644 --- a/front/components/About/AboutBaseInfo.vue +++ b/front/components/About/AboutBaseInfo.vue @@ -2,12 +2,12 @@ import { useQuery } from '@tanstack/vue-query' import { Skeleton } from '@/components/ui/skeleton' import getFileSize from '~/lib/getFileSize' -import SparkMD5 from 'spark-md5' import useMyAppConfig from '@/composables/useMyAppConfig' import { useFeatureMeta } from '@/composables/useFeatureMeta' import Progress from '~/components/ui/progress/Progress.vue' import renderI18n from '~/lib/renderI18n' import { I18nT } from 'vue-i18n' +import { calcNativeHash } from '~/lib/calcFileHash' const { locale } = useI18n() const appConfig = useMyAppConfig() @@ -34,9 +34,12 @@ const { data, isLoading } = useQuery({ }) const { t } = useI18n() -const genUserAvatar = (email: string) => { - return `https://www.gravatar.com/avatar/${SparkMD5.hash(email)}?d=retro` -} +const { state: userAvatar } = useAsyncState(async () => { + if (!data?.value?.email) return null + const buffer = new TextEncoder().encode(data?.value?.email) + const hash = await calcNativeHash(buffer) + return `https://www.gravatar.com/avatar/${hash}?d=retro` +}, null)