tradein/auth 1: Foundation — bcrypt, password.py, session-настройки config #2550

Closed
opened 2026-07-30 06:17:10 +00:00 by lekss361 · 0 comments
Owner

Часть эпика #2549 (шаг 1/8). Parallel-safe, без DB-зависимостей. Worker: backend-engineer.

Scope

  • tradein-mvp/backend/pyproject.toml: bcrypt>=4.2.0 + cd backend && uv lock (коммитить uv.lock, иначе worker crash on start).
  • app/core/config.py: session_secret: str, session_cookie_name (default tradein_session), session_ttl_hours (default 720), auth_mode: Literal["dual","db_only"] = "dual", login_rate_limit / login_rate_limit_window_s.
  • app/core/password.py (новый): hash_password() / verify_password(), bcrypt cost≥12.
  • tests/test_password.py: roundtrip hash→verify, неверный пароль отклонён, пароль >72 байт → явный ValueError (bcrypt тихо обрезает — не допускать silent truncation).

Что НЕ делать

Сессии/login-роуты/DB — это шаги 2-3. Только примитивы + config.

DoD: pytest зелёный, ruff/mypy чистые, diff ~100-150 строк.

Часть эпика #2549 (шаг 1/8). Parallel-safe, без DB-зависимостей. Worker: backend-engineer. ## Scope - `tradein-mvp/backend/pyproject.toml`: `bcrypt>=4.2.0` + `cd backend && uv lock` (коммитить uv.lock, иначе worker crash on start). - `app/core/config.py`: `session_secret: str`, `session_cookie_name` (default `tradein_session`), `session_ttl_hours` (default 720), `auth_mode: Literal["dual","db_only"] = "dual"`, `login_rate_limit` / `login_rate_limit_window_s`. - `app/core/password.py` (новый): `hash_password()` / `verify_password()`, bcrypt cost≥12. - `tests/test_password.py`: roundtrip hash→verify, неверный пароль отклонён, пароль >72 байт → явный ValueError (bcrypt тихо обрезает — не допускать silent truncation). ## Что НЕ делать Сессии/login-роуты/DB — это шаги 2-3. Только примитивы + config. DoD: pytest зелёный, ruff/mypy чистые, diff ~100-150 строк.
lekss361 added the
auth
scope/backend
status/ready
tradein
labels 2026-07-30 06:23:36 +00:00
lekss361 added
status/wip
and removed
status/ready
labels 2026-07-30 06:39:10 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2550
No description provided.