parent
491f0ebc58
commit
3e6fed368b
|
@ -482,6 +482,57 @@ func UpdateHookTask(t *HookTask) error {
|
||||||
return err
|
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.
|
// PrepareWebhooks adds new webhooks to task queue for given payload.
|
||||||
func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) error {
|
func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) error {
|
||||||
ws, err := GetActiveWebhooksByRepoID(repo.ID)
|
ws, err := GetActiveWebhooksByRepoID(repo.ID)
|
||||||
|
@ -503,51 +554,9 @@ func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) err
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var payloader api.Payloader
|
|
||||||
for _, w := range ws {
|
for _, w := range ws {
|
||||||
switch event {
|
if err = PrepareWebhook(w, repo, event, p); err != nil {
|
||||||
case HookEventCreate:
|
return err
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -545,6 +545,14 @@ func DiscordHooksEditPost(ctx *context.Context, form auth.NewDiscordHookForm) {
|
||||||
|
|
||||||
// TestWebhook test if web hook is work fine
|
// TestWebhook test if web hook is work fine
|
||||||
func TestWebhook(ctx *context.Context) {
|
func TestWebhook(ctx *context.Context) {
|
||||||
|
hookID := ctx.ParamsInt64(":id")
|
||||||
|
w, err := models.GetWebhookByRepoID(ctx.Repo.Repository.ID, hookID)
|
||||||
|
if err != nil {
|
||||||
|
ctx.Flash.Error("GetWebhookByID: " + err.Error())
|
||||||
|
ctx.Status(500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Grab latest commit or fake one if it's empty repository.
|
// Grab latest commit or fake one if it's empty repository.
|
||||||
commit := ctx.Repo.Commit
|
commit := ctx.Repo.Commit
|
||||||
if commit == nil {
|
if commit == nil {
|
||||||
|
@ -581,8 +589,8 @@ func TestWebhook(ctx *context.Context) {
|
||||||
Pusher: apiUser,
|
Pusher: apiUser,
|
||||||
Sender: apiUser,
|
Sender: apiUser,
|
||||||
}
|
}
|
||||||
if err := models.PrepareWebhooks(ctx.Repo.Repository, models.HookEventPush, p); err != nil {
|
if err := models.PrepareWebhook(w, ctx.Repo.Repository, models.HookEventPush, p); err != nil {
|
||||||
ctx.Flash.Error("PrepareWebhooks: " + err.Error())
|
ctx.Flash.Error("PrepareWebhook: " + err.Error())
|
||||||
ctx.Status(500)
|
ctx.Status(500)
|
||||||
} else {
|
} else {
|
||||||
go models.HookQueue.Add(ctx.Repo.Repository.ID)
|
go models.HookQueue.Add(ctx.Repo.Repository.ID)
|
||||||
|
|
Loading…
Reference in New Issue