mirror of
https://github.com/Portabase/portabase.git
synced 2026-07-14 11:16:13 +02:00
55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
import {NextRequest, NextResponse} from 'next/server'
|
|
import {loggingMiddleware} from "@/middleware/loggingMiddleware";
|
|
import {errorHandler} from "@/middleware/errorHandler";
|
|
|
|
export function middleware(request: NextRequest) {
|
|
const url = request.nextUrl.clone();
|
|
|
|
// Exclude `/api/auth` and its subpaths
|
|
if (url.pathname.startsWith('/api/auth')) {
|
|
return NextResponse.next();
|
|
}
|
|
|
|
if (url.pathname.startsWith('/api')) {
|
|
|
|
const routeExists = checkRouteExists(url.pathname);
|
|
// If the route does not exist, return a 404 JSON response
|
|
if (!routeExists) {
|
|
return new NextResponse(
|
|
JSON.stringify({ message: "This API route does not exist.", status: 404 }),
|
|
{ status: 404, headers: { 'Content-Type': 'application/json' } }
|
|
);
|
|
}
|
|
}
|
|
try{
|
|
loggingMiddleware(request);
|
|
}catch(err){
|
|
errorHandler(err)
|
|
}
|
|
|
|
|
|
}
|
|
// Function to check if the route exists (supports dynamic routes)
|
|
function checkRouteExists(pathname) {
|
|
// Define static and dynamic routes with patterns
|
|
const routePatterns = [
|
|
//do not delete
|
|
// /^\/api\/auth\/\d+$/, // Dynamic route with a number as a parameter (e.g., /api/dynamic/123)
|
|
// /^\/api\/auth\/\w+$/, // Dynamic route with a number as a parameter (e.g., /api/dynamic/123)
|
|
// /^\/api\/agent\/healthcheck\/\w+$/, // Dynamic route with an alphanumeric parameter (e.g., /api/user/username)
|
|
/^\/api\/agent\/[^/]+\/status\/?$/, // Dynamic route for /api/agent/[id]/status
|
|
/^\/api\/agent\/[^/]+\/backup\/?$/,
|
|
/^\/api\/agent\/[^/]+\/restore\/?$/,
|
|
/^\/api\/files\/[^/]+\/?$/,
|
|
/^\/api\/events\/?$/,
|
|
];
|
|
return routePatterns.some(pattern => pattern.test(pathname));
|
|
}
|
|
|
|
|
|
export const config = {
|
|
matcher: [
|
|
// '/api/agent/:path*',
|
|
'/api/:path*',
|
|
],
|
|
}; |