chore: восстановление репозитория из снапшота v0.3.1
Прежняя git-история утрачена при переносе проекта на машину владельца (снапшот без .git). Хэши коммитов в docs/reports/* относятся к утраченной истории. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
commit
1c85091186
184 changed files with 33303 additions and 0 deletions
47
docs/plans/plan-phase-8-1.md
Normal file
47
docs/plans/plan-phase-8-1.md
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
# План этапа 8.1 — регистрация отдельной страницей, восстановление пароля, капча
|
||||
|
||||
Дата: 2026-08-06. Статус: завершён (467/467 + smoke 58 OK). Предшественник: этап 8 завершён,
|
||||
main = 7da814c (461/461 + smoke OK). Решения владельца: своя автономная
|
||||
капча; OAuth — позже (дизайн docs/design/oauth-vk-yandex.md).
|
||||
|
||||
## Ключевые решения (не пере-решать)
|
||||
|
||||
1. Регистрация — ОТДЕЛЬНАЯ страница /register.html (не модалка): проще,
|
||||
доступнее (a11y), диплинкабельна. /account.html становится страницей
|
||||
входа со ссылками «Нет аккаунта? Зарегистрируйтесь» и «Забыли
|
||||
пароль?».
|
||||
2. Капча — автономная SVG (БЕЗ GD): glyph-повроты + шумовые кривые;
|
||||
код в сессии (sha256, 10 мин), одноразовая; только на регистрации
|
||||
(login прикрыт rate limit). SVG выбран вместо GD: GD не везде есть
|
||||
на хостингах, а локальный рантайм из deb — тем более.
|
||||
3. Восстановление — токен 1 час, sha256 в БД, request всегда 200 (нет
|
||||
enumeration), сбой mail() → 503; тестовый режим GOLEARN_TEST=1:
|
||||
письмо в файл, капча-код в заголовке X-Captcha-Debug.
|
||||
4. Параллельные ветки: stage-8-1-server (эндпоинты + миграция
|
||||
password_resets + smoke) и stage-8-1-web (страницы + строки);
|
||||
зоны не пересекаются. Мерж: server → web.
|
||||
|
||||
## Объём
|
||||
|
||||
- server/: api/captcha.php, api/password-reset/request.php,
|
||||
api/password-reset/confirm.php; register.php += captcha; миграция
|
||||
password_resets; config.example.php += base_url, mail_from;
|
||||
smoke.sh += сценарии капчи и восстановления.
|
||||
- apps/web: pages/register.html, pages/password-reset.html (два
|
||||
режима по query), правки account.astro (ссылки), sync-client.ts
|
||||
+= requestPasswordReset/confirmPasswordReset + captcha в register,
|
||||
strings.ts.
|
||||
- docs/deploy.md += шаги: проверка mail() (тестовое письмо), base_url
|
||||
в config.php.
|
||||
|
||||
## Приёмка
|
||||
|
||||
- npm run gates зелёные; smoke.sh (с новыми сценариями) зелёный
|
||||
локально; astro build PASS (18 страниц).
|
||||
|
||||
## Риски
|
||||
|
||||
- Доставляемость mail() с shared-хостинга (SPF/DKIM) — ручная проверка
|
||||
владельцем на деплое; риск в PROJECT_STATE.
|
||||
- SVG-капча слабее GD/сервисной к OCR-ботам — для учебного сайта
|
||||
приемлемо; при злоупотреблениях — Yandex SmartCaptcha через ADR.
|
||||
Loading…
Add table
Add a link
Reference in a new issue