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>
fetch()+manual Authorization is ignored when browser has cached HTTP auth.
Use XMLHttpRequest.open(user,password) with random bogus pair, then
location.replace('/') so login prompts again. Add Cache-Control on 401.
Header buttons: type=button, @click.prevent on logout.
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>