gendesign/docs
bot-backend 163bacb7be
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m11s
CI / backend-tests (pull_request) Successful in 15m33s
refactor(security): убрать мёртвую проверку админского токена (#2775)
`verify_admin_token` / `AdminTokenAuth` в `backend/app/core/deps.py` не имели
НИ ОДНОГО вызывающего. Проверено разбором AST по всему репозиторию (Name /
Attribute / ImportFrom / строковые константы — формы, которые текстовый grep
не ловит): оба имени встречаются ровно в одном месте — в собственном
объявлении, строка 23 самого deps.py. Больше нигде.

Поведение сняли в PR #437 (заголовок X-Admin-Token убран со всех admin_*.py),
UI ввода токена — в PR #442. Поле держали «для быстрого rollback» полтора
месяца. Rollback это всё равно не ускоряло: dep нигде не проставлен, вернуть
его = править все admin_*.py, ровно как и было бы без сохранённого поля.

Что реально закрывает `/api/v1/admin/*` — два живых слоя:
  1. middleware `rbac_guard` (app/main.py): `_ADMIN_API_RE` → 403 `admin only`
     при role != admin. Покрыт tests/test_rbac.py — 24 теста, все зелёные.
  2. Caddy basic_auth на весь gendsgn.ru (PR #426).

Удалено:
  • backend/app/core/deps.py целиком (в файле не было ничего, кроме этого
    хелпера; импортеров модуля тоже нет);
  • `scrape_admin_token` из Settings — его единственным читателем был
    удалённый хелпер;
  • SCRAPE_ADMIN_TOKEN из .env.example. Прод-.env править не обязательно:
    `model_config` = `extra="ignore"`, лишняя переменная безвредна;
  • остатки в тестах: 10 декораторов `@patch(...scrape_admin_token)` и 25
    `headers=ADMIN_HEADERS` — заголовок отправлялся во все admin-запросы и
    никем не читался.

Попутно исправлены ДВА докстринга, обещавшие покрытие, которого нет:
test_admin_weight_profiles.py («401 при отсутствии X-Admin-Token») и
test_admin_ekburg_permits.py («отсутствие X-Admin-Token → 401/503»).
Соответствующего теста нет ни в одном из файлов — ни сейчас, ни до этого
коммита. Теперь докстринги указывают на tests/test_rbac.py, где проверка
действительно есть.

Верификация: полный сьют backend без tests/smoke — 4610 passed, 48 skipped,
0 failed (12м38с). Целевые файлы отдельно: 51 passed (24 rbac + 27 admin).

Closes #2775
2026-08-07 13:53:05 +05:00
..
runbooks fix(security): log_credentials + auth_audit.log → username из 401 (#436) 2026-05-23 09:59:50 +00:00
MVP_Goals_Python.md Initial commit: Discovery MVP docs (v2.1 + v2.2) 2026-04-25 08:40:09 +03:00
obsidian-livesync.md fix(devops): переносим deploy-obsidian.yml в .forgejo/workflows/ (#2416) (#2439) 2026-07-05 15:34:55 +00:00
osrm-routing.md feat(analyze): per-category OSRM routing (foot vs driving) (#39 A3) 2026-06-27 04:30:25 +05:00
Performance_Audit.md perf(db): covering-index objective_lots district-price (#70) + 152-ФЗ/perf audit docs (#70 #79) 2026-06-14 00:09:09 +05:00
PII_152FZ_Audit.md perf(db): covering-index objective_lots district-price (#70) + 152-ФЗ/perf audit docs (#70 #79) 2026-06-14 00:09:09 +05:00
PILOT_ACCESS.md fix(ops): repair broken main-DB backup + harden auth scripts/docs (#71 #427 #429 #428) 2026-06-13 20:13:04 +05:00
Schema_Migrations_vs_Alembic.md feat(admin): freshness endpoint (#73) + README Forgejo refresh (#83) + migrations doc (#72) 2026-06-13 18:25:32 +00:00
Secrets_Rotation_Policy.md refactor(security): убрать мёртвую проверку админского токена (#2775) 2026-08-07 13:53:05 +05:00
Бизнес-план v2.1 - Site Finder + Roadmap 12 месяцев.md Initial commit: Discovery MVP docs (v2.1 + v2.2) 2026-04-25 08:40:09 +03:00