diff --git a/routes/api/file/random.ts b/routes/api/file/random.ts
index e30992e..15bd84c 100644
--- a/routes/api/file/random.ts
+++ b/routes/api/file/random.ts
@@ -44,7 +44,10 @@ export const handler: Handlers = {
status: 400,
});
}
- const s = new SortableURLSearchParams(u.search, ["token", "action"]);
+ const s = new SortableURLSearchParams(u.search, [
+ "token",
+ "action",
+ ]);
const token = encode(
new Uint8Array(
await pbkdf2Hmac(
@@ -64,6 +67,11 @@ export const handler: Handlers = {
const is_nsfw = await parse_bool(u.searchParams.get("is_nsfw"), null);
const is_ad = await parse_bool(u.searchParams.get("is_ad"), null);
const thumb = await parse_bool(u.searchParams.get("thumb"), false);
+ const svg = await parse_bool(u.searchParams.get("svg"), false);
+ const jpn_title = await parse_bool(
+ u.searchParams.get("jpn_title"),
+ false,
+ );
const tgids = u.searchParams.get("gids");
let gids = tgids
? new Set(
@@ -98,6 +106,7 @@ export const handler: Handlers = {
}
}
const f = m.db.get_random_file(is_nsfw, is_ad, gids);
+ let url: string | undefined = undefined;
if (!f) return new Response("File not found.", { status: 404 });
if (m.cfg.img_verify_secret && !thumb) {
const verify = encode(
@@ -113,29 +122,53 @@ export const handler: Handlers = {
);
const b = new URLSearchParams();
b.append("verify", verify);
- return Response.redirect(
- `${get_host(req)}/file/${f.id}?${b}`,
- );
- }
- const t = thumb ? "thumbnail" : "file";
- if (m.cfg.random_file_secret) {
- const token = encode(
- new Uint8Array(
- await pbkdf2Hmac(
- `${f.id}`,
- m.cfg.random_file_secret,
- 1000,
- 64,
- "SHA-512",
+ url = `${get_host(req)}/file/${f.id}?${b}`;
+ } else {
+ const t = thumb ? "thumbnail" : "file";
+ if (m.cfg.random_file_secret) {
+ const token = encode(
+ new Uint8Array(
+ await pbkdf2Hmac(
+ `${f.id}`,
+ m.cfg.random_file_secret,
+ 1000,
+ 64,
+ "SHA-512",
+ ),
),
- ),
- );
- const b = new URLSearchParams();
- b.append("token", token);
- return Response.redirect(
- `${get_host(req)}/api/${t}/${f.id}?${b}`,
- );
+ );
+ const b = new URLSearchParams();
+ b.append("token", token);
+ url = `${get_host(req)}/api/${t}/${f.id}?${b}`;
+ } else {
+ url = `${get_host(req)}/api/${t}/${f.id}`;
+ }
}
- return Response.redirect(`${get_host(req)}/api/${t}/${f.id}`);
+ if (svg) {
+ const pmeta = m.db.get_pmeta_by_token_only(f.token);
+ let y = f.height + 17;
+ const lines = pmeta.map((d) => {
+ const g = m.db.get_gmeta_by_gid(d.gid);
+ const title =
+ (jpn_title ? g?.title_jpn ?? g?.title : g?.title) ?? "";
+ const t = `${
+ title ? title + " - " : title
+ }${d.name} EH`;
+ y += 23;
+ return t;
+ });
+ const dom = ``;
+ return new Response(dom, {
+ headers: { "Content-Type": "image/svg+xml" },
+ });
+ }
+ return Response.redirect(url);
},
};