feat(SW-2885): Added support for 'bookingcode' as bookingCode param
Approved-by: Michael Zetterberg Approved-by: Christian Andolf
This commit is contained in:
@@ -9,10 +9,10 @@ import * as cmsContent from "@/middlewares/cmsContent"
|
||||
import * as currentWebLogin from "@/middlewares/currentWebLogin"
|
||||
import * as currentWebLoginEmail from "@/middlewares/currentWebLoginEmail"
|
||||
import * as currentWebLogout from "@/middlewares/currentWebLogout"
|
||||
import * as dateFormat from "@/middlewares/dateFormat"
|
||||
import * as familyAndFriends from "@/middlewares/familyAndFriends"
|
||||
import * as handleAuth from "@/middlewares/handleAuth"
|
||||
import * as invalidUrl from "@/middlewares/invalidUrl"
|
||||
import * as legacySearchParams from "@/middlewares/legacySearchParams"
|
||||
import * as myPages from "@/middlewares/myPages"
|
||||
import * as redirect from "@/middlewares/redirect"
|
||||
import * as sasXScandic from "@/middlewares/sasXScandic"
|
||||
@@ -60,7 +60,7 @@ export const middleware: NextMiddleware = async (request, event) => {
|
||||
handleAuth,
|
||||
myPages,
|
||||
webView,
|
||||
dateFormat,
|
||||
legacySearchParams,
|
||||
bookingFlow,
|
||||
familyAndFriends,
|
||||
sasXScandic,
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
import { type NextMiddleware, NextResponse } from "next/server"
|
||||
|
||||
import type { MiddlewareMatcher } from "@/types/middleware"
|
||||
|
||||
/*
|
||||
Middleware function to normalize date formats to support
|
||||
YYYY-MM-D and YYYY-MM-DD since the current web uses YYYY-MM-D
|
||||
in the URL as parameters (toDate and fromDate)
|
||||
*/
|
||||
const legacyDatePattern = /^([12]\d{3}-(0[1-9]|1[0-2])-([1-9]))$/
|
||||
|
||||
function normalizeDate(date: string): string {
|
||||
const datePattern = /^\d{4}-\d{1,2}-\d{1,2}$/
|
||||
if (datePattern.test(date)) {
|
||||
const [year, month, day] = date.split("-").map(Number)
|
||||
return `${year}-${String(month).padStart(2, "0")}-${String(day).padStart(2, "0")}`
|
||||
}
|
||||
return date
|
||||
}
|
||||
|
||||
export const middleware: NextMiddleware = (request) => {
|
||||
const url = request.nextUrl.clone()
|
||||
const { searchParams } = url
|
||||
|
||||
if (
|
||||
legacyDatePattern.test(searchParams.get("fromdate")!) ||
|
||||
legacyDatePattern.test(searchParams.get("todate")!)
|
||||
) {
|
||||
const fromDate = searchParams.get("fromdate")!
|
||||
url.searchParams.set("fromdate", normalizeDate(fromDate))
|
||||
|
||||
const toDate = searchParams.get("todate")!
|
||||
url.searchParams.set("todate", normalizeDate(toDate))
|
||||
return NextResponse.redirect(url)
|
||||
} else {
|
||||
const headers = new Headers(request.headers)
|
||||
headers.set("x-continue", "1")
|
||||
return NextResponse.next({
|
||||
headers,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export const matcher: MiddlewareMatcher = (request) => {
|
||||
const { searchParams } = request.nextUrl
|
||||
return searchParams.has("fromdate") || searchParams.has("todate")
|
||||
}
|
||||
58
apps/scandic-web/middlewares/legacySearchParams.ts
Normal file
58
apps/scandic-web/middlewares/legacySearchParams.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import { type NextMiddleware, NextResponse } from "next/server"
|
||||
|
||||
import type { MiddlewareMatcher } from "@/types/middleware"
|
||||
|
||||
/*
|
||||
Middleware function to normalize date formats to support
|
||||
YYYY-MM-D and YYYY-MM-DD since the current web uses YYYY-MM-D
|
||||
in the URL as parameters (toDate and fromDate)
|
||||
*/
|
||||
const legacyDatePattern = /^([12]\d{3}-(0[1-9]|1[0-2])-([1-9]))$/
|
||||
|
||||
function normalizeDate(date: string): string {
|
||||
const datePattern = /^\d{4}-\d{1,2}-\d{1,2}$/
|
||||
if (datePattern.test(date)) {
|
||||
const [year, month, day] = date.split("-")
|
||||
return `${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}`
|
||||
}
|
||||
return date
|
||||
}
|
||||
|
||||
export const middleware: NextMiddleware = (request) => {
|
||||
const url = request.nextUrl.clone()
|
||||
const fromDate = url.searchParams.get("fromdate")
|
||||
const toDate = url.searchParams.get("todate")
|
||||
const hasLegacyFromDate = fromDate ? legacyDatePattern.test(fromDate) : false
|
||||
const hasLegacyToDate = toDate ? legacyDatePattern.test(toDate) : false
|
||||
const legacyBookingCode = url.searchParams.get("bookingcode")
|
||||
|
||||
const headers = new Headers(request.headers)
|
||||
|
||||
if (!hasLegacyFromDate && !hasLegacyToDate && !legacyBookingCode) {
|
||||
headers.set("x-continue", "1")
|
||||
return NextResponse.next({
|
||||
headers,
|
||||
})
|
||||
}
|
||||
|
||||
if (legacyBookingCode) {
|
||||
url.searchParams.delete("bookingcode")
|
||||
url.searchParams.set("bookingCode", legacyBookingCode)
|
||||
}
|
||||
|
||||
if (fromDate && hasLegacyFromDate) {
|
||||
const normalizedFromDate = normalizeDate(fromDate)
|
||||
url.searchParams.set("fromdate", normalizedFromDate)
|
||||
}
|
||||
|
||||
if (toDate && hasLegacyToDate) {
|
||||
const normalizedToDate = normalizeDate(toDate)
|
||||
url.searchParams.set("todate", normalizedToDate)
|
||||
}
|
||||
|
||||
return NextResponse.redirect(url)
|
||||
}
|
||||
|
||||
export const matcher: MiddlewareMatcher = (request) => {
|
||||
return request.nextUrl.searchParams.size > 0
|
||||
}
|
||||
Reference in New Issue
Block a user