mirror of
https://github.com/andrey271192/kaskad.git
synced 2026-09-20 13:49:56 +00:00
fix(webui): cookie session login/logout (replace Basic Auth)
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>
This commit is contained in:
@@ -15,7 +15,15 @@ Flask-приложение, бежит рядом с TG-ботом (на одн
|
||||
|
||||
## API
|
||||
|
||||
Все endpoint'ы под `/api/`, все требуют HTTP basic auth.
|
||||
Все endpoint'ы под `/api/` требуют **куки-сессии** (страница входа `/login`), не HTTP Basic — иначе в браузере нельзя сделать надёжный «выход».
|
||||
|
||||
Из скрипта / curl — сначала POST на `/login` (как форма), потом запросы с сохранённой кукой:
|
||||
|
||||
```bash
|
||||
curl -c jar.txt -b jar.txt -X POST 'http://127.0.0.1:8088/login' \
|
||||
-d 'username=admin&password=ВАШ_ПАРОЛЬ&next=/'
|
||||
curl -b jar.txt 'http://127.0.0.1:8088/api/state' | jq .
|
||||
```
|
||||
|
||||
| Метод | Путь | Тело | Описание |
|
||||
|---|---|---|---|
|
||||
@@ -32,15 +40,9 @@ Flask-приложение, бежит рядом с TG-ботом (на одн
|
||||
| DELETE | `/api/ips` | то же | Удалить |
|
||||
| POST | `/api/ips/clear` | — | Очистить все доп. IP |
|
||||
|
||||
Пример:
|
||||
```bash
|
||||
curl -u admin:PASS https://your-host/api/state | jq
|
||||
curl -u admin:PASS -X POST https://your-host/api/use -d '{"id":"primary"}' -H 'Content-Type: application/json'
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
- Basic auth обязателен. `KASKAD_WEB_PASS` должен быть длинным и случайным (см. `webui.env.example`)
|
||||
- Вход — форма `/login` + подписанная **cookie-сессия** (ключ `KASKAD_SECRET_KEY` или файл `/etc/kaskad/.session_secret`). Пароль админа — `KASKAD_WEB_PASS`, должен быть длинным и случайным.
|
||||
- По умолчанию слушает на `0.0.0.0:8088`. **Рекомендуется** поставить за HTTPS reverse-proxy (nginx/caddy) с Let's Encrypt
|
||||
- Если хочется привязать только к localhost — `KASKAD_HOST=127.0.0.1` и пользоваться через SSH-туннель: `ssh -L 8088:localhost:8088 root@ams1`
|
||||
- Пароли SSH (`password=` при `/server-add`, `/ams-add`) передаются по HTTPS только если веб за reverse-proxy. Без HTTPS не передавай пароли через WebUI — используй ключи (см. `/bot-key`)
|
||||
@@ -49,8 +51,9 @@ curl -u admin:PASS -X POST https://your-host/api/use -d '{"id":"primary"}' -H 'C
|
||||
|
||||
| Переменная | Дефолт | Описание |
|
||||
|---|---|---|
|
||||
| `KASKAD_WEB_USER` | `admin` | Логин для basic auth |
|
||||
| `KASKAD_WEB_USER` | `admin` | Логин для входа в WebUI |
|
||||
| `KASKAD_WEB_PASS` | (нет) | Пароль; ОБЯЗАТЕЛЬНО задать |
|
||||
| `KASKAD_SECRET_KEY` | (файл) | Секрет подписи сессии; иначе создаётся `/etc/kaskad/.session_secret` |
|
||||
| `LOCAL_HOST` | `ams1` | Имя локального ам. сервера |
|
||||
| `LOCAL_IP` | `127.0.0.1` | Локальный IP — определяет, какой ам. читать локально без SSH |
|
||||
| `KASKAD_HOST` | `0.0.0.0` | Адрес для bind |
|
||||
|
||||
Reference in New Issue
Block a user