1// Copyright 2020 The Gitea Authors. All rights reserved. 2// Use of this source code is governed by a MIT-style 3// license that can be found in the LICENSE file. 4 5package webhook 6 7import ( 8 webhook_model "code.gitea.io/gitea/models/webhook" 9 api "code.gitea.io/gitea/modules/structs" 10) 11 12// PayloadConvertor defines the interface to convert system webhook payload to external payload 13type PayloadConvertor interface { 14 api.Payloader 15 Create(*api.CreatePayload) (api.Payloader, error) 16 Delete(*api.DeletePayload) (api.Payloader, error) 17 Fork(*api.ForkPayload) (api.Payloader, error) 18 Issue(*api.IssuePayload) (api.Payloader, error) 19 IssueComment(*api.IssueCommentPayload) (api.Payloader, error) 20 Push(*api.PushPayload) (api.Payloader, error) 21 PullRequest(*api.PullRequestPayload) (api.Payloader, error) 22 Review(*api.PullRequestPayload, webhook_model.HookEventType) (api.Payloader, error) 23 Repository(*api.RepositoryPayload) (api.Payloader, error) 24 Release(*api.ReleasePayload) (api.Payloader, error) 25} 26 27func convertPayloader(s PayloadConvertor, p api.Payloader, event webhook_model.HookEventType) (api.Payloader, error) { 28 switch event { 29 case webhook_model.HookEventCreate: 30 return s.Create(p.(*api.CreatePayload)) 31 case webhook_model.HookEventDelete: 32 return s.Delete(p.(*api.DeletePayload)) 33 case webhook_model.HookEventFork: 34 return s.Fork(p.(*api.ForkPayload)) 35 case webhook_model.HookEventIssues, webhook_model.HookEventIssueAssign, webhook_model.HookEventIssueLabel, webhook_model.HookEventIssueMilestone: 36 return s.Issue(p.(*api.IssuePayload)) 37 case webhook_model.HookEventIssueComment, webhook_model.HookEventPullRequestComment: 38 pl, ok := p.(*api.IssueCommentPayload) 39 if ok { 40 return s.IssueComment(pl) 41 } 42 return s.PullRequest(p.(*api.PullRequestPayload)) 43 case webhook_model.HookEventPush: 44 return s.Push(p.(*api.PushPayload)) 45 case webhook_model.HookEventPullRequest, webhook_model.HookEventPullRequestAssign, webhook_model.HookEventPullRequestLabel, 46 webhook_model.HookEventPullRequestMilestone, webhook_model.HookEventPullRequestSync: 47 return s.PullRequest(p.(*api.PullRequestPayload)) 48 case webhook_model.HookEventPullRequestReviewApproved, webhook_model.HookEventPullRequestReviewRejected, webhook_model.HookEventPullRequestReviewComment: 49 return s.Review(p.(*api.PullRequestPayload), event) 50 case webhook_model.HookEventRepository: 51 return s.Repository(p.(*api.RepositoryPayload)) 52 case webhook_model.HookEventRelease: 53 return s.Release(p.(*api.ReleasePayload)) 54 } 55 return s, nil 56} 57