import { NextRequestWithAuth, withAuth } from "next-auth/middleware"; import { authOptions } from "./config/authConfig"; import { NextFetchEvent, NextResponse } from "next/server"; import { PRIVATE_ROUTES } from "./routes"; const LANG_QUERY_PARAM = "lang"; const authMiddleware = withAuth({ pages: authOptions.pages, callbacks: { authorized: ({ req, token }) => { const currentTime = Math.floor(Date.now() / 1000); // Redirect to login if: // 1. No token exists // 2. Token has an expiry field (exp) and current time has passed it if (!token || (token.exp && currentTime > (token.exp as number))) { return false; } return true; }, }, }); export default async function middleware( req: NextRequestWithAuth, event: NextFetchEvent, ) { // Handle language parameters const langPref = req.nextUrl.searchParams.get(LANG_QUERY_PARAM); if (langPref) { const newUrl = new URL(req.nextUrl); newUrl.searchParams.delete(LANG_QUERY_PARAM); const response = NextResponse.redirect(newUrl); response.cookies.set("i18next", langPref); return response; } // Check if the current URL starts with any string in PRIVATE_ROUTES const isPrivateRoute = PRIVATE_ROUTES.some((route) => req.nextUrl.pathname.startsWith(route) ); // Debugging: View terminal logs to see if the path is being caught if (req.nextUrl.pathname.startsWith("/ps") || req.nextUrl.pathname.startsWith("/testing")) { console.log("--- Middleware Check ---"); console.log("Path:", req.nextUrl.pathname); console.log("Is Private Match:", isPrivateRoute); } return isPrivateRoute ? await authMiddleware(req, event) // Run authentication check : NextResponse.next(); // Allow public access }