fix: move logic to middleware
This commit is contained in:
@@ -15,42 +15,43 @@ export async function GET(
|
|||||||
) {
|
) {
|
||||||
let redirectTo: string = ""
|
let redirectTo: string = ""
|
||||||
|
|
||||||
try {
|
const returnUrl = request.headers.get("x-returnurl")
|
||||||
// Initiate the seamless logout flow
|
|
||||||
let redirectUrlValue
|
if (returnUrl) {
|
||||||
switch (context.params.lang) {
|
// Seamless logout request from Current web
|
||||||
case Lang.da:
|
redirectTo = returnUrl
|
||||||
redirectUrlValue = env.SEAMLESS_LOGOUT_DA
|
} else {
|
||||||
break
|
try {
|
||||||
case Lang.de:
|
// Initiate the seamless logout flow
|
||||||
redirectUrlValue = env.SEAMLESS_LOGOUT_DE
|
let redirectUrlValue
|
||||||
break
|
switch (context.params.lang) {
|
||||||
case Lang.en:
|
case Lang.da:
|
||||||
redirectUrlValue = env.SEAMLESS_LOGOUT_EN
|
redirectUrlValue = env.SEAMLESS_LOGOUT_DA
|
||||||
break
|
break
|
||||||
case Lang.fi:
|
case Lang.de:
|
||||||
redirectUrlValue = env.SEAMLESS_LOGOUT_FI
|
redirectUrlValue = env.SEAMLESS_LOGOUT_DE
|
||||||
break
|
break
|
||||||
case Lang.no:
|
case Lang.en:
|
||||||
redirectUrlValue = env.SEAMLESS_LOGOUT_NO
|
redirectUrlValue = env.SEAMLESS_LOGOUT_EN
|
||||||
break
|
break
|
||||||
case Lang.sv:
|
case Lang.fi:
|
||||||
redirectUrlValue = env.SEAMLESS_LOGOUT_SV
|
redirectUrlValue = env.SEAMLESS_LOGOUT_FI
|
||||||
break
|
break
|
||||||
}
|
case Lang.no:
|
||||||
const redirectUrl = new URL(redirectUrlValue)
|
redirectUrlValue = env.SEAMLESS_LOGOUT_NO
|
||||||
if (request.nextUrl.searchParams.get("currentweb") == null) {
|
break
|
||||||
// Request coming from NEW web, redirect to current web logout
|
case Lang.sv:
|
||||||
|
redirectUrlValue = env.SEAMLESS_LOGOUT_SV
|
||||||
|
break
|
||||||
|
}
|
||||||
|
const redirectUrl = new URL(redirectUrlValue)
|
||||||
redirectTo = redirectUrl.toString()
|
redirectTo = redirectUrl.toString()
|
||||||
} else {
|
} catch (e) {
|
||||||
// Request coming from CURRENT web, redirect to current web start page
|
console.error(
|
||||||
redirectTo = redirectUrl.origin
|
"Unable to create URL for seamless logout, proceeding without it."
|
||||||
|
)
|
||||||
|
console.error(e)
|
||||||
}
|
}
|
||||||
} catch (e) {
|
|
||||||
console.error(
|
|
||||||
"Unable to create URL for seamless logout, proceeding without it."
|
|
||||||
)
|
|
||||||
console.error(e)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import { NextResponse } from "next/server"
|
import { NextResponse } from "next/server"
|
||||||
|
|
||||||
import { findLang } from "@/constants/languages"
|
import { findLang, Lang } from "@/constants/languages"
|
||||||
import { badRequest } from "@/server/errors/next"
|
import { env } from "@/env/server"
|
||||||
|
import { badRequest, internalServerError } from "@/server/errors/next"
|
||||||
|
|
||||||
import type { NextMiddleware } from "next/server"
|
import type { NextMiddleware } from "next/server"
|
||||||
|
|
||||||
@@ -14,9 +15,20 @@ export const middleware: NextMiddleware = (request) => {
|
|||||||
}
|
}
|
||||||
const lang = findLang(request.nextUrl.pathname)!
|
const lang = findLang(request.nextUrl.pathname)!
|
||||||
|
|
||||||
return NextResponse.rewrite(new URL(`/${lang}/logout`, request.nextUrl))
|
if (!env.PUBLIC_URL) {
|
||||||
}
|
throw internalServerError("No value for env.PUBLIC_URL")
|
||||||
|
}
|
||||||
|
const redirectTo = env.PUBLIC_URL
|
||||||
|
|
||||||
export const matcher: MiddlewareMatcher = (request) => {
|
const headers = new Headers(request.headers)
|
||||||
return request.nextUrl.pathname.includes("/updatelogout")
|
headers.set("x-returnurl", redirectTo)
|
||||||
|
|
||||||
|
return NextResponse.rewrite(new URL(`/${lang}/logout`, request.nextUrl), {
|
||||||
|
request: {
|
||||||
|
headers,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export const matcher: MiddlewareMatcher = (request) => {
|
||||||
|
return request.nextUrl.pathname.endsWith("/updatelogout")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user