Add alpha session gate with cookie auth and login UI.

This commit is contained in:
Leonid Pershin
2026-08-20 07:17:18 +03:00
parent 2a55a025f4
commit a444fc011e
24 changed files with 1005 additions and 27 deletions
+13 -13
View File
@@ -13,28 +13,28 @@
## Задачи
- [ ] `HSchool:AlphaPassword` в конфиге; пустая строка — процесс не стартует. В `appsettings.json`
- [x] `HSchool:AlphaPassword` в конфиге; пустая строка — процесс не стартует. В `appsettings.json`
заглушка для локальной игры; headless AppHost задаёт тестовый пароль окружением
- [ ] `POST /api/session` `{ password, userName }`: неверный пароль — `401` `bad-password`;
- [x] `POST /api/session` `{ password, userName }`: неверный пароль — `401` `bad-password`;
кривое имя — `400` `invalid-name` (те же правила, что у школы); имя с живым сокетом —
`409` `name-online`. Успех ставит HttpOnly-куку и при первом разе пишет имя в
`saves/users.json` (занятость без учёта регистра)
- [ ] `GET /api/session` — текущее имя или `401`. `DELETE /api/session` снимает куку
- [ ] Все игровые HTTP без куки — `401`. Живут без неё: `/health` и три ручки сессии
- [ ] WebSocket без куки не шлёт Welcome, закрывается. Hello по-прежнему версия + локаль
- [ ] Клиент: шаг пароля, шаг имени; при живой куке оба пропускаются. Сокет — после сессии.
- [x] `GET /api/session` — текущее имя или `401`. `DELETE /api/session` снимает куку
- [x] Все игровые HTTP без куки — `401`. Живут без неё: `/health` и три ручки сессии
- [x] WebSocket без куки не шлёт Welcome, закрывается. Hello по-прежнему версия + локаль
- [x] Клиент: шаг пароля, шаг имени; при живой куке оба пропускаются. Сокет — после сессии.
Кнопка выхода на меню
- [ ] Хостовые тесты логинятся в общем месте (`ResetAsync` или рядом), не в каждом факте
- [ ] `docs/protocol.md` — HTTP сессии в том же коммите. Раскладку сокета и версию не трогать
- [x] Хостовые тесты логинятся в общем месте (`ResetAsync` или рядом), не в каждом факте
- [x] `docs/protocol.md` — HTTP сессии в том же коммите. Раскладку сокета и версию не трогать
## Тесты, без которых фаза не закрыта
- [ ] Без сессии `GET /api/schools``401`; после `POST /api/session``200`
- [ ] Верный пароль и новое имя пишут `users.json`; повтор с тем же именем (другой регистр) —
- [x] Без сессии `GET /api/schools``401`; после `POST /api/session``200`
- [x] Верный пароль и новое имя пишут `users.json`; повтор с тем же именем (другой регистр) —
тот же человек, не вторая запись
- [ ] Пока сокет имени жив, второй `POST /api/session` с ним — `409` `name-online`
- [ ] Сокет без куки закрывается, Welcome не приходит
- [ ] Клиентский тест: без куки виден ввод пароля, не сетка школ
- [x] Пока сокет имени жив, второй `POST /api/session` с ним — `409` `name-online`
- [x] Сокет без куки закрывается, Welcome не приходит
- [x] Клиентский тест: без куки виден ввод пароля, не сетка школ
## Критерий готовности