Доделка PR #437 (refactor: убрать X-Admin-Token UI / middleware). require_admin
Depends остался в admin.py — блокировал /admin/scrape/* возвратом 401 для всех
запросов без X-Admin-Token. Frontend /scrapers/avito (PR #472) не шлёт header
(полагается на Caddy basic_auth gate), → 'Invalid or missing X-Admin-Token'.
Изменения:
- admin.py: удалена функция require_admin + 7 Depends() в endpoint decorators
(/scrape, /geocode-missing, /scrape/cian/upload-cookies, /scrape/cian/test-auth,
/scrape/avito-house, /scrape/avito-detail, /scrape/avito-imv)
- config.py: удалено settings.admin_token field
- cron-scrape.sh: удалён ADMIN_HDR + X-Admin-Token из всех curl
- upload-cian-cookies.sh: удалён TRADEIN_ADMIN_TOKEN loading + header
Auth contract: Caddy basic_auth gate'ит /trade-in/api/v1/admin/* (через handle_path
конфиг). Application layer — open после Caddy unwrap. ADMIN_TOKEN env переменная
больше не используется backend'ом, но её можно держать в .env.runtime как
dead reference (без последствий).
Подключаем tradein-backend к GlitchTip (Sentry-совместимый, уже на
сервере). Необработанные исключения FastAPI улетают в дашборд —
баг estimate-500 (#388/#389) был бы виден сразу с трейсбеком.
- sentry-sdk в зависимостях.
- main.py — sentry_sdk.init(), env-gated: пусто GLITCHTIP_DSN → off.
- config.glitchtip_dsn + GLITCHTIP_DSN в docker-compose.prod.yml.
- traces_sample_rate=0 (только ошибки), send_default_pii=False.
Активация: создать проект в GlitchTip → DSN в .env.runtime.