import { NextRequest, NextResponse } from 'next/server'; const REALM = 'Matcha Moments Admin'; function unauthorized() { return new NextResponse('Authentication required', { status: 401, headers: { 'WWW-Authenticate': `Basic realm="${REALM}", charset="UTF-8"`, }, }); } function parseBasicAuth(header: string | null) { if (!header?.startsWith('Basic ')) return null; try { const decoded = atob(header.slice('Basic '.length)); const splitAt = decoded.indexOf(':'); if (splitAt < 0) return null; return { username: decoded.slice(0, splitAt), password: decoded.slice(splitAt + 1), }; } catch { return null; } } export function middleware(req: NextRequest) { if (process.env.NODE_ENV !== 'production') { return NextResponse.next(); } const expectedUsername = process.env.ADMIN_USERNAME; const expectedPassword = process.env.ADMIN_PASSWORD; if (!expectedUsername || !expectedPassword) { return unauthorized(); } const credentials = parseBasicAuth(req.headers.get('authorization')); if ( credentials?.username !== expectedUsername || credentials.password !== expectedPassword ) { return unauthorized(); } return NextResponse.next(); } export const config = { matcher: ['/admin/:path*', '/api/admin/:path*'], };