mirror of
https://github.com/sourcebot-dev/sourcebot.git
synced 2025-12-14 05:15:19 +00:00
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
|
|
import { NextResponse } from 'next/server'
|
||
|
|
import type { NextRequest } from 'next/server'
|
||
|
|
import { env } from './env.mjs'
|
||
|
|
import { SINGLE_TENANT_ORG_DOMAIN } from '@/lib/constants'
|
||
|
|
|
||
|
|
export async function middleware(request: NextRequest) {
|
||
|
|
const url = request.nextUrl.clone();
|
||
|
|
|
||
|
|
if (env.SOURCEBOT_TENANCY_MODE !== 'single') {
|
||
|
|
return NextResponse.next();
|
||
|
|
}
|
||
|
|
|
||
|
|
// Enable these domains when auth is enabled.
|
||
|
|
if (env.SOURCEBOT_AUTH_ENABLED === 'true' &&
|
||
|
|
(
|
||
|
|
url.pathname.startsWith('/login') ||
|
||
|
|
url.pathname.startsWith('/redeem')
|
||
|
|
)
|
||
|
|
) {
|
||
|
|
return NextResponse.next();
|
||
|
|
}
|
||
|
|
|
||
|
|
const pathSegments = url.pathname.split('/').filter(Boolean);
|
||
|
|
const currentDomain = pathSegments[0];
|
||
|
|
|
||
|
|
// If we're already on the correct domain path, allow
|
||
|
|
if (currentDomain === SINGLE_TENANT_ORG_DOMAIN) {
|
||
|
|
return NextResponse.next();
|
||
|
|
}
|
||
|
|
|
||
|
|
url.pathname = `/${SINGLE_TENANT_ORG_DOMAIN}${pathSegments.length > 1 ? '/' + pathSegments.slice(1).join('/') : ''}`;
|
||
|
|
return NextResponse.redirect(url);
|
||
|
|
}
|
||
|
|
|
||
|
|
export const config = {
|
||
|
|
// https://nextjs.org/docs/app/building-your-application/routing/middleware#matcher
|
||
|
|
matcher: [
|
||
|
|
'/((?!api|_next/static|ingest|_next/image|favicon.ico|sitemap.xml|robots.txt|sb_logo_light_large.png|arrow.png|placeholder_avatar.png).*)',
|
||
|
|
],
|
||
|
|
}
|