import { DomainError } from "@lib/errors.ts"; import { getCookies } from "@std/http/cookie"; import { verify } from "@zaubrik/djwt"; import * as perf from "@lib/performance.ts"; import { JWT_SECRET } from "@lib/env.ts"; import { define } from "../utils.ts"; function importKey(secret: string) { return crypto.subtle.importKey( "raw", new TextEncoder().encode(secret), { name: "HMAC", hash: "SHA-512" }, false, ["sign", "verify"], ); } const authMiddleware = define.middleware(async function ( ctx, ) { const req = ctx.req; try { performance.mark("a"); const allCookies = getCookies(req.headers); const sessionCookie = allCookies["session_cookie"]; if (!ctx.state.session && sessionCookie && JWT_SECRET) { try { const payload = await verify( sessionCookie, await importKey(JWT_SECRET), ); if (payload) { ctx.state.session = payload; } } catch (_err) { console.log({ _err }); } } const resp = await ctx.next(); performance.mark("b"); const b = performance.measure("a->b", "a", "b"); perf.savePerformance(req.url, b.duration); return resp; } catch (error) { console.error("Error", error); if (error instanceof DomainError) { return new Response(error.statusText, { status: error.status, }); } return new Response("Internal Server Error", { status: 500, }); } }); export default [];