Merged in feat/SW-3639-autologin-sas (pull request #3245)
Feat/SW-3639 autologin sas * wip * cleanup * remove commented code and default lang to EN Approved-by: Anton Gunnarsson
This commit is contained in:
@@ -1,5 +1,10 @@
|
||||
import * as Sentry from "@sentry/nextjs"
|
||||
import { type NextMiddleware, NextResponse } from "next/server"
|
||||
import {
|
||||
type NextFetchEvent,
|
||||
type NextMiddleware,
|
||||
type NextRequest,
|
||||
NextResponse,
|
||||
} from "next/server"
|
||||
|
||||
import { Lang } from "@scandic-hotels/common/constants/language"
|
||||
import { logger } from "@scandic-hotels/common/logger"
|
||||
@@ -7,6 +12,7 @@ import { findLang } from "@scandic-hotels/common/utils/languages"
|
||||
|
||||
import * as bookingFlow from "@/middlewares/bookingFlow"
|
||||
import * as invalidUrl from "@/middlewares/invalidUrl"
|
||||
import * as silentAuthMiddleware from "@/middlewares/silentAuthMiddleware"
|
||||
import * as trailingSlash from "@/middlewares/trailingSlash"
|
||||
import { getDefaultRequestHeaders } from "@/middlewares/utils"
|
||||
|
||||
@@ -18,10 +24,20 @@ export const middleware: NextMiddleware = async (request, event) => {
|
||||
request.headers.set("x-sh-origin", request.nextUrl.origin)
|
||||
|
||||
const headers = getDefaultRequestHeaders(request)
|
||||
const lang = findLang(request.nextUrl.pathname)
|
||||
const apiMiddlewareResults = await executeMiddlewares({
|
||||
request,
|
||||
event,
|
||||
defaultHeaders: headers,
|
||||
middlewares: [silentAuthMiddleware],
|
||||
})
|
||||
|
||||
if (apiMiddlewareResults) {
|
||||
return apiMiddlewareResults
|
||||
}
|
||||
|
||||
const lang = findLang(request.nextUrl.pathname)
|
||||
if (!lang) {
|
||||
// Lang is required for all our middleware.
|
||||
// Lang is required for all page middleware.
|
||||
// Without it we shortcircuit early.
|
||||
|
||||
// Default to English if no lang is found.
|
||||
@@ -34,18 +50,42 @@ export const middleware: NextMiddleware = async (request, event) => {
|
||||
}
|
||||
|
||||
// Note that the order of middlewares is important since that is the order they are matched by.
|
||||
const middlewares: {
|
||||
const pageMiddlewareResults = await executeMiddlewares({
|
||||
request,
|
||||
event,
|
||||
lang,
|
||||
defaultHeaders: headers,
|
||||
middlewares: [invalidUrl, trailingSlash, bookingFlow],
|
||||
})
|
||||
|
||||
if (pageMiddlewareResults) {
|
||||
return pageMiddlewareResults
|
||||
}
|
||||
|
||||
// Follow through with normal App router rules.
|
||||
return NextResponse.next({
|
||||
request: {
|
||||
headers,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
async function executeMiddlewares({
|
||||
middlewares,
|
||||
request,
|
||||
event,
|
||||
lang = Lang.en,
|
||||
defaultHeaders,
|
||||
}: {
|
||||
middlewares: {
|
||||
middleware: NextMiddleware
|
||||
matcher: MiddlewareMatcher
|
||||
}[] = [
|
||||
invalidUrl,
|
||||
trailingSlash,
|
||||
// authRequired,
|
||||
// handleAuth,
|
||||
bookingFlow,
|
||||
// cmsContent,
|
||||
]
|
||||
|
||||
}[]
|
||||
request: NextRequest
|
||||
event: NextFetchEvent
|
||||
lang?: Lang
|
||||
defaultHeaders: Headers
|
||||
}) {
|
||||
try {
|
||||
for (let i = 0; i < middlewares.length; ++i) {
|
||||
const middleware = middlewares[i]
|
||||
@@ -73,7 +113,7 @@ export const middleware: NextMiddleware = async (request, event) => {
|
||||
new URL(`/${lang}/middleware-error/${e.status}`, request.nextUrl),
|
||||
{
|
||||
request: {
|
||||
headers,
|
||||
headers: defaultHeaders,
|
||||
},
|
||||
status: e.status,
|
||||
statusText: e.statusText,
|
||||
@@ -88,20 +128,13 @@ export const middleware: NextMiddleware = async (request, event) => {
|
||||
new URL(`/${lang}/middleware-error/500`, request.nextUrl),
|
||||
{
|
||||
request: {
|
||||
headers,
|
||||
headers: defaultHeaders,
|
||||
},
|
||||
status: 500,
|
||||
statusText: "Internal Server Error",
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
// Follow through with normal App router rules.
|
||||
return NextResponse.next({
|
||||
request: {
|
||||
headers,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
export const config = {
|
||||
@@ -110,5 +143,8 @@ export const config = {
|
||||
* 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|_static|.netlify|api|trpc|sitemap).*)"],
|
||||
matcher: [
|
||||
"/((?!.+\\.[\\w]+$|_next|_static|.netlify|api|trpc|sitemap).*)",
|
||||
"/api/web/auth/callback/sas",
|
||||
],
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user