import { Hono } from "hono"; import { basicAuth } from "hono/basic-auth"; import HomePage from "../views/pages/home"; import LinksSection from "../views/sections/links"; import db from "../lib/database"; import { randomChars } from "../lib/utils"; import type { Link } from "../types/link"; const router = new Hono(); router.use( basicAuth({ username: process.env.AUTH_USERNAME || "cebol", password: process.env.AUTH_PASSWORD || "cebol", }) ); router.get("/", (c) => { const links = db .query("SELECT * FROM links ORDER BY id DESC") .all() as Link[]; return c.html(); }); router.post("/", async (c) => { let message = "Link created successfully!"; let isSuccess = true; const body = (await c.req.parseBody()) as any; const alias: string = body.alias?.length > 0 ? body.alias : randomChars(4); const url: string = !body.url.startsWith("http") ? `https://${body.url}` : body.url; const aliasUrl = `rul.sh/${alias}`; try { const stmt = db.query( "INSERT INTO links (alias, url) VALUES (?, ?) RETURNING id" ); const result = stmt.get(alias, url) as any; if (!result?.id) { } } catch (err) { message = (err as Error).message; isSuccess = false; if (message.includes("UNIQUE constraint failed: links.alias")) { message = "Alias is used!"; } } return c.html(

{message}

{isSuccess && }
); }); router.delete("/:id", (c) => { const id = c.req.param("id"); const stmt = db.query("DELETE FROM links WHERE id = ?"); stmt.run(id); const links = db .query("SELECT * FROM links ORDER BY id DESC") .all() as Link[]; return c.html(); }); export default router;