aboutsummaryrefslogtreecommitdiffstats
path: root/models
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 /models
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 'models')
-rw-r--r--models/webhook/webhook.go13
1 files changed, 9 insertions, 4 deletions
diff --git a/models/webhook/webhook.go b/models/webhook/webhook.go
index ffc9b72b64..d61d1ed642 100644
--- a/models/webhook/webhook.go
+++ b/models/webhook/webhook.go
@@ -498,14 +498,19 @@ func GetSystemOrDefaultWebhook(id int64) (*Webhook, error) {
}
// GetSystemWebhooks returns all admin system webhooks.
-func GetSystemWebhooks() ([]*Webhook, error) {
- return getSystemWebhooks(db.GetEngine(db.DefaultContext))
+func GetSystemWebhooks(isActive util.OptionalBool) ([]*Webhook, error) {
+ return getSystemWebhooks(db.GetEngine(db.DefaultContext), isActive)
}
-func getSystemWebhooks(e db.Engine) ([]*Webhook, error) {
+func getSystemWebhooks(e db.Engine, isActive util.OptionalBool) ([]*Webhook, error) {
webhooks := make([]*Webhook, 0, 5)
+ if isActive.IsNone() {
+ return webhooks, e.
+ Where("repo_id=? AND org_id=? AND is_system_webhook=?", 0, 0, true).
+ Find(&webhooks)
+ }
return webhooks, e.
- Where("repo_id=? AND org_id=? AND is_system_webhook=?", 0, 0, true).
+ Where("repo_id=? AND org_id=? AND is_system_webhook=? AND is_active = ?", 0, 0, true, isActive.IsTrue()).
Find(&webhooks)
}