From c3368f553eea5afa99f8e3ff8552ee085d82e935 Mon Sep 17 00:00:00 2001 From: Neal Shah <30693865+ProgrammerIn-wonderland@users.noreply.github.com> Date: Mon, 13 Jul 2026 20:32:37 -0400 Subject: [PATCH] Add GUI button for custom OIDC (#3384) --- src/gui/src/UI/UIWindowLogin.js | 17 +++++++++++++++++ src/gui/src/UI/UIWindowSignup.js | 23 +++++++++++++++++++++++ src/gui/src/i18n/translations/en.js | 2 ++ src/gui/src/util/openid.js | 15 +++++++++++++++ 4 files changed, 57 insertions(+) diff --git a/src/gui/src/UI/UIWindowLogin.js b/src/gui/src/UI/UIWindowLogin.js index cfc88ab3b..aa76a9ffc 100644 --- a/src/gui/src/UI/UIWindowLogin.js +++ b/src/gui/src/UI/UIWindowLogin.js @@ -21,6 +21,7 @@ import TeePromise from '../util/TeePromise.js'; import UIWindow from './UIWindow.js'; import UIWindowRecoverPassword from './UIWindowRecoverPassword.js'; import UIWindowSignup from './UIWindowSignup.js'; +import { KNOWN_OIDC_PROVIDERS, OIDC_GENERIC_PROVIDER_ICON, humanizeOidcProviderId } from '../util/openid.js'; // ── 2FA Login CSS (injected once) ─────────────────────────────────────────── const LOGIN_2FA_CSS = ` @@ -316,6 +317,7 @@ async function UIWindowLogin (options) { h += ``; h += ``; h += ``; + h += '
'; h += ''; h += ''; h += ''; @@ -432,6 +434,21 @@ async function UIWindowLogin (options) { if ( data.providers.includes('google') ) { hasProvider = true; wireOidcBtn('google', '.oidc-google-btn'); } if ( data.providers.includes('apple') ) { hasProvider = true; wireOidcBtn('apple', '.oidc-apple-btn'); } if ( data.providers.includes('microsoft') ) { hasProvider = true; wireOidcBtn('microsoft', '.oidc-microsoft-btn'); } + + // Any other configured provider (e.g. a self-hosted admin's + // custom OIDC IdP) gets a generic button. + data.providers + .filter(provider => !KNOWN_OIDC_PROVIDERS.includes(provider)) + .forEach((provider, idx) => { + hasProvider = true; + const btnClass = `oidc-custom-btn-${idx}`; + const label = humanizeOidcProviderId(provider); + $(el_window).find('.oidc-custom-providers').append( + ``, + ); + wireOidcBtn(provider, `.${btnClass}`); + }); + if ( hasProvider ) $(el_window).find('.oidc-providers-wrapper').show(); } catch (_) { } diff --git a/src/gui/src/UI/UIWindowSignup.js b/src/gui/src/UI/UIWindowSignup.js index 4b847b77b..1b868e183 100644 --- a/src/gui/src/UI/UIWindowSignup.js +++ b/src/gui/src/UI/UIWindowSignup.js @@ -23,6 +23,7 @@ import UIWindowEmailConfirmationRequired from './UIWindowEmailConfirmationRequir import UIWindowPhoneVerificationRequired from './UIWindowPhoneVerificationRequired.js'; import UIWindowCardVerificationRequired from './UIWindowCardVerificationRequired.js'; import UIWindowLogin from './UIWindowLogin.js'; +import { KNOWN_OIDC_PROVIDERS, OIDC_GENERIC_PROVIDER_ICON, humanizeOidcProviderId } from '../util/openid.js'; function UIWindowSignup(options) { options = options ?? {}; @@ -108,6 +109,7 @@ function UIWindowSignup(options) { h += ``; h += ``; h += ``; + h += ''; h += ''; // "Sign up with email" button, shown only when OIDC providers are available h += `