fix(tradein/security): admin.py — generic detail + error-id вместо сырого текста исключений (#2234) #2261

Merged
lekss361 merged 2 commits from fix/tradein-admin-exception-leak into main 2026-07-03 06:27:23 +00:00
Owner

Summary

  • Единый хелпер _safe_http_error(status_code, public_detail, log_context): короткий error-id (uuid4().hex[:8]), полный traceback — только в logger.exception (→ GlitchTip), в HTTP — generic detail вида "fetch failed (error-id: abc12345)".
  • Заменены все 8 мест detail=f"...: {e}" (бывшие строки 551/557/580/586/629/669/672/679) — psycopg/httpx-исключения с DSN-фрагментами/внутренними хостами больше не утекают в ответы. Статус-коды сохранены 1:1 (502/500/404), контекст логирования (house_url/item_url/run_id/address) сохранён.
  • Broad-scan остального admin.py: других мест с exception-текстом в detail нет (проверено ревьюером).
  • По minor ревьюера: ветка IMVAddressNotFoundError (404, ожидаемое клиентское условие) логируется logger.warning без traceback — не создаёт exception-шум в GlitchTip.
  • Тест: exception с «секретным» DSN (postgres://user:SECRETPASS@...) → 502, в теле ответа нет секрета, есть error-id.

Как проверено

  • Полный uv run pytest (deselect только test_search_cache_hit): 3021 passed, 6 skipped; после minor-правки tests/test_scraper_admin_apis.py — 22 passed.
  • code-reviewer: APPROVE (все 8 вызовов в except-контексте верифицированы, raise ... from e, статус-коды сверены построчно).

Closes #2234

## Summary - Единый хелпер `_safe_http_error(status_code, public_detail, log_context)`: короткий error-id (`uuid4().hex[:8]`), полный traceback — только в `logger.exception` (→ GlitchTip), в HTTP — generic detail вида `"fetch failed (error-id: abc12345)"`. - Заменены все 8 мест `detail=f"...: {e}"` (бывшие строки 551/557/580/586/629/669/672/679) — psycopg/httpx-исключения с DSN-фрагментами/внутренними хостами больше не утекают в ответы. Статус-коды сохранены 1:1 (502/500/404), контекст логирования (house_url/item_url/run_id/address) сохранён. - Broad-scan остального admin.py: других мест с exception-текстом в detail нет (проверено ревьюером). - По minor ревьюера: ветка `IMVAddressNotFoundError` (404, ожидаемое клиентское условие) логируется `logger.warning` без traceback — не создаёт exception-шум в GlitchTip. - Тест: exception с «секретным» DSN (`postgres://user:SECRETPASS@...`) → 502, в теле ответа нет секрета, есть error-id. ## Как проверено - Полный `uv run pytest` (deselect только `test_search_cache_hit`): **3021 passed, 6 skipped**; после minor-правки `tests/test_scraper_admin_apis.py` — 22 passed. - code-reviewer: ✅ APPROVE (все 8 вызовов в except-контексте верифицированы, `raise ... from e`, статус-коды сверены построчно). Closes #2234
lekss361 added 2 commits 2026-07-03 06:22:07 +00:00
fix(tradein/security): 404 IMV-адрес — warning без traceback, не exception-шум (#2234)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 13s
CI / changes (pull_request) Successful in 14s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 2m25s
efa0bafa18
lekss361 merged commit 5f6db8dbb7 into main 2026-07-03 06:27:23 +00:00
lekss361 deleted branch fix/tradein-admin-exception-leak 2026-07-03 06:27:23 +00:00
Sign in to join this conversation.
No reviewers
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#2261
No description provided.