Refactor webhook payload convertion (#12310)
* Refactor webhook payload convertion * Fix lint Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
parent
e1535c74cc
commit
b51bd7f1d6
12 changed files with 397 additions and 454 deletions
|
@ -21,19 +21,24 @@ type (
|
||||||
DingtalkPayload dingtalk.Payload
|
DingtalkPayload dingtalk.Payload
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
_ PayloadConvertor = &DingtalkPayload{}
|
||||||
|
)
|
||||||
|
|
||||||
// SetSecret sets the dingtalk secret
|
// SetSecret sets the dingtalk secret
|
||||||
func (p *DingtalkPayload) SetSecret(_ string) {}
|
func (d *DingtalkPayload) SetSecret(_ string) {}
|
||||||
|
|
||||||
// JSONPayload Marshals the DingtalkPayload to json
|
// JSONPayload Marshals the DingtalkPayload to json
|
||||||
func (p *DingtalkPayload) JSONPayload() ([]byte, error) {
|
func (d *DingtalkPayload) JSONPayload() ([]byte, error) {
|
||||||
data, err := json.MarshalIndent(p, "", " ")
|
data, err := json.MarshalIndent(d, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
}
|
}
|
||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDingtalkCreatePayload(p *api.CreatePayload) (*DingtalkPayload, error) {
|
// Create implements PayloadConvertor Create method
|
||||||
|
func (d *DingtalkPayload) Create(p *api.CreatePayload) (api.Payloader, error) {
|
||||||
// created tag/branch
|
// created tag/branch
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
title := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName)
|
title := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName)
|
||||||
|
@ -50,7 +55,8 @@ func getDingtalkCreatePayload(p *api.CreatePayload) (*DingtalkPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDingtalkDeletePayload(p *api.DeletePayload) (*DingtalkPayload, error) {
|
// Delete implements PayloadConvertor Delete method
|
||||||
|
func (d *DingtalkPayload) Delete(p *api.DeletePayload) (api.Payloader, error) {
|
||||||
// created tag/branch
|
// created tag/branch
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
title := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName)
|
title := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName)
|
||||||
|
@ -67,7 +73,8 @@ func getDingtalkDeletePayload(p *api.DeletePayload) (*DingtalkPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDingtalkForkPayload(p *api.ForkPayload) (*DingtalkPayload, error) {
|
// Fork implements PayloadConvertor Fork method
|
||||||
|
func (d *DingtalkPayload) Fork(p *api.ForkPayload) (api.Payloader, error) {
|
||||||
title := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName)
|
title := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName)
|
||||||
|
|
||||||
return &DingtalkPayload{
|
return &DingtalkPayload{
|
||||||
|
@ -82,7 +89,8 @@ func getDingtalkForkPayload(p *api.ForkPayload) (*DingtalkPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDingtalkPushPayload(p *api.PushPayload) (*DingtalkPayload, error) {
|
// Push implements PayloadConvertor Push method
|
||||||
|
func (d *DingtalkPayload) Push(p *api.PushPayload) (api.Payloader, error) {
|
||||||
var (
|
var (
|
||||||
branchName = git.RefEndName(p.Ref)
|
branchName = git.RefEndName(p.Ref)
|
||||||
commitDesc string
|
commitDesc string
|
||||||
|
@ -131,7 +139,8 @@ func getDingtalkPushPayload(p *api.PushPayload) (*DingtalkPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDingtalkIssuesPayload(p *api.IssuePayload) (*DingtalkPayload, error) {
|
// Issue implements PayloadConvertor Issue method
|
||||||
|
func (d *DingtalkPayload) Issue(p *api.IssuePayload) (api.Payloader, error) {
|
||||||
text, issueTitle, attachmentText, _ := getIssuesPayloadInfo(p, noneLinkFormatter, true)
|
text, issueTitle, attachmentText, _ := getIssuesPayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
return &DingtalkPayload{
|
return &DingtalkPayload{
|
||||||
|
@ -147,7 +156,8 @@ func getDingtalkIssuesPayload(p *api.IssuePayload) (*DingtalkPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDingtalkIssueCommentPayload(p *api.IssueCommentPayload) (*DingtalkPayload, error) {
|
// IssueComment implements PayloadConvertor IssueComment method
|
||||||
|
func (d *DingtalkPayload) IssueComment(p *api.IssueCommentPayload) (api.Payloader, error) {
|
||||||
text, issueTitle, _ := getIssueCommentPayloadInfo(p, noneLinkFormatter, true)
|
text, issueTitle, _ := getIssueCommentPayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
return &DingtalkPayload{
|
return &DingtalkPayload{
|
||||||
|
@ -162,7 +172,8 @@ func getDingtalkIssueCommentPayload(p *api.IssueCommentPayload) (*DingtalkPayloa
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDingtalkPullRequestPayload(p *api.PullRequestPayload) (*DingtalkPayload, error) {
|
// PullRequest implements PayloadConvertor PullRequest method
|
||||||
|
func (d *DingtalkPayload) PullRequest(p *api.PullRequestPayload) (api.Payloader, error) {
|
||||||
text, issueTitle, attachmentText, _ := getPullRequestPayloadInfo(p, noneLinkFormatter, true)
|
text, issueTitle, attachmentText, _ := getPullRequestPayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
return &DingtalkPayload{
|
return &DingtalkPayload{
|
||||||
|
@ -178,7 +189,8 @@ func getDingtalkPullRequestPayload(p *api.PullRequestPayload) (*DingtalkPayload,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDingtalkPullRequestApprovalPayload(p *api.PullRequestPayload, event models.HookEventType) (*DingtalkPayload, error) {
|
// Review implements PayloadConvertor Review method
|
||||||
|
func (d *DingtalkPayload) Review(p *api.PullRequestPayload, event models.HookEventType) (api.Payloader, error) {
|
||||||
var text, title string
|
var text, title string
|
||||||
switch p.Action {
|
switch p.Action {
|
||||||
case api.HookIssueReviewed:
|
case api.HookIssueReviewed:
|
||||||
|
@ -204,7 +216,8 @@ func getDingtalkPullRequestApprovalPayload(p *api.PullRequestPayload, event mode
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDingtalkRepositoryPayload(p *api.RepositoryPayload) (*DingtalkPayload, error) {
|
// Repository implements PayloadConvertor Repository method
|
||||||
|
func (d *DingtalkPayload) Repository(p *api.RepositoryPayload) (api.Payloader, error) {
|
||||||
var title, url string
|
var title, url string
|
||||||
switch p.Action {
|
switch p.Action {
|
||||||
case api.HookRepoCreated:
|
case api.HookRepoCreated:
|
||||||
|
@ -235,7 +248,8 @@ func getDingtalkRepositoryPayload(p *api.RepositoryPayload) (*DingtalkPayload, e
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDingtalkReleasePayload(p *api.ReleasePayload) (*DingtalkPayload, error) {
|
// Release implements PayloadConvertor Release method
|
||||||
|
func (d *DingtalkPayload) Release(p *api.ReleasePayload) (api.Payloader, error) {
|
||||||
text, _ := getReleasePayloadInfo(p, noneLinkFormatter, true)
|
text, _ := getReleasePayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
return &DingtalkPayload{
|
return &DingtalkPayload{
|
||||||
|
@ -251,36 +265,6 @@ func getDingtalkReleasePayload(p *api.ReleasePayload) (*DingtalkPayload, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDingtalkPayload converts a ding talk webhook into a DingtalkPayload
|
// GetDingtalkPayload converts a ding talk webhook into a DingtalkPayload
|
||||||
func GetDingtalkPayload(p api.Payloader, event models.HookEventType, meta string) (*DingtalkPayload, error) {
|
func GetDingtalkPayload(p api.Payloader, event models.HookEventType, meta string) (api.Payloader, error) {
|
||||||
s := new(DingtalkPayload)
|
return convertPayloader(new(DingtalkPayload), p, event)
|
||||||
|
|
||||||
switch event {
|
|
||||||
case models.HookEventCreate:
|
|
||||||
return getDingtalkCreatePayload(p.(*api.CreatePayload))
|
|
||||||
case models.HookEventDelete:
|
|
||||||
return getDingtalkDeletePayload(p.(*api.DeletePayload))
|
|
||||||
case models.HookEventFork:
|
|
||||||
return getDingtalkForkPayload(p.(*api.ForkPayload))
|
|
||||||
case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone:
|
|
||||||
return getDingtalkIssuesPayload(p.(*api.IssuePayload))
|
|
||||||
case models.HookEventIssueComment, models.HookEventPullRequestComment:
|
|
||||||
pl, ok := p.(*api.IssueCommentPayload)
|
|
||||||
if ok {
|
|
||||||
return getDingtalkIssueCommentPayload(pl)
|
|
||||||
}
|
|
||||||
return getDingtalkPullRequestPayload(p.(*api.PullRequestPayload))
|
|
||||||
case models.HookEventPush:
|
|
||||||
return getDingtalkPushPayload(p.(*api.PushPayload))
|
|
||||||
case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel,
|
|
||||||
models.HookEventPullRequestMilestone, models.HookEventPullRequestSync:
|
|
||||||
return getDingtalkPullRequestPayload(p.(*api.PullRequestPayload))
|
|
||||||
case models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewComment:
|
|
||||||
return getDingtalkPullRequestApprovalPayload(p.(*api.PullRequestPayload), event)
|
|
||||||
case models.HookEventRepository:
|
|
||||||
return getDingtalkRepositoryPayload(p.(*api.RepositoryPayload))
|
|
||||||
case models.HookEventRelease:
|
|
||||||
return getDingtalkReleasePayload(p.(*api.ReleasePayload))
|
|
||||||
}
|
|
||||||
|
|
||||||
return s, nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,18 +14,18 @@ import (
|
||||||
|
|
||||||
func TestGetDingTalkIssuesPayload(t *testing.T) {
|
func TestGetDingTalkIssuesPayload(t *testing.T) {
|
||||||
p := issueTestPayload()
|
p := issueTestPayload()
|
||||||
|
d := new(DingtalkPayload)
|
||||||
p.Action = api.HookIssueOpened
|
p.Action = api.HookIssueOpened
|
||||||
pl, err := getDingtalkIssuesPayload(p)
|
pl, err := d.Issue(p)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
assert.Equal(t, "#2 crash", pl.ActionCard.Title)
|
assert.Equal(t, "#2 crash", pl.(*DingtalkPayload).ActionCard.Title)
|
||||||
assert.Equal(t, "[test/repo] Issue opened: #2 crash by user1\r\n\r\n", pl.ActionCard.Text)
|
assert.Equal(t, "[test/repo] Issue opened: #2 crash by user1\r\n\r\n", pl.(*DingtalkPayload).ActionCard.Text)
|
||||||
|
|
||||||
p.Action = api.HookIssueClosed
|
p.Action = api.HookIssueClosed
|
||||||
pl, err = getDingtalkIssuesPayload(p)
|
pl, err = d.Issue(p)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
assert.Equal(t, "#2 crash", pl.ActionCard.Title)
|
assert.Equal(t, "#2 crash", pl.(*DingtalkPayload).ActionCard.Title)
|
||||||
assert.Equal(t, "[test/repo] Issue closed: #2 crash by user1\r\n\r\n", pl.ActionCard.Text)
|
assert.Equal(t, "[test/repo] Issue closed: #2 crash by user1\r\n\r\n", pl.(*DingtalkPayload).ActionCard.Text)
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,25 +97,30 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetSecret sets the discord secret
|
// SetSecret sets the discord secret
|
||||||
func (p *DiscordPayload) SetSecret(_ string) {}
|
func (d *DiscordPayload) SetSecret(_ string) {}
|
||||||
|
|
||||||
// JSONPayload Marshals the DiscordPayload to json
|
// JSONPayload Marshals the DiscordPayload to json
|
||||||
func (p *DiscordPayload) JSONPayload() ([]byte, error) {
|
func (d *DiscordPayload) JSONPayload() ([]byte, error) {
|
||||||
data, err := json.MarshalIndent(p, "", " ")
|
data, err := json.MarshalIndent(d, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
}
|
}
|
||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDiscordCreatePayload(p *api.CreatePayload, meta *DiscordMeta) (*DiscordPayload, error) {
|
var (
|
||||||
|
_ PayloadConvertor = &DiscordPayload{}
|
||||||
|
)
|
||||||
|
|
||||||
|
// Create implements PayloadConvertor Create method
|
||||||
|
func (d *DiscordPayload) Create(p *api.CreatePayload) (api.Payloader, error) {
|
||||||
// created tag/branch
|
// created tag/branch
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
title := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName)
|
title := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName)
|
||||||
|
|
||||||
return &DiscordPayload{
|
return &DiscordPayload{
|
||||||
Username: meta.Username,
|
Username: d.Username,
|
||||||
AvatarURL: meta.IconURL,
|
AvatarURL: d.AvatarURL,
|
||||||
Embeds: []DiscordEmbed{
|
Embeds: []DiscordEmbed{
|
||||||
{
|
{
|
||||||
Title: title,
|
Title: title,
|
||||||
|
@ -131,14 +136,15 @@ func getDiscordCreatePayload(p *api.CreatePayload, meta *DiscordMeta) (*DiscordP
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDiscordDeletePayload(p *api.DeletePayload, meta *DiscordMeta) (*DiscordPayload, error) {
|
// Delete implements PayloadConvertor Delete method
|
||||||
|
func (d *DiscordPayload) Delete(p *api.DeletePayload) (api.Payloader, error) {
|
||||||
// deleted tag/branch
|
// deleted tag/branch
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
title := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName)
|
title := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName)
|
||||||
|
|
||||||
return &DiscordPayload{
|
return &DiscordPayload{
|
||||||
Username: meta.Username,
|
Username: d.Username,
|
||||||
AvatarURL: meta.IconURL,
|
AvatarURL: d.AvatarURL,
|
||||||
Embeds: []DiscordEmbed{
|
Embeds: []DiscordEmbed{
|
||||||
{
|
{
|
||||||
Title: title,
|
Title: title,
|
||||||
|
@ -154,13 +160,13 @@ func getDiscordDeletePayload(p *api.DeletePayload, meta *DiscordMeta) (*DiscordP
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDiscordForkPayload(p *api.ForkPayload, meta *DiscordMeta) (*DiscordPayload, error) {
|
// Fork implements PayloadConvertor Fork method
|
||||||
// fork
|
func (d *DiscordPayload) Fork(p *api.ForkPayload) (api.Payloader, error) {
|
||||||
title := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName)
|
title := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName)
|
||||||
|
|
||||||
return &DiscordPayload{
|
return &DiscordPayload{
|
||||||
Username: meta.Username,
|
Username: d.Username,
|
||||||
AvatarURL: meta.IconURL,
|
AvatarURL: d.AvatarURL,
|
||||||
Embeds: []DiscordEmbed{
|
Embeds: []DiscordEmbed{
|
||||||
{
|
{
|
||||||
Title: title,
|
Title: title,
|
||||||
|
@ -176,7 +182,8 @@ func getDiscordForkPayload(p *api.ForkPayload, meta *DiscordMeta) (*DiscordPaylo
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDiscordPushPayload(p *api.PushPayload, meta *DiscordMeta) (*DiscordPayload, error) {
|
// Push implements PayloadConvertor Push method
|
||||||
|
func (d *DiscordPayload) Push(p *api.PushPayload) (api.Payloader, error) {
|
||||||
var (
|
var (
|
||||||
branchName = git.RefEndName(p.Ref)
|
branchName = git.RefEndName(p.Ref)
|
||||||
commitDesc string
|
commitDesc string
|
||||||
|
@ -208,8 +215,8 @@ func getDiscordPushPayload(p *api.PushPayload, meta *DiscordMeta) (*DiscordPaylo
|
||||||
}
|
}
|
||||||
|
|
||||||
return &DiscordPayload{
|
return &DiscordPayload{
|
||||||
Username: meta.Username,
|
Username: d.Username,
|
||||||
AvatarURL: meta.IconURL,
|
AvatarURL: d.AvatarURL,
|
||||||
Embeds: []DiscordEmbed{
|
Embeds: []DiscordEmbed{
|
||||||
{
|
{
|
||||||
Title: title,
|
Title: title,
|
||||||
|
@ -226,12 +233,13 @@ func getDiscordPushPayload(p *api.PushPayload, meta *DiscordMeta) (*DiscordPaylo
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDiscordIssuesPayload(p *api.IssuePayload, meta *DiscordMeta) (*DiscordPayload, error) {
|
// Issue implements PayloadConvertor Issue method
|
||||||
|
func (d *DiscordPayload) Issue(p *api.IssuePayload) (api.Payloader, error) {
|
||||||
text, _, attachmentText, color := getIssuesPayloadInfo(p, noneLinkFormatter, false)
|
text, _, attachmentText, color := getIssuesPayloadInfo(p, noneLinkFormatter, false)
|
||||||
|
|
||||||
return &DiscordPayload{
|
return &DiscordPayload{
|
||||||
Username: meta.Username,
|
Username: d.Username,
|
||||||
AvatarURL: meta.IconURL,
|
AvatarURL: d.AvatarURL,
|
||||||
Embeds: []DiscordEmbed{
|
Embeds: []DiscordEmbed{
|
||||||
{
|
{
|
||||||
Title: text,
|
Title: text,
|
||||||
|
@ -248,12 +256,13 @@ func getDiscordIssuesPayload(p *api.IssuePayload, meta *DiscordMeta) (*DiscordPa
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDiscordIssueCommentPayload(p *api.IssueCommentPayload, discord *DiscordMeta) (*DiscordPayload, error) {
|
// IssueComment implements PayloadConvertor IssueComment method
|
||||||
|
func (d *DiscordPayload) IssueComment(p *api.IssueCommentPayload) (api.Payloader, error) {
|
||||||
text, _, color := getIssueCommentPayloadInfo(p, noneLinkFormatter, false)
|
text, _, color := getIssueCommentPayloadInfo(p, noneLinkFormatter, false)
|
||||||
|
|
||||||
return &DiscordPayload{
|
return &DiscordPayload{
|
||||||
Username: discord.Username,
|
Username: d.Username,
|
||||||
AvatarURL: discord.IconURL,
|
AvatarURL: d.AvatarURL,
|
||||||
Embeds: []DiscordEmbed{
|
Embeds: []DiscordEmbed{
|
||||||
{
|
{
|
||||||
Title: text,
|
Title: text,
|
||||||
|
@ -270,12 +279,13 @@ func getDiscordIssueCommentPayload(p *api.IssueCommentPayload, discord *DiscordM
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDiscordPullRequestPayload(p *api.PullRequestPayload, meta *DiscordMeta) (*DiscordPayload, error) {
|
// PullRequest implements PayloadConvertor PullRequest method
|
||||||
|
func (d *DiscordPayload) PullRequest(p *api.PullRequestPayload) (api.Payloader, error) {
|
||||||
text, _, attachmentText, color := getPullRequestPayloadInfo(p, noneLinkFormatter, false)
|
text, _, attachmentText, color := getPullRequestPayloadInfo(p, noneLinkFormatter, false)
|
||||||
|
|
||||||
return &DiscordPayload{
|
return &DiscordPayload{
|
||||||
Username: meta.Username,
|
Username: d.Username,
|
||||||
AvatarURL: meta.IconURL,
|
AvatarURL: d.AvatarURL,
|
||||||
Embeds: []DiscordEmbed{
|
Embeds: []DiscordEmbed{
|
||||||
{
|
{
|
||||||
Title: text,
|
Title: text,
|
||||||
|
@ -292,7 +302,8 @@ func getDiscordPullRequestPayload(p *api.PullRequestPayload, meta *DiscordMeta)
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDiscordPullRequestApprovalPayload(p *api.PullRequestPayload, meta *DiscordMeta, event models.HookEventType) (*DiscordPayload, error) {
|
// Review implements PayloadConvertor Review method
|
||||||
|
func (d *DiscordPayload) Review(p *api.PullRequestPayload, event models.HookEventType) (api.Payloader, error) {
|
||||||
var text, title string
|
var text, title string
|
||||||
var color int
|
var color int
|
||||||
switch p.Action {
|
switch p.Action {
|
||||||
|
@ -318,8 +329,8 @@ func getDiscordPullRequestApprovalPayload(p *api.PullRequestPayload, meta *Disco
|
||||||
}
|
}
|
||||||
|
|
||||||
return &DiscordPayload{
|
return &DiscordPayload{
|
||||||
Username: meta.Username,
|
Username: d.Username,
|
||||||
AvatarURL: meta.IconURL,
|
AvatarURL: d.AvatarURL,
|
||||||
Embeds: []DiscordEmbed{
|
Embeds: []DiscordEmbed{
|
||||||
{
|
{
|
||||||
Title: title,
|
Title: title,
|
||||||
|
@ -336,7 +347,8 @@ func getDiscordPullRequestApprovalPayload(p *api.PullRequestPayload, meta *Disco
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDiscordRepositoryPayload(p *api.RepositoryPayload, meta *DiscordMeta) (*DiscordPayload, error) {
|
// Repository implements PayloadConvertor Repository method
|
||||||
|
func (d *DiscordPayload) Repository(p *api.RepositoryPayload) (api.Payloader, error) {
|
||||||
var title, url string
|
var title, url string
|
||||||
var color int
|
var color int
|
||||||
switch p.Action {
|
switch p.Action {
|
||||||
|
@ -350,8 +362,8 @@ func getDiscordRepositoryPayload(p *api.RepositoryPayload, meta *DiscordMeta) (*
|
||||||
}
|
}
|
||||||
|
|
||||||
return &DiscordPayload{
|
return &DiscordPayload{
|
||||||
Username: meta.Username,
|
Username: d.Username,
|
||||||
AvatarURL: meta.IconURL,
|
AvatarURL: d.AvatarURL,
|
||||||
Embeds: []DiscordEmbed{
|
Embeds: []DiscordEmbed{
|
||||||
{
|
{
|
||||||
Title: title,
|
Title: title,
|
||||||
|
@ -367,12 +379,13 @@ func getDiscordRepositoryPayload(p *api.RepositoryPayload, meta *DiscordMeta) (*
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDiscordReleasePayload(p *api.ReleasePayload, meta *DiscordMeta) (*DiscordPayload, error) {
|
// Release implements PayloadConvertor Release method
|
||||||
|
func (d *DiscordPayload) Release(p *api.ReleasePayload) (api.Payloader, error) {
|
||||||
text, color := getReleasePayloadInfo(p, noneLinkFormatter, false)
|
text, color := getReleasePayloadInfo(p, noneLinkFormatter, false)
|
||||||
|
|
||||||
return &DiscordPayload{
|
return &DiscordPayload{
|
||||||
Username: meta.Username,
|
Username: d.Username,
|
||||||
AvatarURL: meta.IconURL,
|
AvatarURL: d.AvatarURL,
|
||||||
Embeds: []DiscordEmbed{
|
Embeds: []DiscordEmbed{
|
||||||
{
|
{
|
||||||
Title: text,
|
Title: text,
|
||||||
|
@ -390,47 +403,20 @@ func getDiscordReleasePayload(p *api.ReleasePayload, meta *DiscordMeta) (*Discor
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDiscordPayload converts a discord webhook into a DiscordPayload
|
// GetDiscordPayload converts a discord webhook into a DiscordPayload
|
||||||
func GetDiscordPayload(p api.Payloader, event models.HookEventType, meta string) (*DiscordPayload, error) {
|
func GetDiscordPayload(p api.Payloader, event models.HookEventType, meta string) (api.Payloader, error) {
|
||||||
s := new(DiscordPayload)
|
s := new(DiscordPayload)
|
||||||
|
|
||||||
discord := &DiscordMeta{}
|
discord := &DiscordMeta{}
|
||||||
if err := json.Unmarshal([]byte(meta), &discord); err != nil {
|
if err := json.Unmarshal([]byte(meta), &discord); err != nil {
|
||||||
return s, errors.New("GetDiscordPayload meta json:" + err.Error())
|
return s, errors.New("GetDiscordPayload meta json:" + err.Error())
|
||||||
}
|
}
|
||||||
|
s.Username = discord.Username
|
||||||
|
s.AvatarURL = discord.IconURL
|
||||||
|
|
||||||
switch event {
|
return convertPayloader(s, p, event)
|
||||||
case models.HookEventCreate:
|
|
||||||
return getDiscordCreatePayload(p.(*api.CreatePayload), discord)
|
|
||||||
case models.HookEventDelete:
|
|
||||||
return getDiscordDeletePayload(p.(*api.DeletePayload), discord)
|
|
||||||
case models.HookEventFork:
|
|
||||||
return getDiscordForkPayload(p.(*api.ForkPayload), discord)
|
|
||||||
case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone:
|
|
||||||
return getDiscordIssuesPayload(p.(*api.IssuePayload), discord)
|
|
||||||
case models.HookEventIssueComment, models.HookEventPullRequestComment:
|
|
||||||
pl, ok := p.(*api.IssueCommentPayload)
|
|
||||||
if ok {
|
|
||||||
return getDiscordIssueCommentPayload(pl, discord)
|
|
||||||
}
|
|
||||||
return getDiscordPullRequestPayload(p.(*api.PullRequestPayload), discord)
|
|
||||||
case models.HookEventPush:
|
|
||||||
return getDiscordPushPayload(p.(*api.PushPayload), discord)
|
|
||||||
case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel,
|
|
||||||
models.HookEventPullRequestMilestone, models.HookEventPullRequestSync:
|
|
||||||
return getDiscordPullRequestPayload(p.(*api.PullRequestPayload), discord)
|
|
||||||
case models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewComment:
|
|
||||||
return getDiscordPullRequestApprovalPayload(p.(*api.PullRequestPayload), discord, event)
|
|
||||||
case models.HookEventRepository:
|
|
||||||
return getDiscordRepositoryPayload(p.(*api.RepositoryPayload), discord)
|
|
||||||
case models.HookEventRelease:
|
|
||||||
return getDiscordReleasePayload(p.(*api.ReleasePayload), discord)
|
|
||||||
}
|
|
||||||
|
|
||||||
return s, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseHookPullRequestEventType(event models.HookEventType) (string, error) {
|
func parseHookPullRequestEventType(event models.HookEventType) (string, error) {
|
||||||
|
|
||||||
switch event {
|
switch event {
|
||||||
|
|
||||||
case models.HookEventPullRequestReviewApproved:
|
case models.HookEventPullRequestReviewApproved:
|
||||||
|
|
|
@ -23,18 +23,23 @@ type (
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetSecret sets the Feishu secret
|
// SetSecret sets the Feishu secret
|
||||||
func (p *FeishuPayload) SetSecret(_ string) {}
|
func (f *FeishuPayload) SetSecret(_ string) {}
|
||||||
|
|
||||||
// JSONPayload Marshals the FeishuPayload to json
|
// JSONPayload Marshals the FeishuPayload to json
|
||||||
func (p *FeishuPayload) JSONPayload() ([]byte, error) {
|
func (f *FeishuPayload) JSONPayload() ([]byte, error) {
|
||||||
data, err := json.MarshalIndent(p, "", " ")
|
data, err := json.MarshalIndent(f, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
}
|
}
|
||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFeishuCreatePayload(p *api.CreatePayload) (*FeishuPayload, error) {
|
var (
|
||||||
|
_ PayloadConvertor = &FeishuPayload{}
|
||||||
|
)
|
||||||
|
|
||||||
|
// Create implements PayloadConvertor Create method
|
||||||
|
func (f *FeishuPayload) Create(p *api.CreatePayload) (api.Payloader, error) {
|
||||||
// created tag/branch
|
// created tag/branch
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
title := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName)
|
title := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName)
|
||||||
|
@ -45,7 +50,8 @@ func getFeishuCreatePayload(p *api.CreatePayload) (*FeishuPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFeishuDeletePayload(p *api.DeletePayload) (*FeishuPayload, error) {
|
// Delete implements PayloadConvertor Delete method
|
||||||
|
func (f *FeishuPayload) Delete(p *api.DeletePayload) (api.Payloader, error) {
|
||||||
// created tag/branch
|
// created tag/branch
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
title := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName)
|
title := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName)
|
||||||
|
@ -56,7 +62,8 @@ func getFeishuDeletePayload(p *api.DeletePayload) (*FeishuPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFeishuForkPayload(p *api.ForkPayload) (*FeishuPayload, error) {
|
// Fork implements PayloadConvertor Fork method
|
||||||
|
func (f *FeishuPayload) Fork(p *api.ForkPayload) (api.Payloader, error) {
|
||||||
title := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName)
|
title := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName)
|
||||||
|
|
||||||
return &FeishuPayload{
|
return &FeishuPayload{
|
||||||
|
@ -65,7 +72,8 @@ func getFeishuForkPayload(p *api.ForkPayload) (*FeishuPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFeishuPushPayload(p *api.PushPayload) (*FeishuPayload, error) {
|
// Push implements PayloadConvertor Push method
|
||||||
|
func (f *FeishuPayload) Push(p *api.PushPayload) (api.Payloader, error) {
|
||||||
var (
|
var (
|
||||||
branchName = git.RefEndName(p.Ref)
|
branchName = git.RefEndName(p.Ref)
|
||||||
commitDesc string
|
commitDesc string
|
||||||
|
@ -94,7 +102,8 @@ func getFeishuPushPayload(p *api.PushPayload) (*FeishuPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFeishuIssuesPayload(p *api.IssuePayload) (*FeishuPayload, error) {
|
// Issue implements PayloadConvertor Issue method
|
||||||
|
func (f *FeishuPayload) Issue(p *api.IssuePayload) (api.Payloader, error) {
|
||||||
text, issueTitle, attachmentText, _ := getIssuesPayloadInfo(p, noneLinkFormatter, true)
|
text, issueTitle, attachmentText, _ := getIssuesPayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
return &FeishuPayload{
|
return &FeishuPayload{
|
||||||
|
@ -103,7 +112,8 @@ func getFeishuIssuesPayload(p *api.IssuePayload) (*FeishuPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFeishuIssueCommentPayload(p *api.IssueCommentPayload) (*FeishuPayload, error) {
|
// IssueComment implements PayloadConvertor IssueComment method
|
||||||
|
func (f *FeishuPayload) IssueComment(p *api.IssueCommentPayload) (api.Payloader, error) {
|
||||||
text, issueTitle, _ := getIssueCommentPayloadInfo(p, noneLinkFormatter, true)
|
text, issueTitle, _ := getIssueCommentPayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
return &FeishuPayload{
|
return &FeishuPayload{
|
||||||
|
@ -112,7 +122,8 @@ func getFeishuIssueCommentPayload(p *api.IssueCommentPayload) (*FeishuPayload, e
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFeishuPullRequestPayload(p *api.PullRequestPayload) (*FeishuPayload, error) {
|
// PullRequest implements PayloadConvertor PullRequest method
|
||||||
|
func (f *FeishuPayload) PullRequest(p *api.PullRequestPayload) (api.Payloader, error) {
|
||||||
text, issueTitle, attachmentText, _ := getPullRequestPayloadInfo(p, noneLinkFormatter, true)
|
text, issueTitle, attachmentText, _ := getPullRequestPayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
return &FeishuPayload{
|
return &FeishuPayload{
|
||||||
|
@ -121,7 +132,8 @@ func getFeishuPullRequestPayload(p *api.PullRequestPayload) (*FeishuPayload, err
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFeishuPullRequestApprovalPayload(p *api.PullRequestPayload, event models.HookEventType) (*FeishuPayload, error) {
|
// Review implements PayloadConvertor Review method
|
||||||
|
func (f *FeishuPayload) Review(p *api.PullRequestPayload, event models.HookEventType) (api.Payloader, error) {
|
||||||
var text, title string
|
var text, title string
|
||||||
switch p.Action {
|
switch p.Action {
|
||||||
case api.HookIssueSynchronized:
|
case api.HookIssueSynchronized:
|
||||||
|
@ -141,7 +153,8 @@ func getFeishuPullRequestApprovalPayload(p *api.PullRequestPayload, event models
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFeishuRepositoryPayload(p *api.RepositoryPayload) (*FeishuPayload, error) {
|
// Repository implements PayloadConvertor Repository method
|
||||||
|
func (f *FeishuPayload) Repository(p *api.RepositoryPayload) (api.Payloader, error) {
|
||||||
var title string
|
var title string
|
||||||
switch p.Action {
|
switch p.Action {
|
||||||
case api.HookRepoCreated:
|
case api.HookRepoCreated:
|
||||||
|
@ -161,7 +174,8 @@ func getFeishuRepositoryPayload(p *api.RepositoryPayload) (*FeishuPayload, error
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFeishuReleasePayload(p *api.ReleasePayload) (*FeishuPayload, error) {
|
// Release implements PayloadConvertor Release method
|
||||||
|
func (f *FeishuPayload) Release(p *api.ReleasePayload) (api.Payloader, error) {
|
||||||
text, _ := getReleasePayloadInfo(p, noneLinkFormatter, true)
|
text, _ := getReleasePayloadInfo(p, noneLinkFormatter, true)
|
||||||
|
|
||||||
return &FeishuPayload{
|
return &FeishuPayload{
|
||||||
|
@ -171,35 +185,6 @@ func getFeishuReleasePayload(p *api.ReleasePayload) (*FeishuPayload, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetFeishuPayload converts a ding talk webhook into a FeishuPayload
|
// GetFeishuPayload converts a ding talk webhook into a FeishuPayload
|
||||||
func GetFeishuPayload(p api.Payloader, event models.HookEventType, meta string) (*FeishuPayload, error) {
|
func GetFeishuPayload(p api.Payloader, event models.HookEventType, meta string) (api.Payloader, error) {
|
||||||
s := new(FeishuPayload)
|
return convertPayloader(new(FeishuPayload), p, event)
|
||||||
|
|
||||||
switch event {
|
|
||||||
case models.HookEventCreate:
|
|
||||||
return getFeishuCreatePayload(p.(*api.CreatePayload))
|
|
||||||
case models.HookEventDelete:
|
|
||||||
return getFeishuDeletePayload(p.(*api.DeletePayload))
|
|
||||||
case models.HookEventFork:
|
|
||||||
return getFeishuForkPayload(p.(*api.ForkPayload))
|
|
||||||
case models.HookEventIssues:
|
|
||||||
return getFeishuIssuesPayload(p.(*api.IssuePayload))
|
|
||||||
case models.HookEventIssueComment, models.HookEventPullRequestComment:
|
|
||||||
pl, ok := p.(*api.IssueCommentPayload)
|
|
||||||
if ok {
|
|
||||||
return getFeishuIssueCommentPayload(pl)
|
|
||||||
}
|
|
||||||
return getFeishuPullRequestPayload(p.(*api.PullRequestPayload))
|
|
||||||
case models.HookEventPush:
|
|
||||||
return getFeishuPushPayload(p.(*api.PushPayload))
|
|
||||||
case models.HookEventPullRequest:
|
|
||||||
return getFeishuPullRequestPayload(p.(*api.PullRequestPayload))
|
|
||||||
case models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewRejected:
|
|
||||||
return getFeishuPullRequestApprovalPayload(p.(*api.PullRequestPayload), event)
|
|
||||||
case models.HookEventRepository:
|
|
||||||
return getFeishuRepositoryPayload(p.(*api.RepositoryPayload))
|
|
||||||
case models.HookEventRelease:
|
|
||||||
return getFeishuReleasePayload(p.(*api.ReleasePayload))
|
|
||||||
}
|
|
||||||
|
|
||||||
return s, nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,14 +51,18 @@ type MatrixPayloadUnsafe struct {
|
||||||
AccessToken string `json:"access_token"`
|
AccessToken string `json:"access_token"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
_ PayloadConvertor = &MatrixPayloadUnsafe{}
|
||||||
|
)
|
||||||
|
|
||||||
// safePayload "converts" a unsafe payload to a safe payload
|
// safePayload "converts" a unsafe payload to a safe payload
|
||||||
func (p *MatrixPayloadUnsafe) safePayload() *MatrixPayloadSafe {
|
func (m *MatrixPayloadUnsafe) safePayload() *MatrixPayloadSafe {
|
||||||
return &MatrixPayloadSafe{
|
return &MatrixPayloadSafe{
|
||||||
Body: p.Body,
|
Body: m.Body,
|
||||||
MsgType: p.MsgType,
|
MsgType: m.MsgType,
|
||||||
Format: p.Format,
|
Format: m.Format,
|
||||||
FormattedBody: p.FormattedBody,
|
FormattedBody: m.FormattedBody,
|
||||||
Commits: p.Commits,
|
Commits: m.Commits,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,11 +76,11 @@ type MatrixPayloadSafe struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetSecret sets the Matrix secret
|
// SetSecret sets the Matrix secret
|
||||||
func (p *MatrixPayloadUnsafe) SetSecret(_ string) {}
|
func (m *MatrixPayloadUnsafe) SetSecret(_ string) {}
|
||||||
|
|
||||||
// JSONPayload Marshals the MatrixPayloadUnsafe to json
|
// JSONPayload Marshals the MatrixPayloadUnsafe to json
|
||||||
func (p *MatrixPayloadUnsafe) JSONPayload() ([]byte, error) {
|
func (m *MatrixPayloadUnsafe) JSONPayload() ([]byte, error) {
|
||||||
data, err := json.MarshalIndent(p, "", " ")
|
data, err := json.MarshalIndent(m, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
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)
|
repoLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
||||||
refLink := MatrixLinkToRef(p.Repo.HTMLURL, p.Ref)
|
refLink := MatrixLinkToRef(p.Repo.HTMLURL, p.Ref)
|
||||||
text := fmt.Sprintf("[%s:%s] %s created by %s", repoLink, refLink, p.RefType, p.Sender.UserName)
|
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.
|
// Delete composes Matrix payload for delete a branch or tag.
|
||||||
func getMatrixDeletePayload(p *api.DeletePayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) {
|
func (m *MatrixPayloadUnsafe) Delete(p *api.DeletePayload) (api.Payloader, error) {
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
repoLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
repoLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
||||||
text := fmt.Sprintf("[%s:%s] %s deleted by %s", repoLink, refName, p.RefType, p.Sender.UserName)
|
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.
|
// Fork composes Matrix payload for forked by a repository.
|
||||||
func getMatrixForkPayload(p *api.ForkPayload, matrix *MatrixMeta) (*MatrixPayloadUnsafe, error) {
|
func (m *MatrixPayloadUnsafe) Fork(p *api.ForkPayload) (api.Payloader, error) {
|
||||||
baseLink := MatrixLinkFormatter(p.Forkee.HTMLURL, p.Forkee.FullName)
|
baseLink := MatrixLinkFormatter(p.Forkee.HTMLURL, p.Forkee.FullName)
|
||||||
forkLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
forkLink := MatrixLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
||||||
text := fmt.Sprintf("%s is forked to %s", baseLink, forkLink)
|
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)
|
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)
|
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)
|
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
|
var commitDesc string
|
||||||
|
|
||||||
if len(p.Commits) == 1 {
|
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)
|
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)
|
senderLink := MatrixLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName)
|
||||||
title := fmt.Sprintf("#%d %s", p.Index, p.PullRequest.Title)
|
title := fmt.Sprintf("#%d %s", p.Index, p.PullRequest.Title)
|
||||||
titleLink := fmt.Sprintf("%s/pulls/%d", p.Repository.HTMLURL, p.Index)
|
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)
|
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)
|
senderLink := MatrixLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName)
|
||||||
repoLink := MatrixLinkFormatter(p.Repository.HTMLURL, p.Repository.FullName)
|
repoLink := MatrixLinkFormatter(p.Repository.HTMLURL, p.Repository.FullName)
|
||||||
var text string
|
var text string
|
||||||
|
@ -209,11 +221,11 @@ func getMatrixRepositoryPayload(p *api.RepositoryPayload, matrix *MatrixMeta) (*
|
||||||
text = fmt.Sprintf("[%s] Repository deleted by %s", repoLink, senderLink)
|
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
|
// 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)
|
s := new(MatrixPayloadUnsafe)
|
||||||
|
|
||||||
matrix := &MatrixMeta{}
|
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())
|
return s, errors.New("GetMatrixPayload meta json:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
switch event {
|
s.AccessToken = matrix.AccessToken
|
||||||
case models.HookEventCreate:
|
s.MsgType = messageTypeText[matrix.MessageType]
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
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 := MatrixPayloadUnsafe{}
|
||||||
p.AccessToken = matrix.AccessToken
|
p.AccessToken = accessToken
|
||||||
p.FormattedBody = text
|
p.FormattedBody = text
|
||||||
p.Body = getMessageBody(text)
|
p.Body = getMessageBody(text)
|
||||||
p.Format = "org.matrix.custom.html"
|
p.Format = "org.matrix.custom.html"
|
||||||
p.MsgType = messageTypeText[matrix.MessageType]
|
p.MsgType = msgType
|
||||||
p.Commits = commits
|
p.Commits = commits
|
||||||
return &p
|
return &p
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,73 +16,69 @@ import (
|
||||||
|
|
||||||
func TestMatrixIssuesPayloadOpened(t *testing.T) {
|
func TestMatrixIssuesPayloadOpened(t *testing.T) {
|
||||||
p := issueTestPayload()
|
p := issueTestPayload()
|
||||||
sl := &MatrixMeta{}
|
m := new(MatrixPayloadUnsafe)
|
||||||
|
|
||||||
p.Action = api.HookIssueOpened
|
p.Action = api.HookIssueOpened
|
||||||
pl, err := getMatrixIssuesPayload(p, sl)
|
pl, err := m.Issue(p)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Issue opened: [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.Body)
|
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Issue opened: [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayloadUnsafe).Body)
|
||||||
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] Issue opened: <a href=\"http://localhost:3000/test/repo/issues/2\">#2 crash</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.FormattedBody)
|
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] Issue opened: <a href=\"http://localhost:3000/test/repo/issues/2\">#2 crash</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.(*MatrixPayloadUnsafe).FormattedBody)
|
||||||
|
|
||||||
p.Action = api.HookIssueClosed
|
p.Action = api.HookIssueClosed
|
||||||
pl, err = getMatrixIssuesPayload(p, sl)
|
pl, err = m.Issue(p)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Issue closed: [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.Body)
|
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Issue closed: [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayloadUnsafe).Body)
|
||||||
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] Issue closed: <a href=\"http://localhost:3000/test/repo/issues/2\">#2 crash</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.FormattedBody)
|
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] Issue closed: <a href=\"http://localhost:3000/test/repo/issues/2\">#2 crash</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.(*MatrixPayloadUnsafe).FormattedBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMatrixIssueCommentPayload(t *testing.T) {
|
func TestMatrixIssueCommentPayload(t *testing.T) {
|
||||||
p := issueCommentTestPayload()
|
p := issueCommentTestPayload()
|
||||||
|
m := new(MatrixPayloadUnsafe)
|
||||||
|
|
||||||
sl := &MatrixMeta{}
|
pl, err := m.IssueComment(p)
|
||||||
|
|
||||||
pl, err := getMatrixIssueCommentPayload(p, sl)
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
|
|
||||||
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] New comment on issue [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.Body)
|
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] New comment on issue [#2 crash](http://localhost:3000/test/repo/issues/2) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayloadUnsafe).Body)
|
||||||
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] New comment on issue <a href=\"http://localhost:3000/test/repo/issues/2\">#2 crash</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.FormattedBody)
|
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] New comment on issue <a href=\"http://localhost:3000/test/repo/issues/2\">#2 crash</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.(*MatrixPayloadUnsafe).FormattedBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMatrixPullRequestCommentPayload(t *testing.T) {
|
func TestMatrixPullRequestCommentPayload(t *testing.T) {
|
||||||
p := pullRequestCommentTestPayload()
|
p := pullRequestCommentTestPayload()
|
||||||
|
m := new(MatrixPayloadUnsafe)
|
||||||
|
|
||||||
sl := &MatrixMeta{}
|
pl, err := m.IssueComment(p)
|
||||||
|
|
||||||
pl, err := getMatrixIssueCommentPayload(p, sl)
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
|
|
||||||
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] New comment on pull request [#2 Fix bug](http://localhost:3000/test/repo/pulls/2) by [user1](https://try.gitea.io/user1)", pl.Body)
|
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] New comment on pull request [#2 Fix bug](http://localhost:3000/test/repo/pulls/2) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayloadUnsafe).Body)
|
||||||
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] New comment on pull request <a href=\"http://localhost:3000/test/repo/pulls/2\">#2 Fix bug</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.FormattedBody)
|
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] New comment on pull request <a href=\"http://localhost:3000/test/repo/pulls/2\">#2 Fix bug</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.(*MatrixPayloadUnsafe).FormattedBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMatrixReleasePayload(t *testing.T) {
|
func TestMatrixReleasePayload(t *testing.T) {
|
||||||
p := pullReleaseTestPayload()
|
p := pullReleaseTestPayload()
|
||||||
|
m := new(MatrixPayloadUnsafe)
|
||||||
|
|
||||||
sl := &MatrixMeta{}
|
pl, err := m.Release(p)
|
||||||
|
|
||||||
pl, err := getMatrixReleasePayload(p, sl)
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
|
|
||||||
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Release created: [v1.0](http://localhost:3000/test/repo/src/v1.0) by [user1](https://try.gitea.io/user1)", pl.Body)
|
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Release created: [v1.0](http://localhost:3000/test/repo/src/v1.0) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayloadUnsafe).Body)
|
||||||
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] Release created: <a href=\"http://localhost:3000/test/repo/src/v1.0\">v1.0</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.FormattedBody)
|
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] Release created: <a href=\"http://localhost:3000/test/repo/src/v1.0\">v1.0</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.(*MatrixPayloadUnsafe).FormattedBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMatrixPullRequestPayload(t *testing.T) {
|
func TestMatrixPullRequestPayload(t *testing.T) {
|
||||||
p := pullRequestTestPayload()
|
p := pullRequestTestPayload()
|
||||||
|
m := new(MatrixPayloadUnsafe)
|
||||||
|
|
||||||
sl := &MatrixMeta{}
|
pl, err := m.PullRequest(p)
|
||||||
|
|
||||||
pl, err := getMatrixPullRequestPayload(p, sl)
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
|
|
||||||
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Pull request opened: [#2 Fix bug](http://localhost:3000/test/repo/pulls/12) by [user1](https://try.gitea.io/user1)", pl.Body)
|
assert.Equal(t, "[[test/repo](http://localhost:3000/test/repo)] Pull request opened: [#2 Fix bug](http://localhost:3000/test/repo/pulls/12) by [user1](https://try.gitea.io/user1)", pl.(*MatrixPayloadUnsafe).Body)
|
||||||
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] Pull request opened: <a href=\"http://localhost:3000/test/repo/pulls/12\">#2 Fix bug</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.FormattedBody)
|
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] Pull request opened: <a href=\"http://localhost:3000/test/repo/pulls/12\">#2 Fix bug</a> by <a href=\"https://try.gitea.io/user1\">user1</a>", pl.(*MatrixPayloadUnsafe).FormattedBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMatrixHookRequest(t *testing.T) {
|
func TestMatrixHookRequest(t *testing.T) {
|
||||||
|
|
|
@ -56,18 +56,23 @@ type (
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetSecret sets the MSTeams secret
|
// SetSecret sets the MSTeams secret
|
||||||
func (p *MSTeamsPayload) SetSecret(_ string) {}
|
func (m *MSTeamsPayload) SetSecret(_ string) {}
|
||||||
|
|
||||||
// JSONPayload Marshals the MSTeamsPayload to json
|
// JSONPayload Marshals the MSTeamsPayload to json
|
||||||
func (p *MSTeamsPayload) JSONPayload() ([]byte, error) {
|
func (m *MSTeamsPayload) JSONPayload() ([]byte, error) {
|
||||||
data, err := json.MarshalIndent(p, "", " ")
|
data, err := json.MarshalIndent(m, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
}
|
}
|
||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMSTeamsCreatePayload(p *api.CreatePayload) (*MSTeamsPayload, error) {
|
var (
|
||||||
|
_ PayloadConvertor = &MSTeamsPayload{}
|
||||||
|
)
|
||||||
|
|
||||||
|
// Create implements PayloadConvertor Create method
|
||||||
|
func (m *MSTeamsPayload) Create(p *api.CreatePayload) (api.Payloader, error) {
|
||||||
// created tag/branch
|
// created tag/branch
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
title := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName)
|
title := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName)
|
||||||
|
@ -110,7 +115,8 @@ func getMSTeamsCreatePayload(p *api.CreatePayload) (*MSTeamsPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMSTeamsDeletePayload(p *api.DeletePayload) (*MSTeamsPayload, error) {
|
// Delete implements PayloadConvertor Delete method
|
||||||
|
func (m *MSTeamsPayload) Delete(p *api.DeletePayload) (api.Payloader, error) {
|
||||||
// deleted tag/branch
|
// deleted tag/branch
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
title := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName)
|
title := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName)
|
||||||
|
@ -153,8 +159,8 @@ func getMSTeamsDeletePayload(p *api.DeletePayload) (*MSTeamsPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMSTeamsForkPayload(p *api.ForkPayload) (*MSTeamsPayload, error) {
|
// Fork implements PayloadConvertor Fork method
|
||||||
// fork
|
func (m *MSTeamsPayload) Fork(p *api.ForkPayload) (api.Payloader, error) {
|
||||||
title := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName)
|
title := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName)
|
||||||
|
|
||||||
return &MSTeamsPayload{
|
return &MSTeamsPayload{
|
||||||
|
@ -195,7 +201,8 @@ func getMSTeamsForkPayload(p *api.ForkPayload) (*MSTeamsPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMSTeamsPushPayload(p *api.PushPayload) (*MSTeamsPayload, error) {
|
// Push implements PayloadConvertor Push method
|
||||||
|
func (m *MSTeamsPayload) Push(p *api.PushPayload) (api.Payloader, error) {
|
||||||
var (
|
var (
|
||||||
branchName = git.RefEndName(p.Ref)
|
branchName = git.RefEndName(p.Ref)
|
||||||
commitDesc string
|
commitDesc string
|
||||||
|
@ -265,7 +272,8 @@ func getMSTeamsPushPayload(p *api.PushPayload) (*MSTeamsPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMSTeamsIssuesPayload(p *api.IssuePayload) (*MSTeamsPayload, error) {
|
// Issue implements PayloadConvertor Issue method
|
||||||
|
func (m *MSTeamsPayload) Issue(p *api.IssuePayload) (api.Payloader, error) {
|
||||||
text, _, attachmentText, color := getIssuesPayloadInfo(p, noneLinkFormatter, false)
|
text, _, attachmentText, color := getIssuesPayloadInfo(p, noneLinkFormatter, false)
|
||||||
|
|
||||||
return &MSTeamsPayload{
|
return &MSTeamsPayload{
|
||||||
|
@ -307,7 +315,8 @@ func getMSTeamsIssuesPayload(p *api.IssuePayload) (*MSTeamsPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMSTeamsIssueCommentPayload(p *api.IssueCommentPayload) (*MSTeamsPayload, error) {
|
// IssueComment implements PayloadConvertor IssueComment method
|
||||||
|
func (m *MSTeamsPayload) IssueComment(p *api.IssueCommentPayload) (api.Payloader, error) {
|
||||||
text, _, color := getIssueCommentPayloadInfo(p, noneLinkFormatter, false)
|
text, _, color := getIssueCommentPayloadInfo(p, noneLinkFormatter, false)
|
||||||
|
|
||||||
return &MSTeamsPayload{
|
return &MSTeamsPayload{
|
||||||
|
@ -349,7 +358,8 @@ func getMSTeamsIssueCommentPayload(p *api.IssueCommentPayload) (*MSTeamsPayload,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMSTeamsPullRequestPayload(p *api.PullRequestPayload) (*MSTeamsPayload, error) {
|
// PullRequest implements PayloadConvertor PullRequest method
|
||||||
|
func (m *MSTeamsPayload) PullRequest(p *api.PullRequestPayload) (api.Payloader, error) {
|
||||||
text, _, attachmentText, color := getPullRequestPayloadInfo(p, noneLinkFormatter, false)
|
text, _, attachmentText, color := getPullRequestPayloadInfo(p, noneLinkFormatter, false)
|
||||||
|
|
||||||
return &MSTeamsPayload{
|
return &MSTeamsPayload{
|
||||||
|
@ -391,7 +401,8 @@ func getMSTeamsPullRequestPayload(p *api.PullRequestPayload) (*MSTeamsPayload, e
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMSTeamsPullRequestApprovalPayload(p *api.PullRequestPayload, event models.HookEventType) (*MSTeamsPayload, error) {
|
// Review implements PayloadConvertor Review method
|
||||||
|
func (m *MSTeamsPayload) Review(p *api.PullRequestPayload, event models.HookEventType) (api.Payloader, error) {
|
||||||
var text, title string
|
var text, title string
|
||||||
var color int
|
var color int
|
||||||
switch p.Action {
|
switch p.Action {
|
||||||
|
@ -455,7 +466,8 @@ func getMSTeamsPullRequestApprovalPayload(p *api.PullRequestPayload, event model
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMSTeamsRepositoryPayload(p *api.RepositoryPayload) (*MSTeamsPayload, error) {
|
// Repository implements PayloadConvertor Repository method
|
||||||
|
func (m *MSTeamsPayload) Repository(p *api.RepositoryPayload) (api.Payloader, error) {
|
||||||
var title, url string
|
var title, url string
|
||||||
var color int
|
var color int
|
||||||
switch p.Action {
|
switch p.Action {
|
||||||
|
@ -502,7 +514,8 @@ func getMSTeamsRepositoryPayload(p *api.RepositoryPayload) (*MSTeamsPayload, err
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMSTeamsReleasePayload(p *api.ReleasePayload) (*MSTeamsPayload, error) {
|
// Release implements PayloadConvertor Release method
|
||||||
|
func (m *MSTeamsPayload) Release(p *api.ReleasePayload) (api.Payloader, error) {
|
||||||
text, color := getReleasePayloadInfo(p, noneLinkFormatter, false)
|
text, color := getReleasePayloadInfo(p, noneLinkFormatter, false)
|
||||||
|
|
||||||
return &MSTeamsPayload{
|
return &MSTeamsPayload{
|
||||||
|
@ -545,36 +558,6 @@ func getMSTeamsReleasePayload(p *api.ReleasePayload) (*MSTeamsPayload, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMSTeamsPayload converts a MSTeams webhook into a MSTeamsPayload
|
// GetMSTeamsPayload converts a MSTeams webhook into a MSTeamsPayload
|
||||||
func GetMSTeamsPayload(p api.Payloader, event models.HookEventType, meta string) (*MSTeamsPayload, error) {
|
func GetMSTeamsPayload(p api.Payloader, event models.HookEventType, meta string) (api.Payloader, error) {
|
||||||
s := new(MSTeamsPayload)
|
return convertPayloader(new(MSTeamsPayload), p, event)
|
||||||
|
|
||||||
switch event {
|
|
||||||
case models.HookEventCreate:
|
|
||||||
return getMSTeamsCreatePayload(p.(*api.CreatePayload))
|
|
||||||
case models.HookEventDelete:
|
|
||||||
return getMSTeamsDeletePayload(p.(*api.DeletePayload))
|
|
||||||
case models.HookEventFork:
|
|
||||||
return getMSTeamsForkPayload(p.(*api.ForkPayload))
|
|
||||||
case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone:
|
|
||||||
return getMSTeamsIssuesPayload(p.(*api.IssuePayload))
|
|
||||||
case models.HookEventIssueComment, models.HookEventPullRequestComment:
|
|
||||||
pl, ok := p.(*api.IssueCommentPayload)
|
|
||||||
if ok {
|
|
||||||
return getMSTeamsIssueCommentPayload(pl)
|
|
||||||
}
|
|
||||||
return getMSTeamsPullRequestPayload(p.(*api.PullRequestPayload))
|
|
||||||
case models.HookEventPush:
|
|
||||||
return getMSTeamsPushPayload(p.(*api.PushPayload))
|
|
||||||
case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel,
|
|
||||||
models.HookEventPullRequestMilestone, models.HookEventPullRequestSync:
|
|
||||||
return getMSTeamsPullRequestPayload(p.(*api.PullRequestPayload))
|
|
||||||
case models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewComment:
|
|
||||||
return getMSTeamsPullRequestApprovalPayload(p.(*api.PullRequestPayload), event)
|
|
||||||
case models.HookEventRepository:
|
|
||||||
return getMSTeamsRepositoryPayload(p.(*api.RepositoryPayload))
|
|
||||||
case models.HookEventRelease:
|
|
||||||
return getMSTeamsReleasePayload(p.(*api.ReleasePayload))
|
|
||||||
}
|
|
||||||
|
|
||||||
return s, nil
|
|
||||||
}
|
}
|
||||||
|
|
56
modules/webhook/payloader.go
Normal file
56
modules/webhook/payloader.go
Normal file
|
@ -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
|
||||||
|
}
|
|
@ -38,6 +38,7 @@ func GetSlackHook(w *models.Webhook) *SlackMeta {
|
||||||
type SlackPayload struct {
|
type SlackPayload struct {
|
||||||
Channel string `json:"channel"`
|
Channel string `json:"channel"`
|
||||||
Text string `json:"text"`
|
Text string `json:"text"`
|
||||||
|
Color string `json:"-"`
|
||||||
Username string `json:"username"`
|
Username string `json:"username"`
|
||||||
IconURL string `json:"icon_url"`
|
IconURL string `json:"icon_url"`
|
||||||
UnfurlLinks int `json:"unfurl_links"`
|
UnfurlLinks int `json:"unfurl_links"`
|
||||||
|
@ -55,11 +56,11 @@ type SlackAttachment struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetSecret sets the slack secret
|
// SetSecret sets the slack secret
|
||||||
func (p *SlackPayload) SetSecret(_ string) {}
|
func (s *SlackPayload) SetSecret(_ string) {}
|
||||||
|
|
||||||
// JSONPayload Marshals the SlackPayload to json
|
// JSONPayload Marshals the SlackPayload to json
|
||||||
func (p *SlackPayload) JSONPayload() ([]byte, error) {
|
func (s *SlackPayload) JSONPayload() ([]byte, error) {
|
||||||
data, err := json.MarshalIndent(p, "", " ")
|
data, err := json.MarshalIndent(s, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
}
|
}
|
||||||
|
@ -98,53 +99,59 @@ func SlackLinkToRef(repoURL, ref string) string {
|
||||||
return SlackLinkFormatter(url, refName)
|
return SlackLinkFormatter(url, refName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSlackCreatePayload(p *api.CreatePayload, slack *SlackMeta) (*SlackPayload, error) {
|
var (
|
||||||
|
_ PayloadConvertor = &SlackPayload{}
|
||||||
|
)
|
||||||
|
|
||||||
|
// Create implements PayloadConvertor Create method
|
||||||
|
func (s *SlackPayload) Create(p *api.CreatePayload) (api.Payloader, error) {
|
||||||
repoLink := SlackLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
repoLink := SlackLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
||||||
refLink := SlackLinkToRef(p.Repo.HTMLURL, p.Ref)
|
refLink := SlackLinkToRef(p.Repo.HTMLURL, p.Ref)
|
||||||
text := fmt.Sprintf("[%s:%s] %s created by %s", repoLink, refLink, p.RefType, p.Sender.UserName)
|
text := fmt.Sprintf("[%s:%s] %s created by %s", repoLink, refLink, p.RefType, p.Sender.UserName)
|
||||||
|
|
||||||
return &SlackPayload{
|
return &SlackPayload{
|
||||||
Channel: slack.Channel,
|
Channel: s.Channel,
|
||||||
Text: text,
|
Text: text,
|
||||||
Username: slack.Username,
|
Username: s.Username,
|
||||||
IconURL: slack.IconURL,
|
IconURL: s.IconURL,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// getSlackDeletePayload composes Slack payload for delete a branch or tag.
|
// Delete composes Slack payload for delete a branch or tag.
|
||||||
func getSlackDeletePayload(p *api.DeletePayload, slack *SlackMeta) (*SlackPayload, error) {
|
func (s *SlackPayload) Delete(p *api.DeletePayload) (api.Payloader, error) {
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
repoLink := SlackLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
repoLink := SlackLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
||||||
text := fmt.Sprintf("[%s:%s] %s deleted by %s", repoLink, refName, p.RefType, p.Sender.UserName)
|
text := fmt.Sprintf("[%s:%s] %s deleted by %s", repoLink, refName, p.RefType, p.Sender.UserName)
|
||||||
return &SlackPayload{
|
return &SlackPayload{
|
||||||
Channel: slack.Channel,
|
Channel: s.Channel,
|
||||||
Text: text,
|
Text: text,
|
||||||
Username: slack.Username,
|
Username: s.Username,
|
||||||
IconURL: slack.IconURL,
|
IconURL: s.IconURL,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// getSlackForkPayload composes Slack payload for forked by a repository.
|
// Fork composes Slack payload for forked by a repository.
|
||||||
func getSlackForkPayload(p *api.ForkPayload, slack *SlackMeta) (*SlackPayload, error) {
|
func (s *SlackPayload) Fork(p *api.ForkPayload) (api.Payloader, error) {
|
||||||
baseLink := SlackLinkFormatter(p.Forkee.HTMLURL, p.Forkee.FullName)
|
baseLink := SlackLinkFormatter(p.Forkee.HTMLURL, p.Forkee.FullName)
|
||||||
forkLink := SlackLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
forkLink := SlackLinkFormatter(p.Repo.HTMLURL, p.Repo.FullName)
|
||||||
text := fmt.Sprintf("%s is forked to %s", baseLink, forkLink)
|
text := fmt.Sprintf("%s is forked to %s", baseLink, forkLink)
|
||||||
return &SlackPayload{
|
return &SlackPayload{
|
||||||
Channel: slack.Channel,
|
Channel: s.Channel,
|
||||||
Text: text,
|
Text: text,
|
||||||
Username: slack.Username,
|
Username: s.Username,
|
||||||
IconURL: slack.IconURL,
|
IconURL: s.IconURL,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSlackIssuesPayload(p *api.IssuePayload, slack *SlackMeta) (*SlackPayload, error) {
|
// Issue implements PayloadConvertor Issue method
|
||||||
|
func (s *SlackPayload) Issue(p *api.IssuePayload) (api.Payloader, error) {
|
||||||
text, issueTitle, attachmentText, color := getIssuesPayloadInfo(p, SlackLinkFormatter, true)
|
text, issueTitle, attachmentText, color := getIssuesPayloadInfo(p, SlackLinkFormatter, true)
|
||||||
|
|
||||||
pl := &SlackPayload{
|
pl := &SlackPayload{
|
||||||
Channel: slack.Channel,
|
Channel: s.Channel,
|
||||||
Text: text,
|
Text: text,
|
||||||
Username: slack.Username,
|
Username: s.Username,
|
||||||
IconURL: slack.IconURL,
|
IconURL: s.IconURL,
|
||||||
}
|
}
|
||||||
if attachmentText != "" {
|
if attachmentText != "" {
|
||||||
attachmentText = SlackTextFormatter(attachmentText)
|
attachmentText = SlackTextFormatter(attachmentText)
|
||||||
|
@ -160,14 +167,15 @@ func getSlackIssuesPayload(p *api.IssuePayload, slack *SlackMeta) (*SlackPayload
|
||||||
return pl, nil
|
return pl, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSlackIssueCommentPayload(p *api.IssueCommentPayload, slack *SlackMeta) (*SlackPayload, error) {
|
// IssueComment implements PayloadConvertor IssueComment method
|
||||||
|
func (s *SlackPayload) IssueComment(p *api.IssueCommentPayload) (api.Payloader, error) {
|
||||||
text, issueTitle, color := getIssueCommentPayloadInfo(p, SlackLinkFormatter, true)
|
text, issueTitle, color := getIssueCommentPayloadInfo(p, SlackLinkFormatter, true)
|
||||||
|
|
||||||
return &SlackPayload{
|
return &SlackPayload{
|
||||||
Channel: slack.Channel,
|
Channel: s.Channel,
|
||||||
Text: text,
|
Text: text,
|
||||||
Username: slack.Username,
|
Username: s.Username,
|
||||||
IconURL: slack.IconURL,
|
IconURL: s.IconURL,
|
||||||
Attachments: []SlackAttachment{{
|
Attachments: []SlackAttachment{{
|
||||||
Color: fmt.Sprintf("%x", color),
|
Color: fmt.Sprintf("%x", color),
|
||||||
Title: issueTitle,
|
Title: issueTitle,
|
||||||
|
@ -177,18 +185,20 @@ func getSlackIssueCommentPayload(p *api.IssueCommentPayload, slack *SlackMeta) (
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSlackReleasePayload(p *api.ReleasePayload, slack *SlackMeta) (*SlackPayload, error) {
|
// Release implements PayloadConvertor Release method
|
||||||
|
func (s *SlackPayload) Release(p *api.ReleasePayload) (api.Payloader, error) {
|
||||||
text, _ := getReleasePayloadInfo(p, SlackLinkFormatter, true)
|
text, _ := getReleasePayloadInfo(p, SlackLinkFormatter, true)
|
||||||
|
|
||||||
return &SlackPayload{
|
return &SlackPayload{
|
||||||
Channel: slack.Channel,
|
Channel: s.Channel,
|
||||||
Text: text,
|
Text: text,
|
||||||
Username: slack.Username,
|
Username: s.Username,
|
||||||
IconURL: slack.IconURL,
|
IconURL: s.IconURL,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSlackPushPayload(p *api.PushPayload, slack *SlackMeta) (*SlackPayload, error) {
|
// Push implements PayloadConvertor Push method
|
||||||
|
func (s *SlackPayload) Push(p *api.PushPayload) (api.Payloader, error) {
|
||||||
// n new commits
|
// n new commits
|
||||||
var (
|
var (
|
||||||
commitDesc string
|
commitDesc string
|
||||||
|
@ -221,12 +231,12 @@ func getSlackPushPayload(p *api.PushPayload, slack *SlackMeta) (*SlackPayload, e
|
||||||
}
|
}
|
||||||
|
|
||||||
return &SlackPayload{
|
return &SlackPayload{
|
||||||
Channel: slack.Channel,
|
Channel: s.Channel,
|
||||||
Text: text,
|
Text: text,
|
||||||
Username: slack.Username,
|
Username: s.Username,
|
||||||
IconURL: slack.IconURL,
|
IconURL: s.IconURL,
|
||||||
Attachments: []SlackAttachment{{
|
Attachments: []SlackAttachment{{
|
||||||
Color: slack.Color,
|
Color: s.Color,
|
||||||
Title: p.Repo.HTMLURL,
|
Title: p.Repo.HTMLURL,
|
||||||
TitleLink: p.Repo.HTMLURL,
|
TitleLink: p.Repo.HTMLURL,
|
||||||
Text: attachmentText,
|
Text: attachmentText,
|
||||||
|
@ -234,14 +244,15 @@ func getSlackPushPayload(p *api.PushPayload, slack *SlackMeta) (*SlackPayload, e
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSlackPullRequestPayload(p *api.PullRequestPayload, slack *SlackMeta) (*SlackPayload, error) {
|
// PullRequest implements PayloadConvertor PullRequest method
|
||||||
|
func (s *SlackPayload) PullRequest(p *api.PullRequestPayload) (api.Payloader, error) {
|
||||||
text, issueTitle, attachmentText, color := getPullRequestPayloadInfo(p, SlackLinkFormatter, true)
|
text, issueTitle, attachmentText, color := getPullRequestPayloadInfo(p, SlackLinkFormatter, true)
|
||||||
|
|
||||||
pl := &SlackPayload{
|
pl := &SlackPayload{
|
||||||
Channel: slack.Channel,
|
Channel: s.Channel,
|
||||||
Text: text,
|
Text: text,
|
||||||
Username: slack.Username,
|
Username: s.Username,
|
||||||
IconURL: slack.IconURL,
|
IconURL: s.IconURL,
|
||||||
}
|
}
|
||||||
if attachmentText != "" {
|
if attachmentText != "" {
|
||||||
attachmentText = SlackTextFormatter(p.PullRequest.Body)
|
attachmentText = SlackTextFormatter(p.PullRequest.Body)
|
||||||
|
@ -257,7 +268,8 @@ func getSlackPullRequestPayload(p *api.PullRequestPayload, slack *SlackMeta) (*S
|
||||||
return pl, nil
|
return pl, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSlackPullRequestApprovalPayload(p *api.PullRequestPayload, slack *SlackMeta, event models.HookEventType) (*SlackPayload, error) {
|
// Review implements PayloadConvertor Review method
|
||||||
|
func (s *SlackPayload) Review(p *api.PullRequestPayload, event models.HookEventType) (api.Payloader, error) {
|
||||||
senderLink := SlackLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName)
|
senderLink := SlackLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName)
|
||||||
title := fmt.Sprintf("#%d %s", p.Index, p.PullRequest.Title)
|
title := fmt.Sprintf("#%d %s", p.Index, p.PullRequest.Title)
|
||||||
titleLink := fmt.Sprintf("%s/pulls/%d", p.Repository.HTMLURL, p.Index)
|
titleLink := fmt.Sprintf("%s/pulls/%d", p.Repository.HTMLURL, p.Index)
|
||||||
|
@ -275,14 +287,15 @@ func getSlackPullRequestApprovalPayload(p *api.PullRequestPayload, slack *SlackM
|
||||||
}
|
}
|
||||||
|
|
||||||
return &SlackPayload{
|
return &SlackPayload{
|
||||||
Channel: slack.Channel,
|
Channel: s.Channel,
|
||||||
Text: text,
|
Text: text,
|
||||||
Username: slack.Username,
|
Username: s.Username,
|
||||||
IconURL: slack.IconURL,
|
IconURL: s.IconURL,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSlackRepositoryPayload(p *api.RepositoryPayload, slack *SlackMeta) (*SlackPayload, error) {
|
// Repository implements PayloadConvertor Repository method
|
||||||
|
func (s *SlackPayload) Repository(p *api.RepositoryPayload) (api.Payloader, error) {
|
||||||
senderLink := SlackLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName)
|
senderLink := SlackLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName)
|
||||||
repoLink := SlackLinkFormatter(p.Repository.HTMLURL, p.Repository.FullName)
|
repoLink := SlackLinkFormatter(p.Repository.HTMLURL, p.Repository.FullName)
|
||||||
var text string
|
var text string
|
||||||
|
@ -295,15 +308,15 @@ func getSlackRepositoryPayload(p *api.RepositoryPayload, slack *SlackMeta) (*Sla
|
||||||
}
|
}
|
||||||
|
|
||||||
return &SlackPayload{
|
return &SlackPayload{
|
||||||
Channel: slack.Channel,
|
Channel: s.Channel,
|
||||||
Text: text,
|
Text: text,
|
||||||
Username: slack.Username,
|
Username: s.Username,
|
||||||
IconURL: slack.IconURL,
|
IconURL: s.IconURL,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSlackPayload converts a slack webhook into a SlackPayload
|
// GetSlackPayload converts a slack webhook into a SlackPayload
|
||||||
func GetSlackPayload(p api.Payloader, event models.HookEventType, meta string) (*SlackPayload, error) {
|
func GetSlackPayload(p api.Payloader, event models.HookEventType, meta string) (api.Payloader, error) {
|
||||||
s := new(SlackPayload)
|
s := new(SlackPayload)
|
||||||
|
|
||||||
slack := &SlackMeta{}
|
slack := &SlackMeta{}
|
||||||
|
@ -311,33 +324,10 @@ func GetSlackPayload(p api.Payloader, event models.HookEventType, meta string) (
|
||||||
return s, errors.New("GetSlackPayload meta json:" + err.Error())
|
return s, errors.New("GetSlackPayload meta json:" + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
switch event {
|
s.Channel = slack.Channel
|
||||||
case models.HookEventCreate:
|
s.Username = slack.Username
|
||||||
return getSlackCreatePayload(p.(*api.CreatePayload), slack)
|
s.IconURL = slack.IconURL
|
||||||
case models.HookEventDelete:
|
s.Color = slack.Color
|
||||||
return getSlackDeletePayload(p.(*api.DeletePayload), slack)
|
|
||||||
case models.HookEventFork:
|
|
||||||
return getSlackForkPayload(p.(*api.ForkPayload), slack)
|
|
||||||
case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone:
|
|
||||||
return getSlackIssuesPayload(p.(*api.IssuePayload), slack)
|
|
||||||
case models.HookEventIssueComment, models.HookEventPullRequestComment:
|
|
||||||
pl, ok := p.(*api.IssueCommentPayload)
|
|
||||||
if ok {
|
|
||||||
return getSlackIssueCommentPayload(pl, slack)
|
|
||||||
}
|
|
||||||
return getSlackPullRequestPayload(p.(*api.PullRequestPayload), slack)
|
|
||||||
case models.HookEventPush:
|
|
||||||
return getSlackPushPayload(p.(*api.PushPayload), slack)
|
|
||||||
case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel,
|
|
||||||
models.HookEventPullRequestMilestone, models.HookEventPullRequestSync:
|
|
||||||
return getSlackPullRequestPayload(p.(*api.PullRequestPayload), slack)
|
|
||||||
case models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewComment:
|
|
||||||
return getSlackPullRequestApprovalPayload(p.(*api.PullRequestPayload), slack, event)
|
|
||||||
case models.HookEventRepository:
|
|
||||||
return getSlackRepositoryPayload(p.(*api.RepositoryPayload), slack)
|
|
||||||
case models.HookEventRelease:
|
|
||||||
return getSlackReleasePayload(p.(*api.ReleasePayload), slack)
|
|
||||||
}
|
|
||||||
|
|
||||||
return s, nil
|
return convertPayloader(s, p, event)
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,75 +14,67 @@ import (
|
||||||
|
|
||||||
func TestSlackIssuesPayloadOpened(t *testing.T) {
|
func TestSlackIssuesPayloadOpened(t *testing.T) {
|
||||||
p := issueTestPayload()
|
p := issueTestPayload()
|
||||||
sl := &SlackMeta{
|
|
||||||
Username: p.Sender.UserName,
|
|
||||||
}
|
|
||||||
|
|
||||||
p.Action = api.HookIssueOpened
|
p.Action = api.HookIssueOpened
|
||||||
pl, err := getSlackIssuesPayload(p, sl)
|
|
||||||
|
s := new(SlackPayload)
|
||||||
|
s.Username = p.Sender.UserName
|
||||||
|
|
||||||
|
pl, err := s.Issue(p)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Issue opened: <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.Text)
|
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Issue opened: <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
|
||||||
|
|
||||||
p.Action = api.HookIssueClosed
|
p.Action = api.HookIssueClosed
|
||||||
pl, err = getSlackIssuesPayload(p, sl)
|
pl, err = s.Issue(p)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Issue closed: <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.Text)
|
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Issue closed: <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSlackIssueCommentPayload(t *testing.T) {
|
func TestSlackIssueCommentPayload(t *testing.T) {
|
||||||
p := issueCommentTestPayload()
|
p := issueCommentTestPayload()
|
||||||
|
s := new(SlackPayload)
|
||||||
|
s.Username = p.Sender.UserName
|
||||||
|
|
||||||
sl := &SlackMeta{
|
pl, err := s.IssueComment(p)
|
||||||
Username: p.Sender.UserName,
|
|
||||||
}
|
|
||||||
|
|
||||||
pl, err := getSlackIssueCommentPayload(p, sl)
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
|
|
||||||
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] New comment on issue <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.Text)
|
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] New comment on issue <http://localhost:3000/test/repo/issues/2|#2 crash> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSlackPullRequestCommentPayload(t *testing.T) {
|
func TestSlackPullRequestCommentPayload(t *testing.T) {
|
||||||
p := pullRequestCommentTestPayload()
|
p := pullRequestCommentTestPayload()
|
||||||
|
s := new(SlackPayload)
|
||||||
|
s.Username = p.Sender.UserName
|
||||||
|
|
||||||
sl := &SlackMeta{
|
pl, err := s.IssueComment(p)
|
||||||
Username: p.Sender.UserName,
|
|
||||||
}
|
|
||||||
|
|
||||||
pl, err := getSlackIssueCommentPayload(p, sl)
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
|
|
||||||
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] New comment on pull request <http://localhost:3000/test/repo/pulls/2|#2 Fix bug> by <https://try.gitea.io/user1|user1>", pl.Text)
|
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] New comment on pull request <http://localhost:3000/test/repo/pulls/2|#2 Fix bug> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSlackReleasePayload(t *testing.T) {
|
func TestSlackReleasePayload(t *testing.T) {
|
||||||
p := pullReleaseTestPayload()
|
p := pullReleaseTestPayload()
|
||||||
|
s := new(SlackPayload)
|
||||||
|
s.Username = p.Sender.UserName
|
||||||
|
|
||||||
sl := &SlackMeta{
|
pl, err := s.Release(p)
|
||||||
Username: p.Sender.UserName,
|
|
||||||
}
|
|
||||||
|
|
||||||
pl, err := getSlackReleasePayload(p, sl)
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
|
|
||||||
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Release created: <http://localhost:3000/test/repo/src/v1.0|v1.0> by <https://try.gitea.io/user1|user1>", pl.Text)
|
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Release created: <http://localhost:3000/test/repo/src/v1.0|v1.0> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSlackPullRequestPayload(t *testing.T) {
|
func TestSlackPullRequestPayload(t *testing.T) {
|
||||||
p := pullRequestTestPayload()
|
p := pullRequestTestPayload()
|
||||||
|
s := new(SlackPayload)
|
||||||
|
s.Username = p.Sender.UserName
|
||||||
|
|
||||||
sl := &SlackMeta{
|
pl, err := s.PullRequest(p)
|
||||||
Username: p.Sender.UserName,
|
|
||||||
}
|
|
||||||
|
|
||||||
pl, err := getSlackPullRequestPayload(p, sl)
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
|
|
||||||
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Pull request opened: <http://localhost:3000/test/repo/pulls/12|#2 Fix bug> by <https://try.gitea.io/user1|user1>", pl.Text)
|
assert.Equal(t, "[<http://localhost:3000/test/repo|test/repo>] Pull request opened: <http://localhost:3000/test/repo/pulls/12|#2 Fix bug> by <https://try.gitea.io/user1|user1>", pl.(*SlackPayload).Text)
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,22 +40,27 @@ func GetTelegramHook(w *models.Webhook) *TelegramMeta {
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
_ PayloadConvertor = &TelegramPayload{}
|
||||||
|
)
|
||||||
|
|
||||||
// SetSecret sets the telegram secret
|
// SetSecret sets the telegram secret
|
||||||
func (p *TelegramPayload) SetSecret(_ string) {}
|
func (t *TelegramPayload) SetSecret(_ string) {}
|
||||||
|
|
||||||
// JSONPayload Marshals the TelegramPayload to json
|
// JSONPayload Marshals the TelegramPayload to json
|
||||||
func (p *TelegramPayload) JSONPayload() ([]byte, error) {
|
func (t *TelegramPayload) JSONPayload() ([]byte, error) {
|
||||||
p.ParseMode = "HTML"
|
t.ParseMode = "HTML"
|
||||||
p.DisableWebPreview = true
|
t.DisableWebPreview = true
|
||||||
p.Message = markup.Sanitize(p.Message)
|
t.Message = markup.Sanitize(t.Message)
|
||||||
data, err := json.MarshalIndent(p, "", " ")
|
data, err := json.MarshalIndent(t, "", " ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
}
|
}
|
||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTelegramCreatePayload(p *api.CreatePayload) (*TelegramPayload, error) {
|
// Create implements PayloadConvertor Create method
|
||||||
|
func (t *TelegramPayload) Create(p *api.CreatePayload) (api.Payloader, error) {
|
||||||
// created tag/branch
|
// created tag/branch
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
title := fmt.Sprintf(`[<a href="%s">%s</a>] %s <a href="%s">%s</a> created`, p.Repo.HTMLURL, p.Repo.FullName, p.RefType,
|
title := fmt.Sprintf(`[<a href="%s">%s</a>] %s <a href="%s">%s</a> created`, p.Repo.HTMLURL, p.Repo.FullName, p.RefType,
|
||||||
|
@ -66,7 +71,8 @@ func getTelegramCreatePayload(p *api.CreatePayload) (*TelegramPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTelegramDeletePayload(p *api.DeletePayload) (*TelegramPayload, error) {
|
// Delete implements PayloadConvertor Delete method
|
||||||
|
func (t *TelegramPayload) Delete(p *api.DeletePayload) (api.Payloader, error) {
|
||||||
// created tag/branch
|
// created tag/branch
|
||||||
refName := git.RefEndName(p.Ref)
|
refName := git.RefEndName(p.Ref)
|
||||||
title := fmt.Sprintf(`[<a href="%s">%s</a>] %s <a href="%s">%s</a> deleted`, p.Repo.HTMLURL, p.Repo.FullName, p.RefType,
|
title := fmt.Sprintf(`[<a href="%s">%s</a>] %s <a href="%s">%s</a> deleted`, p.Repo.HTMLURL, p.Repo.FullName, p.RefType,
|
||||||
|
@ -77,7 +83,8 @@ func getTelegramDeletePayload(p *api.DeletePayload) (*TelegramPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTelegramForkPayload(p *api.ForkPayload) (*TelegramPayload, error) {
|
// Fork implements PayloadConvertor Fork method
|
||||||
|
func (t *TelegramPayload) Fork(p *api.ForkPayload) (api.Payloader, error) {
|
||||||
title := fmt.Sprintf(`%s is forked to <a href="%s">%s</a>`, p.Forkee.FullName, p.Repo.HTMLURL, p.Repo.FullName)
|
title := fmt.Sprintf(`%s is forked to <a href="%s">%s</a>`, p.Forkee.FullName, p.Repo.HTMLURL, p.Repo.FullName)
|
||||||
|
|
||||||
return &TelegramPayload{
|
return &TelegramPayload{
|
||||||
|
@ -85,7 +92,8 @@ func getTelegramForkPayload(p *api.ForkPayload) (*TelegramPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTelegramPushPayload(p *api.PushPayload) (*TelegramPayload, error) {
|
// Push implements PayloadConvertor Push method
|
||||||
|
func (t *TelegramPayload) Push(p *api.PushPayload) (api.Payloader, error) {
|
||||||
var (
|
var (
|
||||||
branchName = git.RefEndName(p.Ref)
|
branchName = git.RefEndName(p.Ref)
|
||||||
commitDesc string
|
commitDesc string
|
||||||
|
@ -124,7 +132,8 @@ func getTelegramPushPayload(p *api.PushPayload) (*TelegramPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTelegramIssuesPayload(p *api.IssuePayload) (*TelegramPayload, error) {
|
// Issue implements PayloadConvertor Issue method
|
||||||
|
func (t *TelegramPayload) Issue(p *api.IssuePayload) (api.Payloader, error) {
|
||||||
text, _, attachmentText, _ := getIssuesPayloadInfo(p, htmlLinkFormatter, true)
|
text, _, attachmentText, _ := getIssuesPayloadInfo(p, htmlLinkFormatter, true)
|
||||||
|
|
||||||
return &TelegramPayload{
|
return &TelegramPayload{
|
||||||
|
@ -132,7 +141,8 @@ func getTelegramIssuesPayload(p *api.IssuePayload) (*TelegramPayload, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTelegramIssueCommentPayload(p *api.IssueCommentPayload) (*TelegramPayload, error) {
|
// IssueComment implements PayloadConvertor IssueComment method
|
||||||
|
func (t *TelegramPayload) IssueComment(p *api.IssueCommentPayload) (api.Payloader, error) {
|
||||||
text, _, _ := getIssueCommentPayloadInfo(p, htmlLinkFormatter, true)
|
text, _, _ := getIssueCommentPayloadInfo(p, htmlLinkFormatter, true)
|
||||||
|
|
||||||
return &TelegramPayload{
|
return &TelegramPayload{
|
||||||
|
@ -140,7 +150,8 @@ func getTelegramIssueCommentPayload(p *api.IssueCommentPayload) (*TelegramPayloa
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTelegramPullRequestPayload(p *api.PullRequestPayload) (*TelegramPayload, error) {
|
// PullRequest implements PayloadConvertor PullRequest method
|
||||||
|
func (t *TelegramPayload) PullRequest(p *api.PullRequestPayload) (api.Payloader, error) {
|
||||||
text, _, attachmentText, _ := getPullRequestPayloadInfo(p, htmlLinkFormatter, true)
|
text, _, attachmentText, _ := getPullRequestPayloadInfo(p, htmlLinkFormatter, true)
|
||||||
|
|
||||||
return &TelegramPayload{
|
return &TelegramPayload{
|
||||||
|
@ -148,7 +159,8 @@ func getTelegramPullRequestPayload(p *api.PullRequestPayload) (*TelegramPayload,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTelegramPullRequestApprovalPayload(p *api.PullRequestPayload, event models.HookEventType) (*TelegramPayload, error) {
|
// Review implements PayloadConvertor Review method
|
||||||
|
func (t *TelegramPayload) Review(p *api.PullRequestPayload, event models.HookEventType) (api.Payloader, error) {
|
||||||
var text, attachmentText string
|
var text, attachmentText string
|
||||||
switch p.Action {
|
switch p.Action {
|
||||||
case api.HookIssueReviewed:
|
case api.HookIssueReviewed:
|
||||||
|
@ -167,7 +179,8 @@ func getTelegramPullRequestApprovalPayload(p *api.PullRequestPayload, event mode
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTelegramRepositoryPayload(p *api.RepositoryPayload) (*TelegramPayload, error) {
|
// Repository implements PayloadConvertor Repository method
|
||||||
|
func (t *TelegramPayload) Repository(p *api.RepositoryPayload) (api.Payloader, error) {
|
||||||
var title string
|
var title string
|
||||||
switch p.Action {
|
switch p.Action {
|
||||||
case api.HookRepoCreated:
|
case api.HookRepoCreated:
|
||||||
|
@ -184,7 +197,8 @@ func getTelegramRepositoryPayload(p *api.RepositoryPayload) (*TelegramPayload, e
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTelegramReleasePayload(p *api.ReleasePayload) (*TelegramPayload, error) {
|
// Release implements PayloadConvertor Release method
|
||||||
|
func (t *TelegramPayload) Release(p *api.ReleasePayload) (api.Payloader, error) {
|
||||||
text, _ := getReleasePayloadInfo(p, htmlLinkFormatter, true)
|
text, _ := getReleasePayloadInfo(p, htmlLinkFormatter, true)
|
||||||
|
|
||||||
return &TelegramPayload{
|
return &TelegramPayload{
|
||||||
|
@ -193,36 +207,6 @@ func getTelegramReleasePayload(p *api.ReleasePayload) (*TelegramPayload, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetTelegramPayload converts a telegram webhook into a TelegramPayload
|
// GetTelegramPayload converts a telegram webhook into a TelegramPayload
|
||||||
func GetTelegramPayload(p api.Payloader, event models.HookEventType, meta string) (*TelegramPayload, error) {
|
func GetTelegramPayload(p api.Payloader, event models.HookEventType, meta string) (api.Payloader, error) {
|
||||||
s := new(TelegramPayload)
|
return convertPayloader(new(TelegramPayload), p, event)
|
||||||
|
|
||||||
switch event {
|
|
||||||
case models.HookEventCreate:
|
|
||||||
return getTelegramCreatePayload(p.(*api.CreatePayload))
|
|
||||||
case models.HookEventDelete:
|
|
||||||
return getTelegramDeletePayload(p.(*api.DeletePayload))
|
|
||||||
case models.HookEventFork:
|
|
||||||
return getTelegramForkPayload(p.(*api.ForkPayload))
|
|
||||||
case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone:
|
|
||||||
return getTelegramIssuesPayload(p.(*api.IssuePayload))
|
|
||||||
case models.HookEventIssueComment, models.HookEventPullRequestComment:
|
|
||||||
pl, ok := p.(*api.IssueCommentPayload)
|
|
||||||
if ok {
|
|
||||||
return getTelegramIssueCommentPayload(pl)
|
|
||||||
}
|
|
||||||
return getTelegramPullRequestPayload(p.(*api.PullRequestPayload))
|
|
||||||
case models.HookEventPush:
|
|
||||||
return getTelegramPushPayload(p.(*api.PushPayload))
|
|
||||||
case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel,
|
|
||||||
models.HookEventPullRequestMilestone, models.HookEventPullRequestSync:
|
|
||||||
return getTelegramPullRequestPayload(p.(*api.PullRequestPayload))
|
|
||||||
case models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewComment:
|
|
||||||
return getTelegramPullRequestApprovalPayload(p.(*api.PullRequestPayload), event)
|
|
||||||
case models.HookEventRepository:
|
|
||||||
return getTelegramRepositoryPayload(p.(*api.RepositoryPayload))
|
|
||||||
case models.HookEventRelease:
|
|
||||||
return getTelegramReleasePayload(p.(*api.ReleasePayload))
|
|
||||||
}
|
|
||||||
|
|
||||||
return s, nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,9 +16,9 @@ func TestGetTelegramIssuesPayload(t *testing.T) {
|
||||||
p := issueTestPayload()
|
p := issueTestPayload()
|
||||||
p.Action = api.HookIssueClosed
|
p.Action = api.HookIssueClosed
|
||||||
|
|
||||||
pl, err := getTelegramIssuesPayload(p)
|
pl, err := new(TelegramPayload).Issue(p)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, pl)
|
require.NotNil(t, pl)
|
||||||
|
|
||||||
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] Issue closed: <a href=\"http://localhost:3000/test/repo/issues/2\">#2 crash</a> by <a href=\"https://try.gitea.io/user1\">user1</a>\n\n", pl.Message)
|
assert.Equal(t, "[<a href=\"http://localhost:3000/test/repo\">test/repo</a>] Issue closed: <a href=\"http://localhost:3000/test/repo/issues/2\">#2 crash</a> by <a href=\"https://try.gitea.io/user1\">user1</a>\n\n", pl.(*TelegramPayload).Message)
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue