| | import { NextResponse, type NextRequest } from 'next/server'; |
| | import { getToken } from 'next-auth/jwt'; |
| | import { guestRegex, isDevelopmentEnvironment } from './lib/constants'; |
| |
|
| | export async function middleware(request: NextRequest) { |
| | const { pathname } = request.nextUrl; |
| |
|
| | |
| | |
| | |
| | |
| | if (pathname.startsWith('/ping')) { |
| | return new Response('pong', { status: 200 }); |
| | } |
| |
|
| | if (pathname.startsWith('/api/auth')) { |
| | return NextResponse.next(); |
| | } |
| |
|
| | const token = await getToken({ |
| | req: request, |
| | secret: process.env.AUTH_SECRET, |
| | secureCookie: !isDevelopmentEnvironment, |
| | }); |
| |
|
| | if (!token) { |
| | const redirectUrl = encodeURIComponent(request.url); |
| |
|
| | return NextResponse.redirect( |
| | new URL(`/api/auth/guest?redirectUrl=${redirectUrl}`, request.url), |
| | ); |
| | } |
| |
|
| | const isGuest = guestRegex.test(token?.email ?? ''); |
| |
|
| | if (token && !isGuest && ['/login', '/register'].includes(pathname)) { |
| | return NextResponse.redirect(new URL('/', request.url)); |
| | } |
| |
|
| | return NextResponse.next(); |
| | } |
| |
|
| | export const config = { |
| | matcher: [ |
| | '/', |
| | '/chat/:id', |
| | '/api/:path*', |
| | '/login', |
| | '/register', |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | '/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)', |
| | ], |
| | }; |
| |
|