Repository navigation
fix(api): log why the login captcha rejected a request - #8
Conversation
verifyCaptcha returned a bare reason and logged nothing, so a refused login left no trace in `docker logs`. Log one `[captcha] rejected reason=...` line per refusal with a safe summary of the provider response (status, success, human, band, error fields, validation error type/location, response keys) and the provider round-trip time. The raw provider body is never logged: on a 422 it echoes the submitted data (`detail[].input`), i.e. the one-time token. The token and secret are not logged anywhere. Non-JSON error bodies (proxy HTML) no longer throw. Verified with a mocked fetch over all paths (no token, 409, 422 with echoed token, success=false, human=false, 502 non-JSON, network error, success) and asserting neither the token nor the secret appears in any log line. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
Что сделано
verifyCaptchaтеперь пишет в лог одну строку[captcha] rejected reason=...на каждый отказ: причина, статус и безопасная выжимка ответа Aptogon (success,human,band,error, тип и место ошибки валидации, список ключей ответа) и время ответа провайдера. Раньше отказ входа не оставлял следов вdocker logs, поэтому нельзя было отличить «капча сломана» от «отбит бот».Заодно ответ провайдера с не-JSON телом (HTML ошибки прокси) больше не ломает проверку.
В
CLAUDE.mdдобавлена команда для чтения этих строк и расшифровка причин.Как проверено
Прогнал
verifyCaptchaна подставных ответахfetchпо всем путям: нет токена, 409, 422 с эхом токена,success=false,human=false, 502 без JSON, сетевая ошибка и успех. На каждой строке лога проверено, что в ней нет ни токена, ни секрета.tsc --noEmitбез ошибок.Важно
Сырое тело ответа не логируется намеренно: при ошибке валидации (422) провайдер возвращает присланные данные, то есть одноразовый токен.
Что осталось
sudo docker compose up -d --build apiпосле merge.[captcha] rejectedстанет понятно, что происходит.🤖 Generated with Claude Code
Summary by CodeRabbit