41 lines
1.1 KiB
TypeScript

import { NextRequest } from 'next/server'
export const dynamic = 'force-dynamic'
function redirectToProtectedUploadRoute(
request: NextRequest,
pathSegments: string[],
): Response {
if (pathSegments.length === 1 && pathSegments[0] === 'health') {
return new Response(request.method === 'HEAD' ? null : 'OK', { status: 200 })
}
if (
pathSegments.length === 0 ||
pathSegments.some((segment) => !segment || segment === '.' || segment === '..' || /[\\/]/.test(segment))
) {
return new Response(request.method === 'HEAD' ? null : 'Forbidden', { status: 403 })
}
const target = new URL(
`/api/uploads/${pathSegments.map((segment) => encodeURIComponent(segment)).join('/')}`,
request.url,
)
target.search = request.nextUrl.search
return Response.redirect(target, 307)
}
export async function GET(
request: NextRequest,
{ params }: { params: { path?: string[] } },
) {
return redirectToProtectedUploadRoute(request, params.path || [])
}
export async function HEAD(
request: NextRequest,
{ params }: { params: { path?: string[] } },
) {
return redirectToProtectedUploadRoute(request, params.path || [])
}