| import { createServerClient } from "@supabase/ssr"; |
| import { NextResponse, type NextRequest } from "next/server"; |
|
|
| const PUBLIC_PATHS = [ |
| "/", |
| "/login", |
| "/signup", |
| "/auth/callback", |
| "/console", |
| "/admin", |
| "/api/payments/mpesa/callback", |
| ]; |
|
|
| const API_ADMIN_PATHS = ["/api/admin"]; |
|
|
| function isPublic(pathname: string) { |
| |
| if (pathname.startsWith("/api/")) return true; |
| return PUBLIC_PATHS.some( |
| (p) => pathname === p || pathname.startsWith(p + "/") |
| ); |
| } |
|
|
| export async function proxy(request: NextRequest) { |
| const { pathname } = request.nextUrl; |
|
|
| if (isPublic(pathname)) { |
| return NextResponse.next(); |
| } |
|
|
| let response = NextResponse.next({ request }); |
|
|
| const supabase = createServerClient( |
| process.env.NEXT_PUBLIC_SUPABASE_URL!, |
| process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, |
| { |
| cookies: { |
| getAll() { |
| return request.cookies.getAll(); |
| }, |
| setAll(tokens) { |
| for (const { name, value, options } of tokens) { |
| request.cookies.set(name, value); |
| response = NextResponse.next({ request }); |
| response.cookies.set(name, value, options); |
| } |
| }, |
| }, |
| } |
| ); |
|
|
| const { |
| data: { user }, |
| } = await supabase.auth.getUser(); |
|
|
| if (!user) { |
| const loginUrl = new URL("/login", request.url); |
| loginUrl.searchParams.set("redirect", pathname); |
| return NextResponse.redirect(loginUrl); |
| } |
|
|
| return response; |
| } |
|
|
| export const config = { |
| matcher: [ |
| "/((?!_next/static|_next/image|favicon.ico|manifest.json|sw.js|icons/).*)", |
| ], |
| }; |
|
|