Browsers cannot clear HTTP Basic credentials; logout never worked reliably.
Use Flask signed session + /login form + GET /logout + POST /api/logout.
Optional KASKAD_SECRET_KEY or auto /etc/kaskad/.session_secret.
Fetch API uses credentials: same-origin; 401 redirects to /login.
Docs + README updated.
Co-authored-by: Cursor <cursoragent@cursor.com>
- 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>