diff --git a/app/sovran_systemsos_web/static/css/security.css b/app/sovran_systemsos_web/static/css/security.css index 7f8448c..ead06e8 100644 --- a/app/sovran_systemsos_web/static/css/security.css +++ b/app/sovran_systemsos_web/static/css/security.css @@ -215,6 +215,33 @@ min-width: 70px; } +/* ── Security Reset full-screen overlay ──────────────────────────── */ + +.security-reset-overlay { + display: none; + position: fixed; + inset: 0; + background-color: rgba(15, 15, 25, 0.94); + z-index: 1000; + align-items: center; + justify-content: center; + animation: security-reset-fade-in 0.35s ease-out; +} + +.security-reset-overlay.visible { + display: flex; +} + +@keyframes security-reset-fade-in { + from { opacity: 0; } + to { opacity: 1; } +} + +.security-reset-overlay-icon { + font-size: 3rem; + margin-bottom: 16px; +} + /* ── First-login security banner ─────────────────────────────────── */ .security-first-login-banner { diff --git a/app/sovran_systemsos_web/static/js/security.js b/app/sovran_systemsos_web/static/js/security.js index 3f357ad..13cac7c 100644 --- a/app/sovran_systemsos_web/static/js/security.js +++ b/app/sovran_systemsos_web/static/js/security.js @@ -119,12 +119,22 @@ function openSecurityModal() { if (!eraseInput || eraseInput.value.trim() !== "ERASE") return; resetConfirmBtn.disabled = true; resetConfirmBtn.textContent = "Erasing\u2026"; + + // Show the full-screen blocking overlay immediately so the user knows + // the wipe is in progress even while the API call runs synchronously. + var $secResetOverlay = document.getElementById("security-reset-overlay"); + var $secResetStep = document.getElementById("security-reset-overlay-step"); + if ($secResetOverlay) $secResetOverlay.classList.add("visible"); + if (resetStatus) { resetStatus.textContent = "Running security reset\u2026"; resetStatus.className = "security-status-msg security-status-info"; } try { await apiFetch("/api/security/reset", { method: "POST" }); + if ($secResetStep) $secResetStep.textContent = "Reset complete. Rebooting now\u2026"; if (resetStatus) { resetStatus.textContent = "\u2713 Reset complete. Rebooting\u2026"; resetStatus.className = "security-status-msg security-status-ok"; } - if ($rebootOverlay) $rebootOverlay.classList.add("open"); + if ($rebootOverlay) $rebootOverlay.classList.add("visible"); + setTimeout(waitForServerReboot, REBOOT_CHECK_INTERVAL); } catch (err) { + if ($secResetOverlay) $secResetOverlay.classList.remove("visible"); if (resetStatus) { resetStatus.textContent = "\u2717 Error: " + (err.message || "Reset failed."); resetStatus.className = "security-status-msg security-status-error"; } resetConfirmBtn.disabled = false; resetConfirmBtn.textContent = "Erase & Reset"; diff --git a/app/sovran_systemsos_web/templates/index.html b/app/sovran_systemsos_web/templates/index.html index fb51b38..907e2cc 100644 --- a/app/sovran_systemsos_web/templates/index.html +++ b/app/sovran_systemsos_web/templates/index.html @@ -210,6 +210,25 @@ + +
+
+
🛡
+

Security Reset In Progress

+

+ ⚠️ Wiping all data and credentials.
+ Do not power off your computer.
+ This may take several minutes. The system will reboot automatically when complete. +

+
+ + + +
+

Erasing data and resetting credentials…

+
+
+