Commit graph

4 commits

Author SHA1 Message Date
lekss361
82217b7edd refactor(security): убрать X-Admin-Token из 5 admin файлов (43 endpoints)
Caddy basic_auth (PR #426) даёт network-level защиту для всего /admin/*.
Двойная auth избыточна для pilot — app-level AdminTokenAuth dep удалён.

Что изменено:
- admin_scrape.py (24 endpoints), admin_cadastre.py (5), admin_jobs.py (3),
  admin_leads.py (6), admin_weight_profiles.py (5): удалён import AdminTokenAuth
  и параметр `_: AdminTokenAuth,` из каждой функции-handler'а
- backend/.env.example: SCRAPE_ADMIN_TOKEN помечен DEPRECATED с инструкцией rollback

Что НЕ менялось:
- core/deps.py: verify_admin_token + AdminTokenAuth остаются (dead code, rollback safety)
- frontend: заголовок X-Admin-Token продолжает слаться, backend игнорирует
- .env.runtime / settings: SCRAPE_ADMIN_TOKEN env var сохранён
2026-05-23 13:29:58 +03:00
lekss361
389fd31fad
refactor(admin): extract _check_token into shared AdminTokenAuth dep (#133)
Per audit batch #127 P2 hygiene (issue #128).

## Problem

Identical `_check_token` function в 3 admin files:
- backend/app/api/v1/admin_scrape.py:37-44
- backend/app/api/v1/admin_leads.py:26-33
- backend/app/api/v1/admin_jobs.py:24-31

## Fix

New `backend/app/core/deps.py` с `verify_admin_token` + Annotated alias:
```python
AdminTokenAuth = Annotated[None, Depends(verify_admin_token)]
```

Заменено в 27 endpoints (18 admin_scrape + 6 admin_leads + 3 admin_jobs):
- Removed local `_check_token` definitions
- `_: None = Depends(_check_token)` → `_: AdminTokenAuth`
- Removed unused imports (`Header`, `HTTPException`, `settings` где не используется)

## Semantics preserved

Все 3 original implementations были identical (503 if env missing + 401 if
mismatch, same header `X-Admin-Token`, same env `SCRAPE_ADMIN_TOKEN`).

Минор: 503 detail text unified to `"admin disabled — set SCRAPE_ADMIN_TOKEN"`
(в оригинале три разные строки — `"admin scrape disabled..."` etc).
Cosmetic — detail в HTTP 503 не парсится клиентским кодом.

## Tests

`uv run pytest tests/ -x -k admin` → 64/64 passed.

## Vault

`code/patterns/Pattern_Admin_Token_Dependency_May14.md` — created.

Closes #128
Refs: #127

Co-authored-by: lekss361 <claudestars@proton.me>
2026-05-14 23:45:44 +03:00
lekss361
d1f2380f32 fix(sqlalchemy): убрать :name::type — psycopg3 их не парсит, ломает Phase A INSERT в kn_scrape_runs (run_region_sweep крашится сразу с ProgrammingError, task_received записан, но run_id никогда не создаётся). 4 места: domrf_kn.py (resume INSERT, new run INSERT, snapshot UPDATE) + admin_leads.py (date_to filter). Заменено на CAST(:name AS type). 2026-04-28 23:37:03 +03:00
lekss361
5056438fcf add anal4 2026-04-27 19:45:47 +03:00