import { NextRequest, NextResponse } from "next/server"; import { getUser } from "./utils/api"; export async function middleware(req: NextRequest) { const cookie = req.cookies.get("session")?.value; const pathname = req.nextUrl.pathname; const response = NextResponse.next(); if (pathname === "/login" || pathname === "/register") { console.log(`Route is login`); if (cookie) { console.log(`Request includes a cookie`); const data = await getUser(cookie); if (data.status === 401) { console.log(`Request cookie is invalid`); response.cookies.delete("session"); } else if (data.status === 200) { console.log(`Request cookie is valid`); return NextResponse.redirect(new URL("/admin", req.nextUrl)); } } } if ( pathname === "/admin" || pathname === "/me" || pathname === "/me/profile" ) { console.log("Route is admin"); if (!cookie) { console.log("No cookie found... Redirecting"); return NextResponse.redirect(new URL("/login", req.nextUrl)); } else { console.log("Cookie found... Authenticating"); const data = await getUser(cookie); const res = await data.json(); if (data.status === 401) { console.log("User has an invalid cookie"); response.cookies.delete("session"); return NextResponse.redirect(new URL("/login", req.nextUrl)); } else if (data.status === 200) { console.log( `Request cookie is valid and the user is a valid user. (username: ${res.user.displayName})`, ); response.cookies.set({ name: "session", value: cookie, path: "/", }); return response; } } } } export const config = { match: ["/:path*"], };