mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
The deploy-status webhook authenticated with a static secret in a header, and the timestamp the docs called replay protection was covered by nothing: whoever captures one request holds the secret and can send a fresh request with any content. The strict setting, documented as closing the replay window completely, only made that timestamp mandatory. A sender can now sign instead: X-Deploy-Webhook-Signature is the HMAC-SHA256 of the timestamp and the exact body under the shared secret, with the timestamp within five minutes, and the secret never travels. The strict setting accepts only signed requests. The secret header still works by default for senders that cannot sign, and the docs describe its timestamp as the staleness hint it is.