diff options
Diffstat (limited to 'services/webhook/payloader.go')
-rw-r--r-- | services/webhook/payloader.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/services/webhook/payloader.go b/services/webhook/payloader.go new file mode 100644 index 0000000000..f1cdaf6595 --- /dev/null +++ b/services/webhook/payloader.go @@ -0,0 +1,56 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package webhook + +import ( + "code.gitea.io/gitea/models" + api "code.gitea.io/gitea/modules/structs" +) + +// PayloadConvertor defines the interface to convert system webhook payload to external payload +type PayloadConvertor interface { + api.Payloader + Create(*api.CreatePayload) (api.Payloader, error) + Delete(*api.DeletePayload) (api.Payloader, error) + Fork(*api.ForkPayload) (api.Payloader, error) + Issue(*api.IssuePayload) (api.Payloader, error) + IssueComment(*api.IssueCommentPayload) (api.Payloader, error) + Push(*api.PushPayload) (api.Payloader, error) + PullRequest(*api.PullRequestPayload) (api.Payloader, error) + Review(*api.PullRequestPayload, models.HookEventType) (api.Payloader, error) + Repository(*api.RepositoryPayload) (api.Payloader, error) + Release(*api.ReleasePayload) (api.Payloader, error) +} + +func convertPayloader(s PayloadConvertor, p api.Payloader, event models.HookEventType) (api.Payloader, error) { + switch event { + case models.HookEventCreate: + return s.Create(p.(*api.CreatePayload)) + case models.HookEventDelete: + return s.Delete(p.(*api.DeletePayload)) + case models.HookEventFork: + return s.Fork(p.(*api.ForkPayload)) + case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone: + return s.Issue(p.(*api.IssuePayload)) + case models.HookEventIssueComment, models.HookEventPullRequestComment: + pl, ok := p.(*api.IssueCommentPayload) + if ok { + return s.IssueComment(pl) + } + return s.PullRequest(p.(*api.PullRequestPayload)) + case models.HookEventPush: + return s.Push(p.(*api.PushPayload)) + case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel, + models.HookEventPullRequestMilestone, models.HookEventPullRequestSync: + return s.PullRequest(p.(*api.PullRequestPayload)) + case models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewComment: + return s.Review(p.(*api.PullRequestPayload), event) + case models.HookEventRepository: + return s.Repository(p.(*api.RepositoryPayload)) + case models.HookEventRelease: + return s.Release(p.(*api.ReleasePayload)) + } + return s, nil +} |