diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2020-09-05 10:57:13 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-04 22:57:13 -0400 |
commit | b51bd7f1d62cd623601185162d84ac29adb25366 (patch) | |
tree | 95ce8ebda0a5cf65a44385b7017325338529d583 /modules/webhook/matrix.go | |
parent | e1535c74cc494dce85ea5c2e8a25665bed444217 (diff) | |
download | gitea-b51bd7f1d62cd623601185162d84ac29adb25366.tar.gz gitea-b51bd7f1d62cd623601185162d84ac29adb25366.zip |
Refactor webhook payload convertion (#12310)
* Refactor webhook payload convertion
* Fix lint
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'modules/webhook/matrix.go')
-rw-r--r-- | modules/webhook/matrix.go | 113 |
1 files changed, 50 insertions, 63 deletions
diff --git a/modules/webhook/matrix.go b/modules/webhook/matrix.go index d6309000a8..063147198a 100644 --- a/modules/webhook/matrix.go +++ b/modules/webhook/matrix.go @@ -51,14 +51,18 @@ type MatrixPayloadUnsafe struct { AccessToken string `json:"access_token"` } +var ( + _ PayloadConvertor = &MatrixPayloadUnsafe{} +) + // safePayload "converts" a unsafe payload to a safe payload -func (p *MatrixPayloadUnsafe) safePayload() *MatrixPayloadSafe { +func (m *MatrixPayloadUnsafe) safePayload() *MatrixPayloadSafe { return &MatrixPayloadSafe{ - Body: p.Body, - MsgType: p.MsgType, - Format: p.Format, - FormattedBody: p.FormattedBody, - Commits: p.Commits, + Body: m.Body, + MsgType: m.MsgType, + Format: m.Format, + FormattedBody: m.FormattedBody, + Commits: m.Commits, } } @@ -72,11 +76,11 @@ type MatrixPayloadSafe struct { } // SetSecret sets the Matrix secret -func (p *MatrixPayloadUnsafe) SetSecret(_ string) {} +func (m *MatrixPayloadUnsafe) SetSecret(_ string) {} // JSONPayload Marshals the MatrixPayloadUnsafe to json -func (p *MatrixPayloadUnsafe) JSONPayload() ([]byte, error) { - data, err := json.MarshalIndent(p, "", " ") +func (m *MatrixPayloadUnsafe) JSONPayload() ([]byte, error) { + data, err := json.MarshalIndent(m, "", " ") if err != nil { return []byte{}, err } @@ -101,51 +105,56 @@ func MatrixLinkToRef(repoURL, ref string) string { } } -func getMatrixCreatePayload(p *api.CreatePayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) { +// Create implements PayloadConvertor Create method +func (m *MatrixPayloadUnsafe) Create(p *api.CreatePayload) (api.Payloader, error) { repoLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName) refLink := MatrixLinkToRef(p.Repo.HTMLURL, p.Ref) text := fmt.Sprintf("[%s:%s] %s created by %s", repoLink, refLink, p.RefType, p.Sender.UserName) - return getMatrixPayloadUnsafe(text, nil, matrix), nil + return getMatrixPayloadUnsafe(text, nil, m.AccessToken, m.MsgType), nil } -// getMatrixDeletePayload composes Matrix payload for delete a branch or tag. -func getMatrixDeletePayload(p *api.DeletePayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) { +// Delete composes Matrix payload for delete a branch or tag. +func (m *MatrixPayloadUnsafe) Delete(p *api.DeletePayload) (api.Payloader, error) { refName := git.RefEndName(p.Ref) repoLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName) text := fmt.Sprintf("[%s:%s] %s deleted by %s", repoLink, refName, p.RefType, p.Sender.UserName) - return getMatrixPayloadUnsafe(text, nil, matrix), nil + return getMatrixPayloadUnsafe(text, nil, m.AccessToken, m.MsgType), nil } -// getMatrixForkPayload composes Matrix payload for forked by a repository. -func getMatrixForkPayload(p *api.ForkPayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) { +// Fork composes Matrix payload for forked by a repository. +func (m *MatrixPayloadUnsafe) Fork(p *api.ForkPayload) (api.Payloader, error) { baseLink := MatrixLinkFormatter(p.Forkee.HTMLURL, p.Forkee.FullName) forkLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName) text := fmt.Sprintf("%s is forked to %s", baseLink, forkLink) - return getMatrixPayloadUnsafe(text, nil, matrix), nil + return getMatrixPayloadUnsafe(text, nil, m.AccessToken, m.MsgType), nil } -func getMatrixIssuesPayload(p *api.IssuePayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) { +// Issue implements PayloadConvertor Issue method +func (m *MatrixPayloadUnsafe) Issue(p *api.IssuePayload) (api.Payloader, error) { text, _, _, _ := getIssuesPayloadInfo(p, MatrixLinkFormatter, true) - return getMatrixPayloadUnsafe(text, nil, matrix), nil + return getMatrixPayloadUnsafe(text, nil, m.AccessToken, m.MsgType), nil } -func getMatrixIssueCommentPayload(p *api.IssueCommentPayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) { +// IssueComment implements PayloadConvertor IssueComment method +func (m *MatrixPayloadUnsafe) IssueComment(p *api.IssueCommentPayload) (api.Payloader, error) { text, _, _ := getIssueCommentPayloadInfo(p, MatrixLinkFormatter, true) - return getMatrixPayloadUnsafe(text, nil, matrix), nil + return getMatrixPayloadUnsafe(text, nil, m.AccessToken, m.MsgType), nil } -func getMatrixReleasePayload(p *api.ReleasePayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) { +// Release implements PayloadConvertor Release method +func (m *MatrixPayloadUnsafe) Release(p *api.ReleasePayload) (api.Payloader, error) { text, _ := getReleasePayloadInfo(p, MatrixLinkFormatter, true) - return getMatrixPayloadUnsafe(text, nil, matrix), nil + return getMatrixPayloadUnsafe(text, nil, m.AccessToken, m.MsgType), nil } -func getMatrixPushPayload(p *api.PushPayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) { +// Push implements PayloadConvertor Push method +func (m *MatrixPayloadUnsafe) Push(p *api.PushPayload) (api.Payloader, error) { var commitDesc string if len(p.Commits) == 1 { @@ -168,16 +177,18 @@ func getMatrixPushPayload(p *api.PushPayload, matrix *MatrixMeta) (*MatrixPayloa } - return getMatrixPayloadUnsafe(text, p.Commits, matrix), nil + return getMatrixPayloadUnsafe(text, p.Commits, m.AccessToken, m.MsgType), nil } -func getMatrixPullRequestPayload(p *api.PullRequestPayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) { +// PullRequest implements PayloadConvertor PullRequest method +func (m *MatrixPayloadUnsafe) PullRequest(p *api.PullRequestPayload) (api.Payloader, error) { text, _, _, _ := getPullRequestPayloadInfo(p, MatrixLinkFormatter, true) - return getMatrixPayloadUnsafe(text, nil, matrix), nil + return getMatrixPayloadUnsafe(text, nil, m.AccessToken, m.MsgType), nil } -func getMatrixPullRequestApprovalPayload(p *api.PullRequestPayload, matrix *MatrixMeta, event models.HookEventType) (*MatrixPayloadUnsafe, error) { +// Review implements PayloadConvertor Review method +func (m *MatrixPayloadUnsafe) Review(p *api.PullRequestPayload, event models.HookEventType) (api.Payloader, error) { senderLink := MatrixLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName) title := fmt.Sprintf("#%d %s", p.Index, p.PullRequest.Title) titleLink := fmt.Sprintf("%s/pulls/%d", p.Repository.HTMLURL, p.Index) @@ -194,10 +205,11 @@ func getMatrixPullRequestApprovalPayload(p *api.PullRequestPayload, matrix *Matr text = fmt.Sprintf("[%s] Pull request review %s: [%s](%s) by %s", repoLink, action, title, titleLink, senderLink) } - return getMatrixPayloadUnsafe(text, nil, matrix), nil + return getMatrixPayloadUnsafe(text, nil, m.AccessToken, m.MsgType), nil } -func getMatrixRepositoryPayload(p *api.RepositoryPayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) { +// Repository implements PayloadConvertor Repository method +func (m *MatrixPayloadUnsafe) Repository(p *api.RepositoryPayload) (api.Payloader, error) { senderLink := MatrixLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName) repoLink := MatrixLinkFormatter(p.Repository.HTMLURL, p.Repository.FullName) var text string @@ -209,11 +221,11 @@ func getMatrixRepositoryPayload(p *api.RepositoryPayload, matrix *MatrixMeta) (* text = fmt.Sprintf("[%s] Repository deleted by %s", repoLink, senderLink) } - return getMatrixPayloadUnsafe(text, nil, matrix), nil + return getMatrixPayloadUnsafe(text, nil, m.AccessToken, m.MsgType), nil } // GetMatrixPayload converts a Matrix webhook into a MatrixPayloadUnsafe -func GetMatrixPayload(p api.Payloader, event models.HookEventType, meta string) (*MatrixPayloadUnsafe, error) { +func GetMatrixPayload(p api.Payloader, event models.HookEventType, meta string) (api.Payloader, error) { s := new(MatrixPayloadUnsafe) matrix := &MatrixMeta{} @@ -221,44 +233,19 @@ func GetMatrixPayload(p api.Payloader, event models.HookEventType, meta string) return s, errors.New("GetMatrixPayload meta json:" + err.Error()) } - switch event { - case models.HookEventCreate: - return getMatrixCreatePayload(p.(*api.CreatePayload), matrix) - case models.HookEventDelete: - return getMatrixDeletePayload(p.(*api.DeletePayload), matrix) - case models.HookEventFork: - return getMatrixForkPayload(p.(*api.ForkPayload), matrix) - case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone: - return getMatrixIssuesPayload(p.(*api.IssuePayload), matrix) - case models.HookEventIssueComment, models.HookEventPullRequestComment: - pl, ok := p.(*api.IssueCommentPayload) - if ok { - return getMatrixIssueCommentPayload(pl, matrix) - } - return getMatrixPullRequestPayload(p.(*api.PullRequestPayload), matrix) - case models.HookEventPush: - return getMatrixPushPayload(p.(*api.PushPayload), matrix) - case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel, - models.HookEventPullRequestMilestone, models.HookEventPullRequestSync: - return getMatrixPullRequestPayload(p.(*api.PullRequestPayload), matrix) - case models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewComment: - return getMatrixPullRequestApprovalPayload(p.(*api.PullRequestPayload), matrix, event) - case models.HookEventRepository: - return getMatrixRepositoryPayload(p.(*api.RepositoryPayload), matrix) - case models.HookEventRelease: - return getMatrixReleasePayload(p.(*api.ReleasePayload), matrix) - } + s.AccessToken = matrix.AccessToken + s.MsgType = messageTypeText[matrix.MessageType] - return s, nil + return convertPayloader(s, p, event) } -func getMatrixPayloadUnsafe(text string, commits []*api.PayloadCommit, matrix *MatrixMeta) *MatrixPayloadUnsafe { +func getMatrixPayloadUnsafe(text string, commits []*api.PayloadCommit, accessToken, msgType string) *MatrixPayloadUnsafe { p := MatrixPayloadUnsafe{} - p.AccessToken = matrix.AccessToken + p.AccessToken = accessToken p.FormattedBody = text p.Body = getMessageBody(text) p.Format = "org.matrix.custom.html" - p.MsgType = messageTypeText[matrix.MessageType] + p.MsgType = msgType p.Commits = commits return &p } |