PR #306 · pramaan-io/pramaan-functions · merged 2026-06-11
One request, two loggers — and the redirect walks past the audit trail with sensitive values intact.
Why redirect logging must merge into the request-completion middleware.
Two notebooks, one story — no guarantee both write the same line.
The fix — One logger, one redaction pass, one audit trail.
sequenceDiagram autonumber participant client as Request participant mw as RequestCompletionLogMiddleware participant resp as Response client->>mw: request arrives mw->>mw: stamp completion entry mw->>mw: is redirect? → branch mw->>mw: redact URL + capture redirect fields mw->>resp: response
| Method | in → out | what it does |
|---|---|---|
_is_sensitive_query_key | (key) → bool | |
_redact_sensitive_query_values | (url) → str | None | |
_redirect_reason | (response) → str | None |
The request-completion log middleware gains four helpers that detect, redact, and capture redirect-specific fields, absorbing the role of the deleted redirect logger.
| new method | signature |
|---|---|
_is_sensitive_query_key | (key) → bool |
_redact_sensitive_query_values | (url) → str | None |
_redirect_reason | (response) → str | None |
_redirect_fields | (request, response) → dict[str, Any] |