diff --git a/app/[lang]/(live)/(protected)/logout/route.ts b/app/[lang]/(live)/(protected)/logout/route.ts index 489f36857..d29ac6571 100644 --- a/app/[lang]/(live)/(protected)/logout/route.ts +++ b/app/[lang]/(live)/(protected)/logout/route.ts @@ -15,42 +15,43 @@ export async function GET( ) { let redirectTo: string = "" - try { - // Initiate the seamless logout flow - let redirectUrlValue - switch (context.params.lang) { - case Lang.da: - redirectUrlValue = env.SEAMLESS_LOGOUT_DA - break - case Lang.de: - redirectUrlValue = env.SEAMLESS_LOGOUT_DE - break - case Lang.en: - redirectUrlValue = env.SEAMLESS_LOGOUT_EN - break - case Lang.fi: - redirectUrlValue = env.SEAMLESS_LOGOUT_FI - break - case Lang.no: - redirectUrlValue = env.SEAMLESS_LOGOUT_NO - break - case Lang.sv: - redirectUrlValue = env.SEAMLESS_LOGOUT_SV - break - } - const redirectUrl = new URL(redirectUrlValue) - if (request.nextUrl.searchParams.get("currentweb") == null) { - // Request coming from NEW web, redirect to current web logout + const returnUrl = request.headers.get("x-returnurl") + + if (returnUrl) { + // Seamless logout request from Current web + redirectTo = returnUrl + } else { + try { + // Initiate the seamless logout flow + let redirectUrlValue + switch (context.params.lang) { + case Lang.da: + redirectUrlValue = env.SEAMLESS_LOGOUT_DA + break + case Lang.de: + redirectUrlValue = env.SEAMLESS_LOGOUT_DE + break + case Lang.en: + redirectUrlValue = env.SEAMLESS_LOGOUT_EN + break + case Lang.fi: + redirectUrlValue = env.SEAMLESS_LOGOUT_FI + break + case Lang.no: + redirectUrlValue = env.SEAMLESS_LOGOUT_NO + break + case Lang.sv: + redirectUrlValue = env.SEAMLESS_LOGOUT_SV + break + } + const redirectUrl = new URL(redirectUrlValue) redirectTo = redirectUrl.toString() - } else { - // Request coming from CURRENT web, redirect to current web start page - redirectTo = redirectUrl.origin + } catch (e) { + console.error( + "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 { diff --git a/middlewares/currentWebLogout.ts b/middlewares/currentWebLogout.ts index cae23c462..51a1ebf83 100644 --- a/middlewares/currentWebLogout.ts +++ b/middlewares/currentWebLogout.ts @@ -1,7 +1,8 @@ import { NextResponse } from "next/server" -import { findLang } from "@/constants/languages" -import { badRequest } from "@/server/errors/next" +import { findLang, Lang } from "@/constants/languages" +import { env } from "@/env/server" +import { badRequest, internalServerError } from "@/server/errors/next" import type { NextMiddleware } from "next/server" @@ -14,9 +15,20 @@ export const middleware: NextMiddleware = (request) => { } 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) => { - return request.nextUrl.pathname.includes("/updatelogout") + const headers = new Headers(request.headers) + 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") }