45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { NextResponse } from 'next/server'
|
|
import type { NextRequest } from 'next/server'
|
|
|
|
const locales = ['tr', 'en']
|
|
const defaultLocale = 'tr'
|
|
|
|
export function proxy(request: NextRequest) {
|
|
const { pathname } = request.nextUrl
|
|
|
|
// Admin Auth Logic
|
|
if (pathname.startsWith('/admin')) {
|
|
const session = request.cookies.get('admin_session')?.value
|
|
const secret = process.env.ADMIN_SECRET || 'secret'
|
|
const isLoginPage = pathname === '/admin/login'
|
|
|
|
if (!session || session !== secret) {
|
|
if (!isLoginPage) {
|
|
return NextResponse.redirect(new URL('/admin/login', request.url))
|
|
}
|
|
} else {
|
|
if (isLoginPage) {
|
|
return NextResponse.redirect(new URL('/admin', request.url))
|
|
}
|
|
}
|
|
|
|
return NextResponse.next()
|
|
}
|
|
|
|
// Locale Logic
|
|
const hasLocale = locales.some(
|
|
(locale) => pathname === `/${locale}` || pathname.startsWith(`/${locale}/`)
|
|
)
|
|
|
|
if (!hasLocale) {
|
|
request.nextUrl.pathname = `/${defaultLocale}${pathname}`
|
|
return NextResponse.redirect(request.nextUrl)
|
|
}
|
|
|
|
return NextResponse.next()
|
|
}
|
|
|
|
export const config = {
|
|
matcher: ['/((?!_next|favicon.ico|icons|manifest.webmanifest).*)'],
|
|
}
|