Trade-off: Immediate transcription vs. privacy. For maximum privacy, use Browser Whisper (offline batch mode) or Server transcription with HIPAA-eligible provider.
-
-
+
+
Change Password
@@ -104,8 +104,8 @@
-
-
+
+
Two-Factor Authentication
Status: Loading...
diff --git a/public/js/auth.js b/public/js/auth.js
index 7d21d30..49099db 100644
--- a/public/js/auth.js
+++ b/public/js/auth.js
@@ -733,19 +733,16 @@ document.addEventListener('DOMContentLoaded', function() {
.then(function(r) { return r.json(); })
.then(function(data) {
if (!data || !data.user) return;
- // Hide password-change + 2FA sections entirely for SSO-only users.
- // Their auth is owned by the IdP — changing a random-blob "password"
- // or adding TOTP here has no effect on how they sign in.
+ // Sections are display:none by default in the HTML. Only reveal them
+ // if the server confirms this user has a real password hash
+ // (canLocalAuth === true). SSO-auto-created users never see these UIs.
var pwSection = document.getElementById('change-password-section');
var twofaSection = document.getElementById('2fa-section');
- if (data.user.canLocalAuth === false) {
- if (pwSection) pwSection.style.display = 'none';
- if (twofaSection) twofaSection.style.display = 'none';
- return; // Nothing more to load for SSO-only users
- } else {
- if (pwSection) pwSection.style.display = '';
- if (twofaSection) twofaSection.style.display = '';
+ if (data.user.canLocalAuth !== true) {
+ return; // Stay hidden — nothing more to load for SSO-only users
}
+ if (pwSection) pwSection.style.display = '';
+ if (twofaSection) twofaSection.style.display = '';
var status = document.getElementById('2fa-status');
var setupBtn = document.getElementById('btn-setup-2fa');
var disableBtn = document.getElementById('btn-disable-2fa');