import { NextResponse, NextRequest } from 'next/server'; import { cookies } from 'next/headers' import createIntlMiddleware from 'next-intl/middleware' import { routing } from '@/i18n/routing' import { decrypt } from '@/app/actions/session'; const intlMiddleware = createIntlMiddleware(routing); export default async function proxy(request: NextRequest) { const path = request.nextUrl.pathname; if ( path.startsWith('/_next') || path.includes('/api/') ) { return NextResponse.next(); } const pathname = request.nextUrl.pathname; const locale = pathname.split('/')[1]; const isValidLocale = routing.locales.includes(locale as any); if (!isValidLocale && !path.includes('/login')) { const defaultLocale = routing.defaultLocale; const newUrl = new URL(`/${defaultLocale}${path}`, request.url); return NextResponse.redirect(newUrl); } const isLoginPage = path.includes(`/${locale}/login`) || path === '/login'; const isPublicPage = isLoginPage || path.includes('/api/'); if (!isPublicPage) { const cookie = (await cookies()).get('session_nc_ap')?.value; const session = await decrypt(cookie); const targetLocale = isValidLocale ? locale : routing.defaultLocale; if (!session?.token) { const loginUrl = new URL(`/${targetLocale}/login`, request.url); return NextResponse.redirect(loginUrl); } else if (path === '/en' || path === '/ru') { const dashboardUrl = new URL(`/${targetLocale}/pages`, request.url); dashboardUrl.search = new URL(request.url).search; return NextResponse.redirect(dashboardUrl); } } const intlResponse = intlMiddleware(request); if (intlResponse) { const response = new NextResponse(intlResponse.body, intlResponse); response.headers.set('x-pathname', path); return response; } return NextResponse.next(); } export const config = { matcher: ['/((?!_next/static|_next/image|.*\\.png$).*)'] };