From b98647b61819bf73fa43f92f5727fd58d492f13c Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Tue, 13 Oct 2020 15:24:56 -0400 Subject: [PATCH] Deduplicate webhook headers on subsequent attempts This also updates the database with the final payload headers, including the signature and nonce, which are generated afresh for each attempt. --- webhooks/legacy.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/webhooks/legacy.go b/webhooks/legacy.go index 0c5527ffc4b4331e6865a57448b8c442f2c73f6e..436203166f75cbf9e8eefb2cfc0bd3edc60823a8 100644 --- a/webhooks/legacy.go +++ b/webhooks/legacy.go @@ -209,7 +209,7 @@ func deliverPayload(ctx context.Context, name, url string, err, work.ErrDoNotReattempt) } - req.Header = headers + req.Header = make(http.Header) for key, values := range headers { for _, value := range values { req.Header.Add(key, value) @@ -219,6 +219,9 @@ func deliverPayload(ctx context.Context, name, url string, req.Header.Add("X-Payload-Nonce", nonce) req.Header.Add("X-Payload-Signature", sig) + var ours strings.Builder + req.Header.Write(&ours) + resp, err := client.Do(req) if err != nil { return err @@ -233,13 +236,14 @@ func deliverPayload(ctx context.Context, name, url string, } if err = database.WithTx(ctx, nil, func(tx *sql.Tx) error { - var sb strings.Builder - resp.Header.Write(&sb) + var theirs strings.Builder + resp.Header.Write(&theirs) _, err := sq. Update(name+"_webhook_delivery"). Set("response", string(body)). Set("response_status", resp.StatusCode). - Set("response_headers", sb.String()). + Set("response_headers", theirs.String()). + Set("payload_headers", ours.String()). Where("id = ?", deliveryID). PlaceholderFormat(sq.Dollar). RunWith(tx).