fix(tradein/admin): развести исходы проверки кук — бан не равен «плохим кукам» #2829
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2829
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/tradein-cookerr"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
cian_session.verify_sessionвозвращает четыре разных исхода — это сделано намеренно, с sentinel-объектами и подробными докстрингами:VERIFY_BAN_SENTINEL— HTTP 403, бан по IP/TLS, куки могут быть валидныVERIFY_SOURCE_UNAVAILABLE_SENTINEL— 5xx/сеть, источник недоступенVERIFY_MARKUP_CHANGED_SENTINEL— 200, но auth-state не распарсилсяNone— 401 /isAuthenticated=false, куки реально протухлиА эндпоинты в
admin.pyпроверяли толькоif state is Noneи сразу лезли вstate.get("user", {}).get("userId"). Все три sentinel'а проваливались в одну ветку и отдавали400 "Authenticated state missing userId".На проде 2026-08-10 это стоило часа диагностики на живом инциденте: реальный бан по IP показывался как «плохие куки», и заведомо валидные куки перезаливались несколько раз. Настоящей причиной был забаненный egress.
Summary
SCRAPER_PROXY_URLи баны вscrape_proxy_source_bans; перезаливать куки бесполезноextract_state/_MFE_AUTH), перезалив не поможетNoneuserIdis, как прямо оговорено в их докстрингах._cian_verify_state_error(), используется вupload_cian_cookies,cian_auto_loginиtest_cian_auth.SCRAPER_PROXY_URLи явно помечаетCIAN_PROXY_URLкак мёртвую (снята в #2616) — именно эта мёртвая переменная увела диагностику в сторону. На это есть отдельный assert в тесте.Не вошло
upload_domclick_cookiesне вызываетverify_sessionвообще — это задокументированный предел MVP («DomClick-верификация требует реального browser-фетча»), а не тот же баг. Фабриковать несуществующий verify-путь не стали.Test plan
ruff check/ruff format— чисто, pre-commit зелёныйtest-auth