This commit is contained in:
2026-07-16 09:53:14 +07:00
parent 0fc112a2e8
commit 29cec708a3
1236 changed files with 212848 additions and 0 deletions

58
src/proxy.ts Normal file
View File

@@ -0,0 +1,58 @@
import { auth } from '@/auth';
import { NextResponse } from 'next/server';
const protectedApiPrefixes = [
'/api/products',
'/api/organizations',
'/api/users',
'/api/employees',
'/api/courses',
'/api/training-records',
'/api/training-matrix',
'/api/reports',
'/api/training-policies',
'/api/import-employees',
'/api/master-review',
'/api/audit-logs',
'/api/notifications',
'/api/announcements'
];
export const proxy = auth((req) => {
const isDashboardRoute = req.nextUrl.pathname.startsWith('/dashboard');
const isProtectedApiRoute = protectedApiPrefixes.some((prefix) =>
req.nextUrl.pathname.startsWith(prefix)
);
if (!req.auth?.user && (isDashboardRoute || isProtectedApiRoute)) {
if (isProtectedApiRoute) {
return NextResponse.json({ message: 'Unauthorized' }, { status: 401 });
}
const signInUrl = new URL('/auth/sign-in', req.nextUrl.origin);
signInUrl.searchParams.set('callbackUrl', req.nextUrl.pathname);
return NextResponse.redirect(signInUrl);
}
return NextResponse.next();
});
export const config = {
matcher: [
'/((?!api/auth|_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)',
'/api/products/:path*',
'/api/organizations/:path*',
'/api/users/:path*',
'/api/employees/:path*',
'/api/courses/:path*',
'/api/training-records/:path*',
'/api/training-matrix/:path*',
'/api/reports/:path*',
'/api/training-policies/:path*',
'/api/import-employees/:path*',
'/api/master-review/:path*',
'/api/audit-logs/:path*',
'/api/notifications/:path*',
'/api/announcements/:path*'
]
};