From 5ec1ddec6b0c9856d7991086b10c664a79c035bb Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 9 Apr 2026 02:43:23 +0200 Subject: [PATCH] Replace all browser dialogs with modern modal, add OIDC admin UI - Add reusable showConfirm() modal component (supports plain confirm, input prompt, danger styling, Enter key) - Replace ALL 18 confirm() and prompt() calls across 8 JS files with showConfirm() modal: admin user actions, session revoke, document delete, template delete, milestone management, transcription settings - Fix broken admin reset-password (btn was undefined in scope) - Add OIDC/SSO configuration UI to Admin Panel (issuer, client ID/secret, button label, disable local auth toggle, callback URL display) --- public/components/admin.html | 42 +++++ public/css/styles.css | 5 + public/index.html | 14 ++ public/js/admin.js | 246 ++++++++++++++++++----------- public/js/adminMilestones.js | 44 +++--- public/js/app.js | 55 +++++++ public/js/auth.js | 28 ++-- public/js/documents.js | 17 +- public/js/memories.js | 17 +- public/js/transcriptionSettings.js | 41 ++--- 10 files changed, 344 insertions(+), 165 deletions(-) diff --git a/public/components/admin.html b/public/components/admin.html index 01d2aff..41ee921 100644 --- a/public/components/admin.html +++ b/public/components/admin.html @@ -91,6 +91,48 @@ + +
+

Single Sign-On (OIDC)

+
+

Configure OpenID Connect for SSO with Azure AD, Okta, Keycloak, PocketID, Google, etc.
Callback URL:

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+

Email Templates

diff --git a/public/css/styles.css b/public/css/styles.css index 057a837..fcc28f2 100644 --- a/public/css/styles.css +++ b/public/css/styles.css @@ -237,6 +237,11 @@ textarea.full-input{resize:vertical;} .spinner{width:32px;height:32px;border:4px solid var(--g200);border-top-color:var(--blue);border-radius:50%;animation:spin 0.7s linear infinite;margin:0 auto 12px;} @keyframes spin{to{transform:rotate(360deg);}} .loading-box p{color:var(--g600);font-weight:500;font-size:13px;} +.confirm-modal{position:fixed;inset:0;background:rgba(0,0,0,0.35);display:flex;align-items:center;justify-content:center;z-index:10000;backdrop-filter:blur(2px);} +.confirm-modal.hidden{display:none;} +.confirm-modal-box{background:white;padding:24px;border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,0.15);max-width:420px;width:90%;animation:modalIn 0.15s ease;} +.confirm-modal-box p{margin:0;font-size:14px;line-height:1.6;color:var(--g800);} +@keyframes modalIn{from{opacity:0;transform:scale(0.95)} to{opacity:1;transform:scale(1)}} /* FAQ */ .faq-container{max-width:800px;margin:0 auto;} diff --git a/public/index.html b/public/index.html index 3a39f7f..89eba52 100644 --- a/public/index.html +++ b/public/index.html @@ -280,6 +280,20 @@
+ + +