From 2e634c6c355290a686159929ac8e4470a1fb88ca Mon Sep 17 00:00:00 2001 From: DCCONSTRUCTIONS Date: Tue, 5 May 2026 09:20:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=A1=D0=9F=D0=A0=D0=90=D0=92=D0=9B?= =?UTF-8?q?=D0=95=D0=9D=D0=98=D0=95=20-=20NODEDC=20LAUNCHER:=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B2=D0=B5=D1=80=D1=88=D0=B0=D1=82=D1=8C=20IdP=20logout?= =?UTF-8?q?=20=D0=B1=D0=B5=D0=B7=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D1=81=D0=B5=D1=81=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/dev-server.mjs | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/server/dev-server.mjs b/server/dev-server.mjs index d3b3916..f60e4e5 100644 --- a/server/dev-server.mjs +++ b/server/dev-server.mjs @@ -199,19 +199,7 @@ app.get("/auth/logout", asyncRoute(async (req, res) => { } const discovery = await getOidcDiscovery(); - const endSessionEndpoint = discovery.end_session_endpoint; - const loginRedirectUrl = buildLoginRedirectUrl(returnTo, { forceLogin: true }); - - if (!endSessionEndpoint || !session?.tokenSet.idToken) { - setNoStore(res); - res.type("html").send(renderGlobalLogoutPage(getFrontchannelLogoutUrls(), loginRedirectUrl)); - return; - } - - const logoutUrl = new URL(endSessionEndpoint); - logoutUrl.searchParams.set("client_id", config.clientId); - logoutUrl.searchParams.set("post_logout_redirect_uri", buildLoggedOutRedirectUrl(returnTo)); - logoutUrl.searchParams.set("id_token_hint", session.tokenSet.idToken); + const logoutUrl = buildOidcLogoutUrl(discovery, returnTo, session?.tokenSet.idToken); setNoStore(res); res.type("html").send(renderGlobalLogoutPage(getFrontchannelLogoutUrls(), logoutUrl.toString())); @@ -1454,6 +1442,20 @@ function buildLoginRedirectUrl(returnTo, { forceLogin = false } = {}) { return loginUrl.toString(); } +function buildOidcLogoutUrl(discovery, returnTo = "/", idToken = null) { + const endpoint = discovery.end_session_endpoint || new URL("/application/o/launcher/end-session/", config.issuer).toString(); + const logoutUrl = new URL(endpoint); + + logoutUrl.searchParams.set("client_id", config.clientId); + logoutUrl.searchParams.set("post_logout_redirect_uri", buildLoggedOutRedirectUrl(returnTo)); + + if (idToken) { + logoutUrl.searchParams.set("id_token_hint", idToken); + } + + return logoutUrl; +} + function buildLoggedOutRedirectUrl(returnTo = "/") { const loggedOutUrl = new URL("/auth/logged-out", config.appBaseUrl); const cleanReturnTo = sanitizeReturnTo(returnTo);