aboutsummaryrefslogtreecommitdiffstats
path: root/models/webhook
diff options
context:
space:
mode:
Diffstat (limited to 'models/webhook')
-rw-r--r--models/webhook/hooktask.go5
-rw-r--r--models/webhook/webhook.go203
-rw-r--r--models/webhook/webhook_test.go25
3 files changed, 43 insertions, 190 deletions
diff --git a/models/webhook/hooktask.go b/models/webhook/hooktask.go
index ff3fdbadb2..96ec11e43f 100644
--- a/models/webhook/hooktask.go
+++ b/models/webhook/hooktask.go
@@ -198,7 +198,8 @@ func MarkTaskDelivered(ctx context.Context, task *HookTask) (bool, error) {
func CleanupHookTaskTable(ctx context.Context, cleanupType HookTaskCleanupType, olderThan time.Duration, numberToKeep int) error {
log.Trace("Doing: CleanupHookTaskTable")
- if cleanupType == OlderThan {
+ switch cleanupType {
+ case OlderThan:
deleteOlderThan := time.Now().Add(-olderThan).UnixNano()
deletes, err := db.GetEngine(ctx).
Where("is_delivered = ? and delivered < ?", true, deleteOlderThan).
@@ -207,7 +208,7 @@ func CleanupHookTaskTable(ctx context.Context, cleanupType HookTaskCleanupType,
return err
}
log.Trace("Deleted %d rows from hook_task", deletes)
- } else if cleanupType == PerWebhook {
+ case PerWebhook:
hookIDs := make([]int64, 0, 10)
err := db.GetEngine(ctx).
Table("webhook").
diff --git a/models/webhook/webhook.go b/models/webhook/webhook.go
index 894357e36a..b234d9ffee 100644
--- a/models/webhook/webhook.go
+++ b/models/webhook/webhook.go
@@ -167,186 +167,39 @@ func (w *Webhook) UpdateEvent() error {
return err
}
-// HasCreateEvent returns true if hook enabled create event.
-func (w *Webhook) HasCreateEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.Create)
-}
-
-// HasDeleteEvent returns true if hook enabled delete event.
-func (w *Webhook) HasDeleteEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.Delete)
-}
-
-// HasForkEvent returns true if hook enabled fork event.
-func (w *Webhook) HasForkEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.Fork)
-}
-
-// HasIssuesEvent returns true if hook enabled issues event.
-func (w *Webhook) HasIssuesEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.Issues)
-}
-
-// HasIssuesAssignEvent returns true if hook enabled issues assign event.
-func (w *Webhook) HasIssuesAssignEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.IssueAssign)
-}
-
-// HasIssuesLabelEvent returns true if hook enabled issues label event.
-func (w *Webhook) HasIssuesLabelEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.IssueLabel)
-}
-
-// HasIssuesMilestoneEvent returns true if hook enabled issues milestone event.
-func (w *Webhook) HasIssuesMilestoneEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.IssueMilestone)
-}
-
-// HasIssueCommentEvent returns true if hook enabled issue_comment event.
-func (w *Webhook) HasIssueCommentEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.IssueComment)
-}
-
-// HasPushEvent returns true if hook enabled push event.
-func (w *Webhook) HasPushEvent() bool {
- return w.PushOnly || w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.Push)
-}
-
-// HasPullRequestEvent returns true if hook enabled pull request event.
-func (w *Webhook) HasPullRequestEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.PullRequest)
-}
-
-// HasPullRequestAssignEvent returns true if hook enabled pull request assign event.
-func (w *Webhook) HasPullRequestAssignEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.PullRequestAssign)
-}
-
-// HasPullRequestLabelEvent returns true if hook enabled pull request label event.
-func (w *Webhook) HasPullRequestLabelEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.PullRequestLabel)
-}
-
-// HasPullRequestMilestoneEvent returns true if hook enabled pull request milestone event.
-func (w *Webhook) HasPullRequestMilestoneEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.PullRequestMilestone)
-}
-
-// HasPullRequestCommentEvent returns true if hook enabled pull_request_comment event.
-func (w *Webhook) HasPullRequestCommentEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.PullRequestComment)
-}
-
-// HasPullRequestApprovedEvent returns true if hook enabled pull request review event.
-func (w *Webhook) HasPullRequestApprovedEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.PullRequestReview)
-}
-
-// HasPullRequestRejectedEvent returns true if hook enabled pull request review event.
-func (w *Webhook) HasPullRequestRejectedEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.PullRequestReview)
-}
-
-// HasPullRequestReviewCommentEvent returns true if hook enabled pull request review event.
-func (w *Webhook) HasPullRequestReviewCommentEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.PullRequestReview)
-}
-
-// HasPullRequestSyncEvent returns true if hook enabled pull request sync event.
-func (w *Webhook) HasPullRequestSyncEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.PullRequestSync)
-}
-
-// HasWikiEvent returns true if hook enabled wiki event.
-func (w *Webhook) HasWikiEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvent.Wiki)
-}
-
-// HasReleaseEvent returns if hook enabled release event.
-func (w *Webhook) HasReleaseEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.Release)
-}
-
-// HasRepositoryEvent returns if hook enabled repository event.
-func (w *Webhook) HasRepositoryEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.Repository)
-}
-
-// HasPackageEvent returns if hook enabled package event.
-func (w *Webhook) HasPackageEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.Package)
-}
-
-// HasPullRequestReviewRequestEvent returns true if hook enabled pull request review request event.
-func (w *Webhook) HasPullRequestReviewRequestEvent() bool {
- return w.SendEverything ||
- (w.ChooseEvents && w.HookEvents.PullRequestReviewRequest)
-}
-
-// EventCheckers returns event checkers
-func (w *Webhook) EventCheckers() []struct {
- Has func() bool
- Type webhook_module.HookEventType
-} {
- return []struct {
- Has func() bool
- Type webhook_module.HookEventType
- }{
- {w.HasCreateEvent, webhook_module.HookEventCreate},
- {w.HasDeleteEvent, webhook_module.HookEventDelete},
- {w.HasForkEvent, webhook_module.HookEventFork},
- {w.HasPushEvent, webhook_module.HookEventPush},
- {w.HasIssuesEvent, webhook_module.HookEventIssues},
- {w.HasIssuesAssignEvent, webhook_module.HookEventIssueAssign},
- {w.HasIssuesLabelEvent, webhook_module.HookEventIssueLabel},
- {w.HasIssuesMilestoneEvent, webhook_module.HookEventIssueMilestone},
- {w.HasIssueCommentEvent, webhook_module.HookEventIssueComment},
- {w.HasPullRequestEvent, webhook_module.HookEventPullRequest},
- {w.HasPullRequestAssignEvent, webhook_module.HookEventPullRequestAssign},
- {w.HasPullRequestLabelEvent, webhook_module.HookEventPullRequestLabel},
- {w.HasPullRequestMilestoneEvent, webhook_module.HookEventPullRequestMilestone},
- {w.HasPullRequestCommentEvent, webhook_module.HookEventPullRequestComment},
- {w.HasPullRequestApprovedEvent, webhook_module.HookEventPullRequestReviewApproved},
- {w.HasPullRequestRejectedEvent, webhook_module.HookEventPullRequestReviewRejected},
- {w.HasPullRequestCommentEvent, webhook_module.HookEventPullRequestReviewComment},
- {w.HasPullRequestSyncEvent, webhook_module.HookEventPullRequestSync},
- {w.HasWikiEvent, webhook_module.HookEventWiki},
- {w.HasRepositoryEvent, webhook_module.HookEventRepository},
- {w.HasReleaseEvent, webhook_module.HookEventRelease},
- {w.HasPackageEvent, webhook_module.HookEventPackage},
- {w.HasPullRequestReviewRequestEvent, webhook_module.HookEventPullRequestReviewRequest},
+func (w *Webhook) HasEvent(evt webhook_module.HookEventType) bool {
+ if w.SendEverything {
+ return true
}
+ if w.PushOnly {
+ return evt == webhook_module.HookEventPush
+ }
+ checkEvt := evt
+ switch evt {
+ case webhook_module.HookEventPullRequestReviewApproved, webhook_module.HookEventPullRequestReviewRejected, webhook_module.HookEventPullRequestReviewComment:
+ checkEvt = webhook_module.HookEventPullRequestReview
+ }
+ return w.HookEvents[checkEvt]
}
// EventsArray returns an array of hook events
func (w *Webhook) EventsArray() []string {
- events := make([]string, 0, 7)
+ if w.SendEverything {
+ events := make([]string, 0, len(webhook_module.AllEvents()))
+ for _, evt := range webhook_module.AllEvents() {
+ events = append(events, string(evt))
+ }
+ return events
+ }
+
+ if w.PushOnly {
+ return []string{string(webhook_module.HookEventPush)}
+ }
- for _, c := range w.EventCheckers() {
- if c.Has() {
- events = append(events, string(c.Type))
+ events := make([]string, 0, len(w.HookEvents))
+ for event, enabled := range w.HookEvents {
+ if enabled {
+ events = append(events, string(event))
}
}
return events
@@ -387,7 +240,7 @@ func CreateWebhooks(ctx context.Context, ws []*Webhook) error {
if len(ws) == 0 {
return nil
}
- for i := 0; i < len(ws); i++ {
+ for i := range ws {
ws[i].Type = strings.TrimSpace(ws[i].Type)
}
return db.Insert(ctx, ws)
diff --git a/models/webhook/webhook_test.go b/models/webhook/webhook_test.go
index c6c3f40d46..edad8fc996 100644
--- a/models/webhook/webhook_test.go
+++ b/models/webhook/webhook_test.go
@@ -4,7 +4,6 @@
package webhook
import (
- "context"
"testing"
"time"
@@ -54,9 +53,9 @@ func TestWebhook_UpdateEvent(t *testing.T) {
SendEverything: false,
ChooseEvents: false,
HookEvents: webhook_module.HookEvents{
- Create: false,
- Push: true,
- PullRequest: false,
+ webhook_module.HookEventCreate: false,
+ webhook_module.HookEventPush: true,
+ webhook_module.HookEventPullRequest: false,
},
}
webhook.HookEvent = hookEvent
@@ -73,8 +72,8 @@ func TestWebhook_EventsArray(t *testing.T) {
"issues", "issue_assign", "issue_label", "issue_milestone", "issue_comment",
"pull_request", "pull_request_assign", "pull_request_label", "pull_request_milestone",
"pull_request_comment", "pull_request_review_approved", "pull_request_review_rejected",
- "pull_request_review_comment", "pull_request_sync", "wiki", "repository", "release",
- "package", "pull_request_review_request",
+ "pull_request_review_comment", "pull_request_sync", "pull_request_review_request", "wiki", "repository", "release",
+ "package", "status", "workflow_run", "workflow_job",
},
(&Webhook{
HookEvent: &webhook_module.HookEvent{SendEverything: true},
@@ -91,7 +90,7 @@ func TestWebhook_EventsArray(t *testing.T) {
func TestCreateWebhook(t *testing.T) {
hook := &Webhook{
RepoID: 3,
- URL: "www.example.com/unit_test",
+ URL: "https://www.example.com/unit_test",
ContentType: ContentTypeJSON,
Events: `{"push_only":false,"send_everything":false,"choose_events":false,"events":{"create":false,"push":true,"pull_request":true}}`,
}
@@ -245,7 +244,7 @@ func TestCleanupHookTaskTable_PerWebhook_DeletesDelivered(t *testing.T) {
assert.NoError(t, err)
unittest.AssertExistsAndLoadBean(t, hookTask)
- assert.NoError(t, CleanupHookTaskTable(context.Background(), PerWebhook, 168*time.Hour, 0))
+ assert.NoError(t, CleanupHookTaskTable(t.Context(), PerWebhook, 168*time.Hour, 0))
unittest.AssertNotExistsBean(t, hookTask)
}
@@ -261,7 +260,7 @@ func TestCleanupHookTaskTable_PerWebhook_LeavesUndelivered(t *testing.T) {
assert.NoError(t, err)
unittest.AssertExistsAndLoadBean(t, hookTask)
- assert.NoError(t, CleanupHookTaskTable(context.Background(), PerWebhook, 168*time.Hour, 0))
+ assert.NoError(t, CleanupHookTaskTable(t.Context(), PerWebhook, 168*time.Hour, 0))
unittest.AssertExistsAndLoadBean(t, hookTask)
}
@@ -278,7 +277,7 @@ func TestCleanupHookTaskTable_PerWebhook_LeavesMostRecentTask(t *testing.T) {
assert.NoError(t, err)
unittest.AssertExistsAndLoadBean(t, hookTask)
- assert.NoError(t, CleanupHookTaskTable(context.Background(), PerWebhook, 168*time.Hour, 1))
+ assert.NoError(t, CleanupHookTaskTable(t.Context(), PerWebhook, 168*time.Hour, 1))
unittest.AssertExistsAndLoadBean(t, hookTask)
}
@@ -295,7 +294,7 @@ func TestCleanupHookTaskTable_OlderThan_DeletesDelivered(t *testing.T) {
assert.NoError(t, err)
unittest.AssertExistsAndLoadBean(t, hookTask)
- assert.NoError(t, CleanupHookTaskTable(context.Background(), OlderThan, 168*time.Hour, 0))
+ assert.NoError(t, CleanupHookTaskTable(t.Context(), OlderThan, 168*time.Hour, 0))
unittest.AssertNotExistsBean(t, hookTask)
}
@@ -311,7 +310,7 @@ func TestCleanupHookTaskTable_OlderThan_LeavesUndelivered(t *testing.T) {
assert.NoError(t, err)
unittest.AssertExistsAndLoadBean(t, hookTask)
- assert.NoError(t, CleanupHookTaskTable(context.Background(), OlderThan, 168*time.Hour, 0))
+ assert.NoError(t, CleanupHookTaskTable(t.Context(), OlderThan, 168*time.Hour, 0))
unittest.AssertExistsAndLoadBean(t, hookTask)
}
@@ -328,6 +327,6 @@ func TestCleanupHookTaskTable_OlderThan_LeavesTaskEarlierThanAgeToDelete(t *test
assert.NoError(t, err)
unittest.AssertExistsAndLoadBean(t, hookTask)
- assert.NoError(t, CleanupHookTaskTable(context.Background(), OlderThan, 168*time.Hour, 0))
+ assert.NoError(t, CleanupHookTaskTable(t.Context(), OlderThan, 168*time.Hour, 0))
unittest.AssertExistsAndLoadBean(t, hookTask)
}