Files
online-energieausweis/src/pages/bilder/[uid].webp.ts
2025-02-19 18:12:48 +11:00

49 lines
1.1 KiB
TypeScript

import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
import { validateAccessTokenServer } from "#server/lib/validateAccessToken.js";
import { prisma } from "@ibcornelsen/database/server";
import { APIRoute } from "astro";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import * as fs from "fs";
import { fileURLToPath } from "url";
export const GET: APIRoute = async (Astro) => {
const { uid } = Astro.params
const token = Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value;
if (!token) {
return new Response(null, {
status: 400
})
}
const valid = validateAccessTokenServer(Astro);
if (!valid) {
return new Response(null, {
status: 401
})
}
const image = await prisma.bild.findUnique({
where: {
uid
}
})
if (!image) {
return new Response(null, {
status: 404
})
}
const path = fileURLToPath(new URL(`../../../persistent/images/${image.uid}.webp`, import.meta.url))
const buffer = fs.readFileSync(path)
return new Response(buffer, {
status: 200,
headers: {
"Content-Type": "image/webp"
}
});
}