Files
simple-qr/server/api/index.ts
Pihkaal e87f19e7ce
All checks were successful
Build and Push Docker Image / build (push) Successful in 1m35s
feat(api): allow _ and - in logo name
2026-02-22 14:07:22 +01:00

42 lines
1.1 KiB
TypeScript

import { resolve } from "path";
import type { Canvas } from "skia-canvas";
import { getLogoNames } from "../utils/logos";
const normalize = (s: string) => s.toLowerCase().replace(/[\s_-]+/g, "");
export default defineEventHandler(async (event) => {
const { format, logo, content } = await getValidatedQuery(
event,
settingsSchema.parse,
);
let canvas: Canvas;
if (logo) {
const names = await getLogoNames();
if (!names)
throw createError({
statusCode: 500,
message: "Could not retrieve logos",
});
const match = names.find((n) => normalize(n) === normalize(logo));
const resolvedLogo = match ?? logo;
canvas = await renderQRCodeToCanvas(
content,
resolve("public", `logos/${resolvedLogo}.png`),
);
} else {
canvas = await renderQRCodeToCanvas(content, undefined);
}
const image = canvas.toBuffer(format);
event.node.res.setHeader("Content-Type", `image/${format}`);
event.node.res.setHeader(
"Content-Disposition",
`filename="qrcode.${format}"`,
);
return image;
});