diff options
author | zeripath <art27@cantab.net> | 2022-03-28 04:17:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-28 11:17:21 +0800 |
commit | d6fa138e7ce7c36ce253a3c847e3218fd31452c4 (patch) | |
tree | f5a5fcd1d15e52369b745c75c41713ef12352d49 /services/webhook | |
parent | 04601d22f557bbaea2abc53aa9750478c9dbc14f (diff) | |
download | gitea-d6fa138e7ce7c36ce253a3c847e3218fd31452c4.tar.gz gitea-d6fa138e7ce7c36ce253a3c847e3218fd31452c4.zip |
Only send webhook events to active system webhooks and only deliver to active hooks (#19234)
There is a bug in the system webhooks whereby the active state is not checked when
webhooks are prepared and there is a bug that deactivating webhooks do not prevent
queued deliveries.
* Only add SystemWebhooks to the prepareWebhooks list if they are active
* At the time of delivery if the underlying webhook is not active mark it
as "delivered" but with a failed delivery so it does not get delivered.
Fix #19220
Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Diffstat (limited to 'services/webhook')
-rw-r--r-- | services/webhook/deliver.go | 6 | ||||
-rw-r--r-- | services/webhook/webhook.go | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/services/webhook/deliver.go b/services/webhook/deliver.go index 88b709cb41..f45e9d08d8 100644 --- a/services/webhook/deliver.go +++ b/services/webhook/deliver.go @@ -148,6 +148,8 @@ func Deliver(t *webhook_model.HookTask) error { t.Delivered = time.Now().UnixNano() if t.IsSucceed { log.Trace("Hook delivered: %s", t.UUID) + } else if !w.IsActive { + log.Trace("Hook delivery skipped as webhook is inactive: %s", t.UUID) } else { log.Trace("Hook delivery failed: %s", t.UUID) } @@ -172,6 +174,10 @@ func Deliver(t *webhook_model.HookTask) error { return fmt.Errorf("webhook task skipped (webhooks disabled): [%d]", t.ID) } + if !w.IsActive { + return nil + } + resp, err := webhookHTTPClient.Do(req.WithContext(graceful.GetManager().ShutdownContext())) if err != nil { t.ResponseInfo.Body = fmt.Sprintf("Delivery: %v", err) diff --git a/services/webhook/webhook.go b/services/webhook/webhook.go index 607fac9634..557dd147bf 100644 --- a/services/webhook/webhook.go +++ b/services/webhook/webhook.go @@ -214,7 +214,7 @@ func prepareWebhooks(repo *repo_model.Repository, event webhook_model.HookEventT } // Add any admin-defined system webhooks - systemHooks, err := webhook_model.GetSystemWebhooks() + systemHooks, err := webhook_model.GetSystemWebhooks(util.OptionalBoolTrue) if err != nil { return fmt.Errorf("GetSystemWebhooks: %v", err) } |