memorium/routes/_middleware.ts

42 lines
1.2 KiB
TypeScript

//routes/middleware-error-handler/_middleware.ts
import { MiddlewareHandlerContext } from "$fresh/server.ts";
import { DomainError } from "@lib/errors.ts";
import { getCookies } from "https://deno.land/std@0.197.0/http/cookie.ts";
import { decode, verify } from "https://deno.land/x/djwt@v2.2/mod.ts";
import { sessionDB, userDB } from "@lib/db.ts";
import { JWT_SECRET } from "@lib/env.ts";
export async function handler(
_req: Request,
ctx: MiddlewareHandlerContext,
) {
try {
ctx.state.flag = true;
const allCookies = getCookies(_req.headers);
const sessionCookie = allCookies["session_cookie"];
if (!ctx.state.session && sessionCookie && JWT_SECRET) {
try {
const payload = await verify(sessionCookie, JWT_SECRET, "HS512");
if (payload) {
ctx.state.session = payload;
}
} catch (_err) {
//
}
}
return await ctx.next();
} 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,
});
}
}