aboutsummaryrefslogtreecommitdiff
path: root/models/webhook.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/webhook.go')
-rw-r--r--models/webhook.go57
1 files changed, 35 insertions, 22 deletions
diff --git a/models/webhook.go b/models/webhook.go
index e9a4d79b..63916857 100644
--- a/models/webhook.go
+++ b/models/webhook.go
@@ -197,8 +197,8 @@ func getWebhook(bean *Webhook) (*Webhook, error) {
return bean, nil
}
-// GetWebhookByRepoID returns webhook of repository by given ID.
-func GetWebhookByRepoID(repoID, id int64) (*Webhook, error) {
+// GetWebhookOfRepoByID returns webhook of repository by given ID.
+func GetWebhookOfRepoByID(repoID, id int64) (*Webhook, error) {
return getWebhook(&Webhook{
ID: id,
RepoID: repoID,
@@ -433,29 +433,14 @@ func UpdateHookTask(t *HookTask) error {
return err
}
-// PrepareWebhooks adds new webhooks to task queue for given payload.
-func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) error {
- ws, err := GetActiveWebhooksByRepoID(repo.ID)
- if err != nil {
- return fmt.Errorf("GetActiveWebhooksByRepoID: %v", err)
- }
-
- // check if repo belongs to org and append additional webhooks
- if repo.MustOwner().IsOrganization() {
- // get hooks for org
- orgws, err := GetActiveWebhooksByOrgID(repo.OwnerID)
- if err != nil {
- return fmt.Errorf("GetActiveWebhooksByOrgID: %v", err)
- }
- ws = append(ws, orgws...)
- }
-
- if len(ws) == 0 {
+// prepareWebhooks adds list of webhooks to task queue.
+func prepareWebhooks(repo *Repository, event HookEventType, p api.Payloader, webhooks []*Webhook) (err error) {
+ if len(webhooks) == 0 {
return nil
}
var payloader api.Payloader
- for _, w := range ws {
+ for _, w := range webhooks {
switch event {
case HOOK_EVENT_CREATE:
if !w.HasCreateEvent() {
@@ -504,6 +489,34 @@ func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) err
return nil
}
+// PrepareWebhooks adds all active webhooks to task queue.
+func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) error {
+ webhooks, err := GetActiveWebhooksByRepoID(repo.ID)
+ if err != nil {
+ return fmt.Errorf("GetActiveWebhooksByRepoID [%d]: %v", repo.ID, err)
+ }
+
+ // check if repo belongs to org and append additional webhooks
+ if repo.MustOwner().IsOrganization() {
+ // get hooks for org
+ orgws, err := GetActiveWebhooksByOrgID(repo.OwnerID)
+ if err != nil {
+ return fmt.Errorf("GetActiveWebhooksByOrgID [%d]: %v", repo.OwnerID, err)
+ }
+ webhooks = append(webhooks, orgws...)
+ }
+ return prepareWebhooks(repo, event, p, webhooks)
+}
+
+// TestWebhook adds the test webhook matches the ID to task queue.
+func TestWebhook(repo *Repository, event HookEventType, p api.Payloader, webhookID int64) error {
+ webhook, err := GetWebhookOfRepoByID(repo.ID, webhookID)
+ if err != nil {
+ return fmt.Errorf("GetWebhookOfRepoByID [repo_id: %d, id: %d]: %v", repo.ID, webhookID, err)
+ }
+ return prepareWebhooks(repo, event, p, []*Webhook{webhook})
+}
+
func (t *HookTask) deliver() {
t.IsDelivered = true
@@ -541,7 +554,7 @@ func (t *HookTask) deliver() {
}
// Update webhook last delivery status.
- w, err := GetWebhookByRepoID(t.RepoID, t.HookID)
+ w, err := GetWebhookOfRepoByID(t.RepoID, t.HookID)
if err != nil {
log.Error(5, "GetWebhookByID: %v", err)
return