feat(api): normalize logo name
This commit is contained in:
@@ -1,4 +1,8 @@
|
||||
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(
|
||||
@@ -6,8 +10,26 @@ export default defineEventHandler(async (event) => {
|
||||
settingsSchema.parse,
|
||||
);
|
||||
|
||||
const logoUrl = logo ? resolve("public", `logos/${logo}.png`) : undefined;
|
||||
const canvas = await renderQRCodeToCanvas(content, logoUrl);
|
||||
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}`);
|
||||
|
||||
Reference in New Issue
Block a user