Files
transcriber/tasks/items/response-code-in-journal.md
T
av 91138dd39a точки входа переехали в cmd/, заведена заглушка OIDC для локального входа
- main.go и journal_route_test.go переехали в cmd/transcriber без правок
  содержимого; образ собирает ./cmd/transcriber поимённо
- cmd/oidcstub отвечает на /authorize, /token и /userinfo, проверок не делает
  и слушает петлевой адрес: войти без Authelia стало чем
- ступень сборки приложения переехала на node:24 с alpine — musl ждёт ответа
  на AAAA, которого нет, и npm ci висел вместо отказа
2026-08-15 20:15:57 +03:00

3.8 KiB

🐞 Писать в журнал код ответа отвергнутого запроса

  • Тип: fix
  • Категория: Очередь — Заведена урожаем ревью и встала в конец машинально: место в плане стройки назначает человек.
  • Зачем: У всякого запроса, отвергнутого роутером, в журнале стоит нулевой код: всплеск отказов доступа неотличим от обычного трафика.
  • Теги: review-2026-08-15

Код ответа в журнале называет исход запроса, а не ноль.

Обработчик, завершившийся отказом роутера — 401 без сессии, 403 без учётной записи, 404 на чужой записи, 500 на сбое, — пишет статус в ответ после возврата из слоя журнала. Слой читает его раньше и получает ноль. Верное значение попадает в журнал только у обработчиков, отвечающих самостоятельно.

Разграничение записей по владельцу устроено так, что чужая запись отвечает тем же, чем несуществующая. Единственное место, где виден перебор идентификаторов, — журнал; а именно эти строки и приезжают с нулём.

Воспроизведение

Поднять сервис и послать четыре запроса подряд:

/auth/login  → 302   ... http.route=/auth/login  http.status_code=302
/app/audiorecords → 404 ... http.route=/app/audiorecords  http.status_code=0
/nope        → 404   ... http.route=/nope        http.status_code=0
POST /app/audiorecords без сессии → 401 ... http.status_code=0

Первый обработчик отвечает сам и код пишет верно; три остальных отвергнуты роутером и дают ноль.

Прогон снят до того, как приложение переехало из /api/ в /app/ решением владельца 2026-08-15: тогда те же строки стояли с адресом /api/audio. Предмет находки от переезда не зависит — ноль пишет роутер, а не обработчик, — и воспроизводится она с любым адресом, который роутер отверг.

Затрагивает

  • слой журнала запроса в cmd/transcriber: место, где снимается код ответа;
  • docs/conventions/logging.md — словарь полей запроса.

Критерии приёмки

  • Отвергнутый запрос пишет в журнал свой код. Оракул: те же четыре запроса — 401, 403, 404 и 500 приезжают в поле кода, ноля в нём нет ни у одного.
  • Обработчик, отвечающий самостоятельно, продолжает писать свой код. Оракул: запрос входа по-прежнему даёт 302.

Рамки

Найдено прогоном ревью задачи remove-telegram-intake 2026-08-15, враждебный проход, оракул — живой прогон. Дефект существовал до той правки: изменение этот слой не трогало. Метрики кодов ответа у сервиса нет вовсе, и заводить её этой задачей не надо — она про журнал.