diff --git a/app/static/admin.html b/app/static/admin.html index 104bee3..992a223 100644 --- a/app/static/admin.html +++ b/app/static/admin.html @@ -84,6 +84,26 @@ .hidden { display: none !important; } + table { width: 100%; border-collapse: collapse; font-size: 0.85rem; } + th, td { text-align: left; padding: 8px 6px; border-bottom: 1px solid var(--color-border); vertical-align: top; } + th { color: var(--color-muted-foreground); font-weight: 500; } + td.addr { font-family: 'Fira Code', monospace; word-break: break-all; max-width: 160px; } + + button.reveal { + width: auto; margin-top: 0; padding: 4px 10px; min-height: 30px; font-size: 0.78rem; + background: var(--color-destructive-bg); color: var(--color-destructive); border: 1px solid var(--color-destructive); + } + + .privkey-box { + margin-top: 6px; padding: 8px; border-radius: 6px; font-size: 0.78rem; + background: var(--color-destructive-bg); border: 1px solid var(--color-destructive); + word-break: break-all; font-family: 'Fira Code', monospace; color: var(--color-foreground); + } + .warning-banner { + background: var(--color-destructive-bg); border: 1px solid var(--color-destructive); color: var(--color-destructive); + border-radius: 8px; padding: 10px 12px; font-size: 0.8rem; margin-bottom: 14px; font-weight: 500; + } + #toast-container { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; gap: 8px; z-index: 100; width: calc(100% - 40px); max-width: 440px; @@ -129,6 +149,26 @@ +
+

Utenti

+

Elenco utenti registrati, con saldo interno e accesso alla chiave privata per interventi manuali (es. restituire fondi bloccati).

+ +
+ ⚠ La chiave privata dà accesso completo ai fondi dell'utente. Ogni volta che la visualizzi viene registrata nell'audit log del server. Non condividerla, non salvarla altrove. +
+ + + + +
+
diff --git a/app/static/index.html b/app/static/index.html index 5042621..2caece6 100644 --- a/app/static/index.html +++ b/app/static/index.html @@ -185,6 +185,8 @@ + + @@ -391,6 +393,11 @@ async function register() { const btn = document.getElementById('register-btn'); const u = document.getElementById('reg-username').value; const p = document.getElementById('reg-password').value; + const pConfirm = document.getElementById('reg-password-confirm').value; + if (p !== pConfirm) { + toast('Le password non coincidono.', 'error'); + return; + } await withLoading(btn, 'Creazione…', async () => { try { const data = await call('POST', '/auth/register', { username: u, password: p });