diff options
Diffstat (limited to 'models/webhook.go')
-rw-r--r-- | models/webhook.go | 57 |
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 |