This commit is contained in:
2026-06-09 15:15:40 +03:00
parent f6b4acb760
commit d908d83ca5
58 changed files with 4320 additions and 419 deletions
+75
View File
@@ -0,0 +1,75 @@
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
import { match } from "@formatjs/intl-localematcher";
import Negotiator from "negotiator";
let locales = ["tr", "en"];
let defaultLocale = "tr";
// Get the preferred locale
function getLocale(request: NextRequest): string {
const headers = new Headers(request.headers);
const acceptLanguage = headers.get("accept-language");
if (!acceptLanguage) return defaultLocale;
const negotiatorHeaders: Record<string, string> = {};
headers.forEach((value, key) => (negotiatorHeaders[key] = value));
try {
const languages = new Negotiator({ headers: negotiatorHeaders }).languages();
return match(languages, locales, defaultLocale);
} catch (e) {
return defaultLocale;
}
}
export function proxy(request: NextRequest) {
const { pathname } = request.nextUrl;
// Skip public files and internal next paths
if (
pathname.startsWith('/_next') ||
pathname.startsWith('/api') ||
pathname.includes('.')
) {
return;
}
// Handle Admin Panel Authentication & Routing Bypass
if (pathname.startsWith('/admin')) {
// Exclude /admin/login from the check
if (pathname === '/admin/login') {
return;
}
// Check for admin session
const session = request.cookies.get('admin_session');
if (!session || session.value !== 'true') {
request.nextUrl.pathname = '/admin/login';
return NextResponse.redirect(request.nextUrl);
}
// Allow authenticated admin traffic
return;
}
const pathnameHasLocale = locales.some(
(locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
);
if (pathnameHasLocale) return;
// Redirect if there is no locale
const locale = getLocale(request);
request.nextUrl.pathname = `/${locale}${pathname}`;
return NextResponse.redirect(request.nextUrl);
}
export const config = {
matcher: [
// Skip all internal paths (_next, static files, api)
'/((?!_next|api|favicon.ico|.*\\..*).*)',
],
};