From 73698021465d7d241d016df976de88f63abfd730 Mon Sep 17 00:00:00 2001 From: JoaquinOlivero Date: Sat, 3 Aug 2024 23:21:31 +0000 Subject: [PATCH] fix: requested changes --- server/lib/imageproxy.ts | 51 ++++++++++++++++--- .../UserProfile/ProfileHeader/index.tsx | 1 - 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/server/lib/imageproxy.ts b/server/lib/imageproxy.ts index 3a3098f8c..aae093147 100644 --- a/server/lib/imageproxy.ts +++ b/server/lib/imageproxy.ts @@ -53,7 +53,15 @@ class ImageProxy { } } catch (e) { if (e.code === 'ENOENT') { - logger.error(e.message); + logger.error('Directory not found', { + label: 'Image Cache', + message: e.message, + }); + } else { + logger.error('Failed to read directory', { + label: 'Image Cache', + message: e.message, + }); } } @@ -177,12 +185,18 @@ class ImageProxy { try { const directory = join(this.getCacheDirectory(), cacheKey); + const files = await promises.readdir(directory); + await promises.rm(directory, { recursive: true }); - logger.info(`Cleared ${path} image from cache 'avatar'`, { + + logger.info(`Cleared ${files[0]} image from cache 'avatar'`, { label: 'Image Cache', }); } catch (e) { - logger.error(e.message, { label: 'Image Cache' }); + logger.error('Failed to clear cached image', { + label: 'Image Cache', + message: e.message, + }); } } @@ -236,10 +250,10 @@ class ImageProxy { const arrayBuffer = await response.arrayBuffer(); const buffer = Buffer.from(arrayBuffer); - const extension = (response.headers.get('content-type') ?? '').replace( - 'image/', - '' + const extension = this.getMimeExtension( + response.headers.get('content-type') ?? '' ); + let maxAge = Number( (response.headers.get('cache-control') ?? '0').split('=')[1] ); @@ -315,6 +329,31 @@ class ImageProxy { private getCacheDirectory() { return path.join(baseCacheDirectory, this.key); } + + private getMimeExtension(mime: string): string { + switch (mime) { + case 'image/png': + return 'png'; + case 'image/jpeg': + return 'jpeg'; + case 'image/jpg': + return 'jpg'; + case 'image/apng': + return 'apng'; + case 'image/gif': + return 'gif'; + case 'image/vnd.microsoft.icon': + return 'ico'; + case 'image/tiff': + return 'tiff'; + case 'image/webp': + return 'webp'; + default: + break; + } + + return ''; + } } export default ImageProxy; diff --git a/src/components/UserProfile/ProfileHeader/index.tsx b/src/components/UserProfile/ProfileHeader/index.tsx index 9b5c080fb..2bef97c3b 100644 --- a/src/components/UserProfile/ProfileHeader/index.tsx +++ b/src/components/UserProfile/ProfileHeader/index.tsx @@ -4,7 +4,6 @@ import type { User } from '@app/hooks/useUser'; import { Permission, useUser } from '@app/hooks/useUser'; import defineMessages from '@app/utils/defineMessages'; import { CogIcon, UserIcon } from '@heroicons/react/24/solid'; -// import Image from 'next/image'; import Link from 'next/link'; import { useIntl } from 'react-intl';