feat(webui): смена пароля и кнопка выхода

- POST /api/auth/password — смена пароля админа с проверкой текущего,
  атомарно переписывает /etc/kaskad/webui.env и hot-reload WEB_PASS
  в памяти (рестарт не нужен)
- GET  /api/auth/whoami   — текущий логин (показываем в шапке)
- GET  /api/logout        — 401 с уникальным realm → браузер сбрасывает
  кеш Basic Auth
- UI: кнопки 🔑 Пароль и ↪ Выход в шапке; модалка смены пароля
  с двойным вводом и автологаутом после успеха

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
andrey271192
2026-05-12 06:37:52 +03:00
parent f6514e9bba
commit 035534e4f2
3 changed files with 153 additions and 1 deletions

View File

@@ -115,6 +115,32 @@ form textarea { grid-column: span 2; }
z-index: 100;
}
header .spacer { flex: 1; }
[x-cloak] { display: none !important; }
.modal {
position: fixed; inset: 0;
background: rgba(0,0,0,0.65);
display: flex; align-items: center; justify-content: center;
z-index: 200;
}
.modal-body {
background: #161b22;
border: 1px solid #30363d;
border-radius: 8px;
padding: 24px;
width: min(420px, 92vw);
box-shadow: 0 12px 40px rgba(0,0,0,0.6);
}
.modal-body h2 { margin-top: 0; }
.modal-body form { display: grid; grid-template-columns: 1fr; gap: 10px; }
.modal-body form label { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: #8b949e; }
.modal-actions {
display: flex; gap: 8px; justify-content: flex-end;
margin-top: 8px;
}
footer {
margin-top: 60px; padding: 20px 0;
border-top: 1px solid #21262d;