gendesign/backend/.env.example
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

33 lines
2 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Hostname-related defaults assume Docker Compose context (recommended).
# For native dev without Docker, swap "postgres" → "localhost" and "redis" → "localhost".
DATABASE_URL=postgresql+psycopg://gendesign:gendesign@postgres:5432/gendesign
REDIS_URL=redis://redis:6379/0
CORS_ORIGINS=["http://localhost:3000"]
ENVIRONMENT=dev
# DSN для GlitchTip (https://errors.gendsgn.ru). Пустое = SDK no-op.
# Формат: https://<key>@errors.gendsgn.ru/<project_id>
GLITCHTIP_DSN=
GLITCHTIP_TRACES_SAMPLE_RATE=0.05
# DEPRECATED — будет удалён после 1-2 deploy-циклов. Использовать GLITCHTIP_DSN.
# Если задан, а GLITCHTIP_DSN пуст — автоматически продвигается с DeprecationWarning.
SENTRY_DSN=
# External APIs (Stage 2)
ROSREESTR_PKK_BASE_URL=https://pkk.rosreestr.ru/api/features/1
OVERPASS_URL=https://overpass-api.de/api/interpreter
# ── Scraper наш.дом.рф (Celery beat + admin trigger) ──────────────────────
# Расписание автоматических прогонов (5-полевой crontab). По умолчанию пн 04:15 МСК.
SCRAPE_KN_CRON=15 4 * * mon
# Random delay 0..N сек перед стартом scheduled-таска (анти-pattern detection).
SCRAPE_KN_JITTER_SECONDS=1800
# Регионы по умолчанию для scheduled sweep-а (csv).
SCRAPE_KN_DEFAULT_REGIONS=66
# Путь к Playwright storage_state.json (commited в git, обновляется --save-state).
SCRAPE_KN_STATE_PATH=data/playwright_state.json
# SCRAPE_ADMIN_TOKEN удалён в #2775. App-level admin-auth сняли ещё в PR #437,
# а поле держали «для быстрого rollback» — за полтора месяца у него не появилось
# ни одного вызывающего. `/api/v1/admin/*` закрыт middleware rbac_guard
# (app/main.py, role != admin → 403) + Caddy basic_auth (PR #426).