import HttpRouter from "@lib/router.ts"; import { Eta } from "@eta-dev/eta"; import { serveFile } from "jsr:@std/http/file-server"; import rateLimitMiddleware from "@src/middleware/rateLimiter.ts"; import authMiddleware from "@src/middleware/auth.ts"; import { ok, ResultFromJSON } from "@shared/utils/result.ts"; import { ResultResponseFromJSON } from "@src/lib/context.ts"; import admin from "@src/lib/admin.ts"; import UsbipManager from "@shared/utils/usbip.ts"; import loggerMiddleware from "@src/middleware/logger.ts"; const router = new HttpRouter(); const views = Deno.cwd() + "/views/"; const eta = new Eta({ views }); router.use(loggerMiddleware); router.use(rateLimitMiddleware); router.use(authMiddleware); const cache: Map = new Map(); router.get("/public/*", async (c) => { const filePath = "." + c.path; const cached = cache.get(filePath); if (cached) { return cached.clone(); } const res = await serveFile(c.req, filePath); cache.set(filePath, res.clone()); return res; }); router .get(["", "/index.html"], (c) => { return c.html(eta.render("./index.html", {})); }) .get(["/login", "/login.html"], (c) => { return c.html(eta.render("./login.html", {})); }) .post("/login", async (c) => { const r = await ResultFromJSON<{ password: string }>( await c.req.text(), ); }); router .get("/user/:id/:name/*", (c) => { return c.html( `id = ${c.params.id}, name = ${c.params.name}, rest = ${c.params.restOfThePath}`, ); }); router .get("/user/:idButDifferent", (c) => { return c.html( `idButDifferent = ${c.params.idButDifferent}`, ); }); export default { async fetch(req, connInfo) { return await router.handleRequest(req, connInfo); }, } satisfies Deno.ServeDefaultExport;