28 lines
880 B
TypeScript
28 lines
880 B
TypeScript
import { NextResponse } from 'next/server';
|
|
import type { NextRequest } from 'next/server';
|
|
|
|
export function proxy(request: NextRequest) {
|
|
const isAdminRoute = request.nextUrl.pathname.startsWith('/admin');
|
|
const isLoginRoute = request.nextUrl.pathname === '/admin/login';
|
|
|
|
if (isAdminRoute && !isLoginRoute) {
|
|
const session = request.cookies.get('admin_session');
|
|
if (!session || session.value !== 'authenticated') {
|
|
return NextResponse.redirect(new URL('/admin/login', request.url));
|
|
}
|
|
}
|
|
|
|
if (isLoginRoute) {
|
|
const session = request.cookies.get('admin_session');
|
|
if (session && session.value === 'authenticated') {
|
|
return NextResponse.redirect(new URL('/admin', request.url));
|
|
}
|
|
}
|
|
|
|
return NextResponse.next();
|
|
}
|
|
|
|
export const config = {
|
|
matcher: '/admin/:path*',
|
|
};
|