<%= t('settings.totpEnableHint') || 'Подтвердите текущий пароль, затем подключите новое устройство по QR-коду.' %>
+
+ <% } else { %>
+
<%= t('settings.totpProtectedHint') || 'Для отключения или перевыпуска нужно подтвердить текущий пароль и текущий TOTP-код.' %>
+
+
+
+
+
+
+
+
+
+ <% } %>
+
+
+
@@ -1135,8 +1207,9 @@ document.querySelectorAll('.settings-tab').forEach(tab => {
});
});
-// Restore tab from localStorage
-const savedTab = localStorage.getItem('settings-tab');
+// Restore tab from query string or localStorage
+const queryTab = new URLSearchParams(window.location.search).get('tab');
+const savedTab = queryTab || localStorage.getItem('settings-tab');
if (savedTab) {
const tab = document.querySelector(`.settings-tab[data-tab="${savedTab}"]`);
if (tab) tab.click();
@@ -1515,4 +1588,4 @@ async function submitMcpKey(e) {
btn.textContent = '<%= t("mcp.createKeyBtn") || "Create Key" %>';
}
}
-
+
\ No newline at end of file
diff --git a/views/setup.ejs b/views/setup.ejs
index c2a6b84..113280b 100644
--- a/views/setup.ejs
+++ b/views/setup.ejs
@@ -45,6 +45,16 @@
placeholder="<%= typeof t !== 'undefined' ? t('setup.repeatPassword') : 'Repeat password' %>"
minlength="6" required>
+
+
+ <%= typeof t !== 'undefined' ? t('setup.enableTotpHint') : 'After account creation you will need to confirm setup in an authenticator app.' %>
+
+
+ <%= typeof t !== 'undefined' ? t('setup.noRecoveryWarning') : 'Version 1 has no self-service recovery. Save the secret in a safe place.' %>
+