From a951dfaf3701bbc531689ca75aeb6863c89fb24e Mon Sep 17 00:00:00 2001 From: Regalijan Date: Sat, 26 Oct 2024 02:49:47 -0400 Subject: [PATCH] Create new short link endpoint --- functions/api/short-links/new.ts | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 functions/api/short-links/new.ts diff --git a/functions/api/short-links/new.ts b/functions/api/short-links/new.ts new file mode 100644 index 0000000..3c434f6 --- /dev/null +++ b/functions/api/short-links/new.ts @@ -0,0 +1,35 @@ +import { jsonError } from "../../common.js"; + +export async function onRequestPost(context: RequestContext) { + const { destination, path } = context.data.body; + + if (typeof path !== "string" || path.length > 256) + return jsonError("Invalid path", 400); + + const result = await context.env.D1.prepare( + "SELECT path FROM short_links WHERE path = ?;", + ) + .bind(path) + .first(); + + if (result) + return jsonError( + "Short link with that path already exists, please choose a different one.", + 400, + ); + + const url = new URL(destination); + + if (!["http:", "https:"].includes(url.protocol)) + return jsonError("Invalid URL", 400); + + await context.env.D1.prepare( + "INSERT INTO short_links (created_at, destination, path, user) VALUES (?, ?, ?, ?);", + ) + .bind(Date.now(), destination, path, context.data.current_user.id) + .run(); + + return new Response(null, { + status: 204, + }); +}