From 4395c8bea5910952d5d5ae6685582d77b2bde82b Mon Sep 17 00:00:00 2001 From: jelveh Date: Fri, 1 May 2026 23:49:35 -0700 Subject: [PATCH] Handle OIDC popup flow: skip session list --- .../controllers/oidc/OIDCController.ts | 4 ++++ src/gui/src/initgui.js | 23 ++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/backend/controllers/oidc/OIDCController.ts b/src/backend/controllers/oidc/OIDCController.ts index 3c49490a3..52d995160 100644 --- a/src/backend/controllers/oidc/OIDCController.ts +++ b/src/backend/controllers/oidc/OIDCController.ts @@ -567,6 +567,10 @@ if (window.opener) { target = origin || '/'; } + if (stateDecoded.embedded_in_popup) { + target = appendQueryParam(target, 'oidc_login', 'true'); + } + if (extraQueryParams) { for (const [k, v] of Object.entries(extraQueryParams)) { if (v != null) target = appendQueryParam(target, k, v); diff --git a/src/gui/src/initgui.js b/src/gui/src/initgui.js index edaf6b644..5ead48bb8 100644 --- a/src/gui/src/initgui.js +++ b/src/gui/src/initgui.js @@ -476,16 +476,23 @@ window.initgui = async function (options) { // let's log the error for now in case a change in state occurred. console.error('error in \'sign-in\' flow', e); } - // Always show session list so user sees their account(s); after OIDC they will see the one they signed into - picked_a_user_for_sdk_login = await UIWindowSessionList({ - reload_on_success: false, - draggable_body: false, - has_head: false, - cover_page: true, - }); - if ( picked_a_user_for_sdk_login ) { + if ( window.url_query_params.get('oidc_login') === 'true' ) { + // OIDC login just completed in popup — skip session list and finish the flow + picked_a_user_for_sdk_login = true; await window.getUserAppToken(window.openerOrigin); + } else { + // Show session list so user can pick which account to use + picked_a_user_for_sdk_login = await UIWindowSessionList({ + reload_on_success: false, + draggable_body: false, + has_head: false, + cover_page: true, + }); + + if ( picked_a_user_for_sdk_login ) { + await window.getUserAppToken(window.openerOrigin); + } } } }