aboutsummaryrefslogtreecommitdiffstats
path: root/services/webhook
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2022-03-28 04:17:21 +0100
committerGitHub <noreply@github.com>2022-03-28 11:17:21 +0800
commitd6fa138e7ce7c36ce253a3c847e3218fd31452c4 (patch)
treef5a5fcd1d15e52369b745c75c41713ef12352d49 /services/webhook
parent04601d22f557bbaea2abc53aa9750478c9dbc14f (diff)
downloadgitea-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.go6
-rw-r--r--services/webhook/webhook.go2
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)
}