diff --git a/server/dev-server.mjs b/server/dev-server.mjs index b272697..d6c621c 100644 --- a/server/dev-server.mjs +++ b/server/dev-server.mjs @@ -213,7 +213,8 @@ app.get("/auth/callback", asyncRoute(async (req, res) => { accessToken: tokenSet.access_token ?? null, expiresAt: tokenSet.expires_in ? Date.now() + Number(tokenSet.expires_in) * 1000 : null, }); - res.redirect(pendingLogin.returnTo); + setNoStore(res); + res.type("html").send(renderLoginCompletePage(pendingLogin.returnTo)); })); app.get("/auth/logged-out", (req, res) => { @@ -4015,6 +4016,41 @@ function renderGlobalLogoutPage(frontchannelLogoutUrls, finalRedirectUrl) { `; } +function renderLoginCompletePage(returnTo) { + const redirectUrlJson = JSON.stringify(sanitizeReturnTo(returnTo)); + + return ` + + + + + NODE.DC + + + + + +`; +} + function renderSessionSyncBridgePage(allowedOrigins) { const allowedOriginsJson = JSON.stringify(allowedOrigins); @@ -4043,18 +4079,20 @@ function renderSessionSyncBridgePage(allowedOrigins) { return allowedOrigins.has(origin); } - function isLogoutEvent(payload) { - return payload && payload.type === "nodedc:session:logout" && typeof payload.id === "string"; + function isSessionEvent(payload) { + return payload && + (payload.type === "nodedc:session:logout" || payload.type === "nodedc:session:login") && + typeof payload.id === "string"; } function forwardToParent(payload) { - if (!isLogoutEvent(payload) || payload.id === lastEventId || !isAllowedOrigin(parentOrigin)) return; + if (!isSessionEvent(payload) || payload.id === lastEventId || !isAllowedOrigin(parentOrigin)) return; lastEventId = payload.id; window.parent.postMessage(payload, parentOrigin); } function publish(payload) { - if (!isLogoutEvent(payload)) return; + if (!isSessionEvent(payload)) return; try { const channel = new BroadcastChannel(channelName); channel.postMessage(payload); @@ -4066,7 +4104,7 @@ function renderSessionSyncBridgePage(allowedOrigins) { } window.addEventListener("message", (event) => { - if (!isAllowedOrigin(event.origin) || !isLogoutEvent(event.data)) return; + if (!isAllowedOrigin(event.origin) || !isSessionEvent(event.data)) return; publish(event.data); });