summaryrefslogtreecommitdiffstats
path: root/models/webhook.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2017-08-29 22:55:24 +0800
committerGitHub <noreply@github.com>2017-08-29 22:55:24 +0800
commit3e6fed368bbd837854292d3855463d567a689943 (patch)
treedcdff5d6a9ab69f6bd41158ebfee615f208f9c64 /models/webhook.go
parent491f0ebc58854560f72a5360060dac1fee3f1883 (diff)
downloadgitea-3e6fed368bbd837854292d3855463d567a689943.tar.gz
gitea-3e6fed368bbd837854292d3855463d567a689943.zip
fix webhook test (#2415)
* fix webhook test * fix error message * fix typo
Diffstat (limited to 'models/webhook.go')
-rw-r--r--models/webhook.go97
1 files changed, 53 insertions, 44 deletions
diff --git a/models/webhook.go b/models/webhook.go
index 61840a9811..5ad27ee8f3 100644
--- a/models/webhook.go
+++ b/models/webhook.go
@@ -482,6 +482,57 @@ func UpdateHookTask(t *HookTask) error {
return err
}
+// PrepareWebhook adds special webhook to task queue for given payload.
+func PrepareWebhook(w *Webhook, repo *Repository, event HookEventType, p api.Payloader) error {
+ switch event {
+ case HookEventCreate:
+ if !w.HasCreateEvent() {
+ return nil
+ }
+ case HookEventPush:
+ if !w.HasPushEvent() {
+ return nil
+ }
+ case HookEventPullRequest:
+ if !w.HasPullRequestEvent() {
+ return nil
+ }
+ }
+
+ var payloader api.Payloader
+ var err error
+ // Use separate objects so modifications won't be made on payload on non-Gogs/Gitea type hooks.
+ switch w.HookTaskType {
+ case SLACK:
+ payloader, err = GetSlackPayload(p, event, w.Meta)
+ if err != nil {
+ return fmt.Errorf("GetSlackPayload: %v", err)
+ }
+ case DISCORD:
+ payloader, err = GetDiscordPayload(p, event, w.Meta)
+ if err != nil {
+ return fmt.Errorf("GetDiscordPayload: %v", err)
+ }
+ default:
+ p.SetSecret(w.Secret)
+ payloader = p
+ }
+
+ if err = CreateHookTask(&HookTask{
+ RepoID: repo.ID,
+ HookID: w.ID,
+ Type: w.HookTaskType,
+ URL: w.URL,
+ Payloader: payloader,
+ ContentType: w.ContentType,
+ EventType: event,
+ IsSSL: w.IsSSL,
+ }); err != nil {
+ return fmt.Errorf("CreateHookTask: %v", err)
+ }
+ return nil
+}
+
// 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)
@@ -503,51 +554,9 @@ func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) err
return nil
}
- var payloader api.Payloader
for _, w := range ws {
- switch event {
- case HookEventCreate:
- if !w.HasCreateEvent() {
- continue
- }
- case HookEventPush:
- if !w.HasPushEvent() {
- continue
- }
- case HookEventPullRequest:
- if !w.HasPullRequestEvent() {
- continue
- }
- }
-
- // Use separate objects so modifications won't be made on payload on non-Gogs/Gitea type hooks.
- switch w.HookTaskType {
- case SLACK:
- payloader, err = GetSlackPayload(p, event, w.Meta)
- if err != nil {
- return fmt.Errorf("GetSlackPayload: %v", err)
- }
- case DISCORD:
- payloader, err = GetDiscordPayload(p, event, w.Meta)
- if err != nil {
- return fmt.Errorf("GetDiscordPayload: %v", err)
- }
- default:
- p.SetSecret(w.Secret)
- payloader = p
- }
-
- if err = CreateHookTask(&HookTask{
- RepoID: repo.ID,
- HookID: w.ID,
- Type: w.HookTaskType,
- URL: w.URL,
- Payloader: payloader,
- ContentType: w.ContentType,
- EventType: event,
- IsSSL: w.IsSSL,
- }); err != nil {
- return fmt.Errorf("CreateHookTask: %v", err)
+ if err = PrepareWebhook(w, repo, event, p); err != nil {
+ return err
}
}
return nil