Spaces:
Paused
Paused
// middleware.ts (at the root of your project) | |
import { NextResponse } from 'next/server'; | |
import type { NextRequest } from 'next/server'; | |
// if route starts with these, approve | |
const publicRoutes = ['/api/img/', '/api/files/']; | |
export function middleware(request: NextRequest) { | |
// check env var for AI_TOOLKIT_AUTH, if not set, approve all requests | |
// if it is set make sure bearer token matches | |
const tokenToUse = process.env.AI_TOOLKIT_AUTH || null; | |
if (!tokenToUse) { | |
return NextResponse.next(); | |
} | |
// Get the token from the headers | |
const token = request.headers.get('Authorization')?.split(' ')[1]; | |
// allow public routes to pass through | |
if (publicRoutes.some(route => request.nextUrl.pathname.startsWith(route))) { | |
return NextResponse.next(); | |
} | |
// Check if the route should be protected | |
// This will apply to all API routes that start with /api/ | |
if (request.nextUrl.pathname.startsWith('/api/')) { | |
if (!token || token !== tokenToUse) { | |
// Return a JSON response with 401 Unauthorized | |
return new NextResponse(JSON.stringify({ error: 'Unauthorized' }), { | |
status: 401, | |
headers: { 'Content-Type': 'application/json' }, | |
}); | |
} | |
// For authorized users, continue | |
return NextResponse.next(); | |
} | |
// For non-API routes, just continue | |
return NextResponse.next(); | |
} | |
// Configure which paths this middleware will run on | |
export const config = { | |
matcher: [ | |
// Apply to all API routes | |
'/api/:path*', | |
], | |
}; | |