92 lines
2.7 KiB
TypeScript
92 lines
2.7 KiB
TypeScript
import { NextResponse } from "next/server"
|
|
|
|
import { auth } from "@/auth"
|
|
|
|
import { findLocale } from "@/constants/locales"
|
|
import { pageNames } from "@/constants/myPages"
|
|
|
|
import { apiAuthPrefix } from "@/routes/api"
|
|
// import { publicRoutes } from "@/routes/public"
|
|
import { protectedRoutes } from "@/routes/protected"
|
|
|
|
export default auth(async function middleware(request) {
|
|
const { nextUrl } = request
|
|
const isLoggedIn = !!request.auth
|
|
|
|
const isApiRoute = nextUrl.pathname.startsWith(apiAuthPrefix)
|
|
if (isApiRoute) {
|
|
return NextResponse.next()
|
|
}
|
|
|
|
const locale = findLocale(nextUrl.pathname)
|
|
if (!locale) {
|
|
//return <LocalePicker />
|
|
return Response.json("Not found!!!", { status: 404 })
|
|
}
|
|
|
|
const isProtectedRoute = protectedRoutes.includes(nextUrl.pathname)
|
|
if (isProtectedRoute) {
|
|
if (isLoggedIn) {
|
|
/**
|
|
* Temporary hard rewrite to my pages
|
|
*/
|
|
return NextResponse.rewrite(
|
|
new URL(`/${locale}/${pageNames[locale]}`, nextUrl)
|
|
)
|
|
} else {
|
|
/**
|
|
* Redirect to Loginpage
|
|
* (Loginpage most likely to be removed)
|
|
*/
|
|
return NextResponse.redirect(new URL(`/${locale}/login`, nextUrl))
|
|
}
|
|
}
|
|
|
|
if (nextUrl.pathname.startsWith(`/${locale}/login`)) {
|
|
return NextResponse.next()
|
|
}
|
|
|
|
// const isPublicRoute = publicRoutes.includes(nextUrl.pathname)
|
|
// if (!isLoggedIn && !isPublicRoute) {
|
|
// return NextResponse.redirect(new URL(`/${locale}/login`, nextUrl))
|
|
// }
|
|
|
|
//const contentType = data.response.meta.contentType;
|
|
const contentType = "currentContentPage"
|
|
const pathNameWithoutLocale = nextUrl.pathname.replace(`/${locale}`, "")
|
|
const searchParams = new URLSearchParams(request.nextUrl.searchParams)
|
|
|
|
if (request.nextUrl.pathname.includes("preview")) {
|
|
searchParams.set("uri", pathNameWithoutLocale.replace("/preview", ""))
|
|
return NextResponse.rewrite(
|
|
new URL(
|
|
`/${locale}/preview-current?${searchParams.toString()}`,
|
|
request.url
|
|
)
|
|
)
|
|
}
|
|
|
|
searchParams.set("uri", pathNameWithoutLocale)
|
|
switch (contentType) {
|
|
case "currentContentPage":
|
|
return NextResponse.rewrite(
|
|
new URL(
|
|
`/${locale}/current-content-page?${searchParams.toString()}`,
|
|
request.url
|
|
)
|
|
)
|
|
}
|
|
|
|
return NextResponse.next()
|
|
})
|
|
|
|
// See "Matching Paths" below to learn more
|
|
export const config = {
|
|
/**
|
|
* Copied from Clerk to protect all routes by default and handle
|
|
* public routes inside middleware.
|
|
* (https://clerk.com/docs/quickstarts/nextjs?utm_source=sponsorship&utm_medium=youtube&utm_campaign=code-with-antonio&utm_content=12-31-2023#add-authentication-to-your-app)
|
|
*/
|
|
matcher: ["/((?!.+\\.[\\w]+$|_next|en/test).*)", "/", "/(api)(.*)"],
|
|
}
|