From 43a2cd784bc1bb4b63827082ef42213d1df1509b Mon Sep 17 00:00:00 2001 From: Aleksandr Soloshenko Date: Tue, 25 Aug 2026 11:02:03 +0700 Subject: [PATCH] [webhooks] signature header fallback --- internal/server/docs/docs.go | 7 +++++++ internal/server/webhooks/handler.go | 15 ++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/internal/server/docs/docs.go b/internal/server/docs/docs.go index ac6a08f..9e80558 100644 --- a/internal/server/docs/docs.go +++ b/internal/server/docs/docs.go @@ -1942,6 +1942,13 @@ const docTemplate = `{ "schema": { "$ref": "#/definitions/webhooks.PushEvent" } + }, + { + "type": "string", + "description": "BitBucket signature header", + "name": "X-Hub-Signature", + "in": "header", + "required": true } ], "responses": { diff --git a/internal/server/webhooks/handler.go b/internal/server/webhooks/handler.go index 91a9e6c..ff3ca90 100644 --- a/internal/server/webhooks/handler.go +++ b/internal/server/webhooks/handler.go @@ -35,16 +35,21 @@ func (h *Handler) Register(r fiber.Router) { // @Tags Webhooks // @Accept json // @Produce json -// @Param body body PushEvent true "BitBucket push event payload" -// @Success 202 {object} webhooks.ProcessResult -// @Failure 400 {object} fiberfx.ErrorResponse -// @Failure 401 {object} fiberfx.ErrorResponse +// @Param body body PushEvent true "BitBucket push event payload" +// @Param X-Hub-Signature header string true "BitBucket signature header" +// @Success 202 {object} webhooks.ProcessResult +// @Failure 400 {object} fiberfx.ErrorResponse +// @Failure 401 {object} fiberfx.ErrorResponse // @Router /webhooks/bitbucket/push [post] // // handlePush processes a BitBucket push event webhook. func (h *Handler) handlePush(c *fiber.Ctx) error { rawBody := c.BodyRaw() - sigHeader := c.Get("X-Hub-Signature-256") + + sigHeader := c.Get("X-Hub-Signature") + if sigHeader == "" { + sigHeader = c.Get("X-Hub-Signature-256") + } if err := h.svc.VerifyPushEvent(rawBody, sigHeader); err != nil { if errors.Is(err, webhooks.ErrInvalidSignature) {