v0.4.0
Changed
- BREAKING:
QUARK_ACCESS_LOGis gone. The per-request access log now comes
from tower-http'sTraceLayerand is emitted atDEBUG, so it is off under
the defaultinfofilter and turned on withRUST_LOG=tower_http=debug. A
deployment that still setsQUARK_ACCESS_LOGwill not fail, but it will no
longer produce an access log. The newQUARK_LOG_FORMAT=jsonswitches every
log event to one JSON object per line, which is what a log pipeline wants. - Errors are typed with
thiserroracross the crate, and logging goes through
tracinginstead ofeprintln!. Nothing about the HTTP contract changes:
handlers return the same statuses and the same short error bodies. - Signing keys are held in
secrecy::SecretBoxso they are zeroized on drop and
cannot be printed by accident. - Dependencies: axum 0.7 to 0.8, heed 0.20 to 0.22, redis 0.27 to 1.x, sqlx 0.8
to 0.9. No on-disk format, migration or wire format changes with them.
Fixed
- SSRF:
[::127.0.0.1]was accepted as a destination. The internal-address
check existed in two copies that had drifted apart, and the link-creation one
did not reject IPv4-compatible IPv6 addresses. There is now a single
is_internal_ipcovering IPv4-mapped and IPv4-compatible IPv6, CGNAT
(100.64/10),0.0.0.0/8, multicast and the documentation ranges. - The OIDC login
stateis compared in constant time. POST /admin/logoutuses the shared CSRF guard instead of its own header
check, so it accepts the same proofs every other state-changing endpoint does.- A dropped click event (analytics channel full) is counted and logged instead
of vanishing, so saturation is visible. The counter only runs on the drop
path, so a healthy redirect pays nothing for it. - OIDC configuration reads each required variable once and carries the value,
rather than validating the variable and reading it again.
Security
unsafe_code = "deny"and a clippy policy (unwrap_used,expect_used,
panic,await_holding_lock,let_underscore_future) are enforced in CI.
The 28 remainingexpect()insrc/each carry a written justification.
Imagem do container
docker pull ghcr.io/lucasolopes/quark:0.4.0
Plataformas: linux/amd64, linux/arm64.
Digest: sha256:4d05a89660c7192f064a240b71e7787a0b5d4974c81535b3a939da50c524ba94
Verifique a proveniencia do build:
gh attestation verify oci://ghcr.io/lucasolopes/quark:0.4.0 --repo lucasolopes/quark