This commit is contained in:
23
server/api/me/avatar.get.js
Normal file
23
server/api/me/avatar.get.js
Normal file
@@ -0,0 +1,23 @@
|
||||
import { readFile } from 'node:fs/promises'
|
||||
import { join } from 'node:path'
|
||||
import { getAvatarsDir } from '../../utils/db.js'
|
||||
import { requireAuth } from '../../utils/authHelpers.js'
|
||||
|
||||
const MIME = Object.freeze({ jpg: 'image/jpeg', jpeg: 'image/jpeg', png: 'image/png' })
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const user = requireAuth(event)
|
||||
if (!user.avatar_path) throw createError({ statusCode: 404, message: 'No avatar' })
|
||||
const path = join(getAvatarsDir(), user.avatar_path)
|
||||
const ext = user.avatar_path.split('.').pop()?.toLowerCase()
|
||||
const mime = MIME[ext] ?? 'application/octet-stream'
|
||||
try {
|
||||
const buf = await readFile(path)
|
||||
setResponseHeader(event, 'Content-Type', mime)
|
||||
setResponseHeader(event, 'Cache-Control', 'private, max-age=3600')
|
||||
return buf
|
||||
}
|
||||
catch {
|
||||
throw createError({ statusCode: 404, message: 'Avatar not found' })
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user