* Move more webhook codes from models to webhook moduletags/v1.11.0-rc1
@@ -118,33 +118,6 @@ func (w *Webhook) AfterLoad() { | |||
} | |||
} | |||
// GetSlackHook returns slack metadata | |||
func (w *Webhook) GetSlackHook() *SlackMeta { | |||
s := &SlackMeta{} | |||
if err := json.Unmarshal([]byte(w.Meta), s); err != nil { | |||
log.Error("webhook.GetSlackHook(%d): %v", w.ID, err) | |||
} | |||
return s | |||
} | |||
// GetDiscordHook returns discord metadata | |||
func (w *Webhook) GetDiscordHook() *DiscordMeta { | |||
s := &DiscordMeta{} | |||
if err := json.Unmarshal([]byte(w.Meta), s); err != nil { | |||
log.Error("webhook.GetDiscordHook(%d): %v", w.ID, err) | |||
} | |||
return s | |||
} | |||
// GetTelegramHook returns telegram metadata | |||
func (w *Webhook) GetTelegramHook() *TelegramMeta { | |||
s := &TelegramMeta{} | |||
if err := json.Unmarshal([]byte(w.Meta), s); err != nil { | |||
log.Error("webhook.GetTelegramHook(%d): %v", w.ID, err) | |||
} | |||
return s | |||
} | |||
// History returns history of webhook by given conditions. | |||
func (w *Webhook) History(page int) ([]*HookTask, error) { | |||
return HookTasks(w.ID, page) |
@@ -24,18 +24,6 @@ func TestIsValidHookContentType(t *testing.T) { | |||
assert.False(t, IsValidHookContentType("invalid")) | |||
} | |||
func TestWebhook_GetSlackHook(t *testing.T) { | |||
w := &Webhook{ | |||
Meta: `{"channel": "foo", "username": "username", "color": "blue"}`, | |||
} | |||
slackHook := w.GetSlackHook() | |||
assert.Equal(t, *slackHook, SlackMeta{ | |||
Channel: "foo", | |||
Username: "username", | |||
Color: "blue", | |||
}) | |||
} | |||
func TestWebhook_History(t *testing.T) { | |||
assert.NoError(t, PrepareTestDatabase()) | |||
webhook := AssertExistsAndLoadBean(t, &Webhook{ID: 1}).(*Webhook) |
@@ -2,13 +2,14 @@ | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
package models | |||
package webhook | |||
import ( | |||
"encoding/json" | |||
"fmt" | |||
"strings" | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/git" | |||
api "code.gitea.io/gitea/modules/structs" | |||
@@ -184,7 +185,7 @@ func getDingtalkIssuesPayload(p *api.IssuePayload) (*DingtalkPayload, error) { | |||
func getDingtalkIssueCommentPayload(p *api.IssueCommentPayload) (*DingtalkPayload, error) { | |||
title := fmt.Sprintf("#%d: %s", p.Issue.Index, p.Issue.Title) | |||
url := fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, CommentHashTag(p.Comment.ID)) | |||
url := fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, models.CommentHashTag(p.Comment.ID)) | |||
var content string | |||
switch p.Action { | |||
case api.HookIssueCommentCreated: | |||
@@ -286,7 +287,7 @@ func getDingtalkPullRequestPayload(p *api.PullRequestPayload) (*DingtalkPayload, | |||
}, nil | |||
} | |||
func getDingtalkPullRequestApprovalPayload(p *api.PullRequestPayload, event HookEventType) (*DingtalkPayload, error) { | |||
func getDingtalkPullRequestApprovalPayload(p *api.PullRequestPayload, event models.HookEventType) (*DingtalkPayload, error) { | |||
var text, title string | |||
switch p.Action { | |||
case api.HookIssueSynchronized: | |||
@@ -392,29 +393,29 @@ func getDingtalkReleasePayload(p *api.ReleasePayload) (*DingtalkPayload, error) | |||
} | |||
// GetDingtalkPayload converts a ding talk webhook into a DingtalkPayload | |||
func GetDingtalkPayload(p api.Payloader, event HookEventType, meta string) (*DingtalkPayload, error) { | |||
func GetDingtalkPayload(p api.Payloader, event models.HookEventType, meta string) (*DingtalkPayload, error) { | |||
s := new(DingtalkPayload) | |||
switch event { | |||
case HookEventCreate: | |||
case models.HookEventCreate: | |||
return getDingtalkCreatePayload(p.(*api.CreatePayload)) | |||
case HookEventDelete: | |||
case models.HookEventDelete: | |||
return getDingtalkDeletePayload(p.(*api.DeletePayload)) | |||
case HookEventFork: | |||
case models.HookEventFork: | |||
return getDingtalkForkPayload(p.(*api.ForkPayload)) | |||
case HookEventIssues: | |||
case models.HookEventIssues: | |||
return getDingtalkIssuesPayload(p.(*api.IssuePayload)) | |||
case HookEventIssueComment: | |||
case models.HookEventIssueComment: | |||
return getDingtalkIssueCommentPayload(p.(*api.IssueCommentPayload)) | |||
case HookEventPush: | |||
case models.HookEventPush: | |||
return getDingtalkPushPayload(p.(*api.PushPayload)) | |||
case HookEventPullRequest: | |||
case models.HookEventPullRequest: | |||
return getDingtalkPullRequestPayload(p.(*api.PullRequestPayload)) | |||
case HookEventPullRequestApproved, HookEventPullRequestRejected, HookEventPullRequestComment: | |||
case models.HookEventPullRequestApproved, models.HookEventPullRequestRejected, models.HookEventPullRequestComment: | |||
return getDingtalkPullRequestApprovalPayload(p.(*api.PullRequestPayload), event) | |||
case HookEventRepository: | |||
case models.HookEventRepository: | |||
return getDingtalkRepositoryPayload(p.(*api.RepositoryPayload)) | |||
case HookEventRelease: | |||
case models.HookEventRelease: | |||
return getDingtalkReleasePayload(p.(*api.ReleasePayload)) | |||
} | |||
@@ -2,7 +2,7 @@ | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
package models | |||
package webhook | |||
import ( | |||
"encoding/json" | |||
@@ -11,7 +11,9 @@ import ( | |||
"strconv" | |||
"strings" | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/git" | |||
"code.gitea.io/gitea/modules/log" | |||
"code.gitea.io/gitea/modules/setting" | |||
api "code.gitea.io/gitea/modules/structs" | |||
) | |||
@@ -63,6 +65,15 @@ type ( | |||
} | |||
) | |||
// GetDiscordHook returns discord metadata | |||
func GetDiscordHook(w *models.Webhook) *DiscordMeta { | |||
s := &DiscordMeta{} | |||
if err := json.Unmarshal([]byte(w.Meta), s); err != nil { | |||
log.Error("webhook.GetDiscordHook(%d): %v", w.ID, err) | |||
} | |||
return s | |||
} | |||
func color(clr string) int { | |||
if clr != "" { | |||
clr = strings.TrimLeft(clr, "#") | |||
@@ -288,7 +299,7 @@ func getDiscordIssuesPayload(p *api.IssuePayload, meta *DiscordMeta) (*DiscordPa | |||
func getDiscordIssueCommentPayload(p *api.IssueCommentPayload, discord *DiscordMeta) (*DiscordPayload, error) { | |||
title := fmt.Sprintf("#%d: %s", p.Issue.Index, p.Issue.Title) | |||
url := fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, CommentHashTag(p.Comment.ID)) | |||
url := fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, models.CommentHashTag(p.Comment.ID)) | |||
content := "" | |||
var color int | |||
switch p.Action { | |||
@@ -421,7 +432,7 @@ func getDiscordPullRequestPayload(p *api.PullRequestPayload, meta *DiscordMeta) | |||
}, nil | |||
} | |||
func getDiscordPullRequestApprovalPayload(p *api.PullRequestPayload, meta *DiscordMeta, event HookEventType) (*DiscordPayload, error) { | |||
func getDiscordPullRequestApprovalPayload(p *api.PullRequestPayload, meta *DiscordMeta, event models.HookEventType) (*DiscordPayload, error) { | |||
var text, title string | |||
var color int | |||
switch p.Action { | |||
@@ -435,11 +446,11 @@ func getDiscordPullRequestApprovalPayload(p *api.PullRequestPayload, meta *Disco | |||
text = p.Review.Content | |||
switch event { | |||
case HookEventPullRequestApproved: | |||
case models.HookEventPullRequestApproved: | |||
color = greenColor | |||
case HookEventPullRequestRejected: | |||
case models.HookEventPullRequestRejected: | |||
color = redColor | |||
case HookEventPullRequestComment: | |||
case models.HookEventPullRequestComment: | |||
color = greyColor | |||
default: | |||
color = yellowColor | |||
@@ -534,7 +545,7 @@ func getDiscordReleasePayload(p *api.ReleasePayload, meta *DiscordMeta) (*Discor | |||
} | |||
// GetDiscordPayload converts a discord webhook into a DiscordPayload | |||
func GetDiscordPayload(p api.Payloader, event HookEventType, meta string) (*DiscordPayload, error) { | |||
func GetDiscordPayload(p api.Payloader, event models.HookEventType, meta string) (*DiscordPayload, error) { | |||
s := new(DiscordPayload) | |||
discord := &DiscordMeta{} | |||
@@ -543,40 +554,40 @@ func GetDiscordPayload(p api.Payloader, event HookEventType, meta string) (*Disc | |||
} | |||
switch event { | |||
case HookEventCreate: | |||
case models.HookEventCreate: | |||
return getDiscordCreatePayload(p.(*api.CreatePayload), discord) | |||
case HookEventDelete: | |||
case models.HookEventDelete: | |||
return getDiscordDeletePayload(p.(*api.DeletePayload), discord) | |||
case HookEventFork: | |||
case models.HookEventFork: | |||
return getDiscordForkPayload(p.(*api.ForkPayload), discord) | |||
case HookEventIssues: | |||
case models.HookEventIssues: | |||
return getDiscordIssuesPayload(p.(*api.IssuePayload), discord) | |||
case HookEventIssueComment: | |||
case models.HookEventIssueComment: | |||
return getDiscordIssueCommentPayload(p.(*api.IssueCommentPayload), discord) | |||
case HookEventPush: | |||
case models.HookEventPush: | |||
return getDiscordPushPayload(p.(*api.PushPayload), discord) | |||
case HookEventPullRequest: | |||
case models.HookEventPullRequest: | |||
return getDiscordPullRequestPayload(p.(*api.PullRequestPayload), discord) | |||
case HookEventPullRequestRejected, HookEventPullRequestApproved, HookEventPullRequestComment: | |||
case models.HookEventPullRequestRejected, models.HookEventPullRequestApproved, models.HookEventPullRequestComment: | |||
return getDiscordPullRequestApprovalPayload(p.(*api.PullRequestPayload), discord, event) | |||
case HookEventRepository: | |||
case models.HookEventRepository: | |||
return getDiscordRepositoryPayload(p.(*api.RepositoryPayload), discord) | |||
case HookEventRelease: | |||
case models.HookEventRelease: | |||
return getDiscordReleasePayload(p.(*api.ReleasePayload), discord) | |||
} | |||
return s, nil | |||
} | |||
func parseHookPullRequestEventType(event HookEventType) (string, error) { | |||
func parseHookPullRequestEventType(event models.HookEventType) (string, error) { | |||
switch event { | |||
case HookEventPullRequestApproved: | |||
case models.HookEventPullRequestApproved: | |||
return "approved", nil | |||
case HookEventPullRequestRejected: | |||
case models.HookEventPullRequestRejected: | |||
return "rejected", nil | |||
case HookEventPullRequestComment: | |||
case models.HookEventPullRequestComment: | |||
return "comment", nil | |||
default: |
@@ -2,13 +2,14 @@ | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
package models | |||
package webhook | |||
import ( | |||
"encoding/json" | |||
"fmt" | |||
"strings" | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/git" | |||
api "code.gitea.io/gitea/modules/structs" | |||
) | |||
@@ -357,7 +358,7 @@ func getMSTeamsIssuesPayload(p *api.IssuePayload) (*MSTeamsPayload, error) { | |||
func getMSTeamsIssueCommentPayload(p *api.IssueCommentPayload) (*MSTeamsPayload, error) { | |||
title := fmt.Sprintf("#%d: %s", p.Issue.Index, p.Issue.Title) | |||
url := fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, CommentHashTag(p.Comment.ID)) | |||
url := fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, models.CommentHashTag(p.Comment.ID)) | |||
content := "" | |||
var color int | |||
switch p.Action { | |||
@@ -530,7 +531,7 @@ func getMSTeamsPullRequestPayload(p *api.PullRequestPayload) (*MSTeamsPayload, e | |||
}, nil | |||
} | |||
func getMSTeamsPullRequestApprovalPayload(p *api.PullRequestPayload, event HookEventType) (*MSTeamsPayload, error) { | |||
func getMSTeamsPullRequestApprovalPayload(p *api.PullRequestPayload, event models.HookEventType) (*MSTeamsPayload, error) { | |||
var text, title string | |||
var color int | |||
switch p.Action { | |||
@@ -544,11 +545,11 @@ func getMSTeamsPullRequestApprovalPayload(p *api.PullRequestPayload, event HookE | |||
text = p.Review.Content | |||
switch event { | |||
case HookEventPullRequestApproved: | |||
case models.HookEventPullRequestApproved: | |||
color = greenColor | |||
case HookEventPullRequestRejected: | |||
case models.HookEventPullRequestRejected: | |||
color = redColor | |||
case HookEventPullRequestComment: | |||
case models.HookEventPullRequestComment: | |||
color = greyColor | |||
default: | |||
color = yellowColor | |||
@@ -699,29 +700,29 @@ func getMSTeamsReleasePayload(p *api.ReleasePayload) (*MSTeamsPayload, error) { | |||
} | |||
// GetMSTeamsPayload converts a MSTeams webhook into a MSTeamsPayload | |||
func GetMSTeamsPayload(p api.Payloader, event HookEventType, meta string) (*MSTeamsPayload, error) { | |||
func GetMSTeamsPayload(p api.Payloader, event models.HookEventType, meta string) (*MSTeamsPayload, error) { | |||
s := new(MSTeamsPayload) | |||
switch event { | |||
case HookEventCreate: | |||
case models.HookEventCreate: | |||
return getMSTeamsCreatePayload(p.(*api.CreatePayload)) | |||
case HookEventDelete: | |||
case models.HookEventDelete: | |||
return getMSTeamsDeletePayload(p.(*api.DeletePayload)) | |||
case HookEventFork: | |||
case models.HookEventFork: | |||
return getMSTeamsForkPayload(p.(*api.ForkPayload)) | |||
case HookEventIssues: | |||
case models.HookEventIssues: | |||
return getMSTeamsIssuesPayload(p.(*api.IssuePayload)) | |||
case HookEventIssueComment: | |||
case models.HookEventIssueComment: | |||
return getMSTeamsIssueCommentPayload(p.(*api.IssueCommentPayload)) | |||
case HookEventPush: | |||
case models.HookEventPush: | |||
return getMSTeamsPushPayload(p.(*api.PushPayload)) | |||
case HookEventPullRequest: | |||
case models.HookEventPullRequest: | |||
return getMSTeamsPullRequestPayload(p.(*api.PullRequestPayload)) | |||
case HookEventPullRequestRejected, HookEventPullRequestApproved, HookEventPullRequestComment: | |||
case models.HookEventPullRequestRejected, models.HookEventPullRequestApproved, models.HookEventPullRequestComment: | |||
return getMSTeamsPullRequestApprovalPayload(p.(*api.PullRequestPayload), event) | |||
case HookEventRepository: | |||
case models.HookEventRepository: | |||
return getMSTeamsRepositoryPayload(p.(*api.RepositoryPayload)) | |||
case HookEventRelease: | |||
case models.HookEventRelease: | |||
return getMSTeamsReleasePayload(p.(*api.ReleasePayload)) | |||
} | |||
@@ -2,7 +2,7 @@ | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
package models | |||
package webhook | |||
import ( | |||
"encoding/json" | |||
@@ -10,7 +10,9 @@ import ( | |||
"fmt" | |||
"strings" | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/git" | |||
"code.gitea.io/gitea/modules/log" | |||
"code.gitea.io/gitea/modules/setting" | |||
api "code.gitea.io/gitea/modules/structs" | |||
) | |||
@@ -23,6 +25,15 @@ type SlackMeta struct { | |||
Color string `json:"color"` | |||
} | |||
// GetSlackHook returns slack metadata | |||
func GetSlackHook(w *models.Webhook) *SlackMeta { | |||
s := &SlackMeta{} | |||
if err := json.Unmarshal([]byte(w.Meta), s); err != nil { | |||
log.Error("webhook.GetSlackHook(%d): %v", w.ID, err) | |||
} | |||
return s | |||
} | |||
// SlackPayload contains the information about the slack channel | |||
type SlackPayload struct { | |||
Channel string `json:"channel"` | |||
@@ -181,7 +192,7 @@ func getSlackIssuesPayload(p *api.IssuePayload, slack *SlackMeta) (*SlackPayload | |||
func getSlackIssueCommentPayload(p *api.IssueCommentPayload, slack *SlackMeta) (*SlackPayload, error) { | |||
senderLink := SlackLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName) | |||
titleLink := SlackLinkFormatter(fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, CommentHashTag(p.Comment.ID)), | |||
titleLink := SlackLinkFormatter(fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, models.CommentHashTag(p.Comment.ID)), | |||
fmt.Sprintf("#%d %s", p.Issue.Index, p.Issue.Title)) | |||
var text, title, attachmentText string | |||
switch p.Action { | |||
@@ -335,7 +346,7 @@ func getSlackPullRequestPayload(p *api.PullRequestPayload, slack *SlackMeta) (*S | |||
}, nil | |||
} | |||
func getSlackPullRequestApprovalPayload(p *api.PullRequestPayload, slack *SlackMeta, event HookEventType) (*SlackPayload, error) { | |||
func getSlackPullRequestApprovalPayload(p *api.PullRequestPayload, slack *SlackMeta, event models.HookEventType) (*SlackPayload, error) { | |||
senderLink := SlackLinkFormatter(setting.AppURL+p.Sender.UserName, p.Sender.UserName) | |||
titleLink := SlackLinkFormatter(fmt.Sprintf("%s/pulls/%d", p.Repository.HTMLURL, p.Index), | |||
fmt.Sprintf("#%d %s", p.Index, p.PullRequest.Title)) | |||
@@ -388,7 +399,7 @@ func getSlackRepositoryPayload(p *api.RepositoryPayload, slack *SlackMeta) (*Sla | |||
} | |||
// GetSlackPayload converts a slack webhook into a SlackPayload | |||
func GetSlackPayload(p api.Payloader, event HookEventType, meta string) (*SlackPayload, error) { | |||
func GetSlackPayload(p api.Payloader, event models.HookEventType, meta string) (*SlackPayload, error) { | |||
s := new(SlackPayload) | |||
slack := &SlackMeta{} | |||
@@ -397,25 +408,25 @@ func GetSlackPayload(p api.Payloader, event HookEventType, meta string) (*SlackP | |||
} | |||
switch event { | |||
case HookEventCreate: | |||
case models.HookEventCreate: | |||
return getSlackCreatePayload(p.(*api.CreatePayload), slack) | |||
case HookEventDelete: | |||
case models.HookEventDelete: | |||
return getSlackDeletePayload(p.(*api.DeletePayload), slack) | |||
case HookEventFork: | |||
case models.HookEventFork: | |||
return getSlackForkPayload(p.(*api.ForkPayload), slack) | |||
case HookEventIssues: | |||
case models.HookEventIssues: | |||
return getSlackIssuesPayload(p.(*api.IssuePayload), slack) | |||
case HookEventIssueComment: | |||
case models.HookEventIssueComment: | |||
return getSlackIssueCommentPayload(p.(*api.IssueCommentPayload), slack) | |||
case HookEventPush: | |||
case models.HookEventPush: | |||
return getSlackPushPayload(p.(*api.PushPayload), slack) | |||
case HookEventPullRequest: | |||
case models.HookEventPullRequest: | |||
return getSlackPullRequestPayload(p.(*api.PullRequestPayload), slack) | |||
case HookEventPullRequestRejected, HookEventPullRequestApproved, HookEventPullRequestComment: | |||
case models.HookEventPullRequestRejected, models.HookEventPullRequestApproved, models.HookEventPullRequestComment: | |||
return getSlackPullRequestApprovalPayload(p.(*api.PullRequestPayload), slack, event) | |||
case HookEventRepository: | |||
case models.HookEventRepository: | |||
return getSlackRepositoryPayload(p.(*api.RepositoryPayload), slack) | |||
case HookEventRelease: | |||
case models.HookEventRelease: | |||
return getSlackReleasePayload(p.(*api.ReleasePayload), slack) | |||
} | |||
@@ -2,7 +2,7 @@ | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
package models | |||
package webhook | |||
import ( | |||
"encoding/json" | |||
@@ -10,7 +10,9 @@ import ( | |||
"html" | |||
"strings" | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/git" | |||
"code.gitea.io/gitea/modules/log" | |||
"code.gitea.io/gitea/modules/markup" | |||
api "code.gitea.io/gitea/modules/structs" | |||
) | |||
@@ -30,6 +32,15 @@ type ( | |||
} | |||
) | |||
// GetTelegramHook returns telegram metadata | |||
func GetTelegramHook(w *models.Webhook) *TelegramMeta { | |||
s := &TelegramMeta{} | |||
if err := json.Unmarshal([]byte(w.Meta), s); err != nil { | |||
log.Error("webhook.GetTelegramHook(%d): %v", w.ID, err) | |||
} | |||
return s | |||
} | |||
// SetSecret sets the telegram secret | |||
func (p *TelegramPayload) SetSecret(_ string) {} | |||
@@ -169,7 +180,7 @@ func getTelegramIssuesPayload(p *api.IssuePayload) (*TelegramPayload, error) { | |||
} | |||
func getTelegramIssueCommentPayload(p *api.IssueCommentPayload) (*TelegramPayload, error) { | |||
url := fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, CommentHashTag(p.Comment.ID)) | |||
url := fmt.Sprintf("%s/issues/%d#%s", p.Repository.HTMLURL, p.Issue.Index, models.CommentHashTag(p.Comment.ID)) | |||
title := fmt.Sprintf(`<a href="%s">#%d %s</a>`, url, p.Issue.Index, html.EscapeString(p.Issue.Title)) | |||
var text string | |||
switch p.Action { | |||
@@ -214,7 +225,7 @@ func getTelegramPullRequestPayload(p *api.PullRequestPayload) (*TelegramPayload, | |||
p.PullRequest.HTMLURL, p.Index, p.PullRequest.Title) | |||
text = p.PullRequest.Body | |||
case api.HookIssueAssigned: | |||
list, err := MakeAssigneeList(&Issue{ID: p.PullRequest.ID}) | |||
list, err := models.MakeAssigneeList(&models.Issue{ID: p.PullRequest.ID}) | |||
if err != nil { | |||
return &TelegramPayload{}, err | |||
} | |||
@@ -297,27 +308,27 @@ func getTelegramReleasePayload(p *api.ReleasePayload) (*TelegramPayload, error) | |||
} | |||
// GetTelegramPayload converts a telegram webhook into a TelegramPayload | |||
func GetTelegramPayload(p api.Payloader, event HookEventType, meta string) (*TelegramPayload, error) { | |||
func GetTelegramPayload(p api.Payloader, event models.HookEventType, meta string) (*TelegramPayload, error) { | |||
s := new(TelegramPayload) | |||
switch event { | |||
case HookEventCreate: | |||
case models.HookEventCreate: | |||
return getTelegramCreatePayload(p.(*api.CreatePayload)) | |||
case HookEventDelete: | |||
case models.HookEventDelete: | |||
return getTelegramDeletePayload(p.(*api.DeletePayload)) | |||
case HookEventFork: | |||
case models.HookEventFork: | |||
return getTelegramForkPayload(p.(*api.ForkPayload)) | |||
case HookEventIssues: | |||
case models.HookEventIssues: | |||
return getTelegramIssuesPayload(p.(*api.IssuePayload)) | |||
case HookEventIssueComment: | |||
case models.HookEventIssueComment: | |||
return getTelegramIssueCommentPayload(p.(*api.IssueCommentPayload)) | |||
case HookEventPush: | |||
case models.HookEventPush: | |||
return getTelegramPushPayload(p.(*api.PushPayload)) | |||
case HookEventPullRequest: | |||
case models.HookEventPullRequest: | |||
return getTelegramPullRequestPayload(p.(*api.PullRequestPayload)) | |||
case HookEventRepository: | |||
case models.HookEventRepository: | |||
return getTelegramRepositoryPayload(p.(*api.RepositoryPayload)) | |||
case HookEventRelease: | |||
case models.HookEventRelease: | |||
return getTelegramReleasePayload(p.(*api.ReleasePayload)) | |||
} | |||
@@ -90,27 +90,27 @@ func prepareWebhook(w *models.Webhook, repo *models.Repository, event models.Hoo | |||
// Use separate objects so modifications won't be made on payload on non-Gogs/Gitea type hooks. | |||
switch w.HookTaskType { | |||
case models.SLACK: | |||
payloader, err = models.GetSlackPayload(p, event, w.Meta) | |||
payloader, err = GetSlackPayload(p, event, w.Meta) | |||
if err != nil { | |||
return fmt.Errorf("GetSlackPayload: %v", err) | |||
} | |||
case models.DISCORD: | |||
payloader, err = models.GetDiscordPayload(p, event, w.Meta) | |||
payloader, err = GetDiscordPayload(p, event, w.Meta) | |||
if err != nil { | |||
return fmt.Errorf("GetDiscordPayload: %v", err) | |||
} | |||
case models.DINGTALK: | |||
payloader, err = models.GetDingtalkPayload(p, event, w.Meta) | |||
payloader, err = GetDingtalkPayload(p, event, w.Meta) | |||
if err != nil { | |||
return fmt.Errorf("GetDingtalkPayload: %v", err) | |||
} | |||
case models.TELEGRAM: | |||
payloader, err = models.GetTelegramPayload(p, event, w.Meta) | |||
payloader, err = GetTelegramPayload(p, event, w.Meta) | |||
if err != nil { | |||
return fmt.Errorf("GetTelegramPayload: %v", err) | |||
} | |||
case models.MSTEAMS: | |||
payloader, err = models.GetMSTeamsPayload(p, event, w.Meta) | |||
payloader, err = GetMSTeamsPayload(p, event, w.Meta) | |||
if err != nil { | |||
return fmt.Errorf("GetMSTeamsPayload: %v", err) | |||
} |
@@ -12,6 +12,18 @@ import ( | |||
"github.com/stretchr/testify/assert" | |||
) | |||
func TestWebhook_GetSlackHook(t *testing.T) { | |||
w := &models.Webhook{ | |||
Meta: `{"channel": "foo", "username": "username", "color": "blue"}`, | |||
} | |||
slackHook := GetSlackHook(w) | |||
assert.Equal(t, *slackHook, SlackMeta{ | |||
Channel: "foo", | |||
Username: "username", | |||
Color: "blue", | |||
}) | |||
} | |||
func TestPrepareWebhooks(t *testing.T) { | |||
assert.NoError(t, models.PrepareTestDatabase()) | |||
@@ -15,6 +15,7 @@ import ( | |||
"code.gitea.io/gitea/modules/structs" | |||
api "code.gitea.io/gitea/modules/structs" | |||
"code.gitea.io/gitea/modules/util" | |||
"code.gitea.io/gitea/modules/webhook" | |||
"github.com/unknwon/com" | |||
) | |||
@@ -166,7 +167,7 @@ func ToHook(repoLink string, w *models.Webhook) *api.Hook { | |||
"content_type": w.ContentType.Name(), | |||
} | |||
if w.HookTaskType == models.SLACK { | |||
s := w.GetSlackHook() | |||
s := webhook.GetSlackHook(w) | |||
config["channel"] = s.Channel | |||
config["username"] = s.Username | |||
config["icon_url"] = s.IconURL |
@@ -12,6 +12,7 @@ import ( | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/context" | |||
api "code.gitea.io/gitea/modules/structs" | |||
"code.gitea.io/gitea/modules/webhook" | |||
"code.gitea.io/gitea/routers/api/v1/convert" | |||
"code.gitea.io/gitea/routers/utils" | |||
@@ -129,7 +130,7 @@ func addHook(ctx *context.APIContext, form *api.CreateHookOption, orgID, repoID | |||
return nil, false | |||
} | |||
meta, err := json.Marshal(&models.SlackMeta{ | |||
meta, err := json.Marshal(&webhook.SlackMeta{ | |||
Channel: strings.TrimSpace(channel), | |||
Username: form.Config["username"], | |||
IconURL: form.Config["icon_url"], | |||
@@ -203,7 +204,7 @@ func editHook(ctx *context.APIContext, form *api.EditHookOption, w *models.Webho | |||
if w.HookTaskType == models.SLACK { | |||
if channel, ok := form.Config["channel"]; ok { | |||
meta, err := json.Marshal(&models.SlackMeta{ | |||
meta, err := json.Marshal(&webhook.SlackMeta{ | |||
Channel: channel, | |||
Username: form.Config["username"], | |||
IconURL: form.Config["icon_url"], |
@@ -268,7 +268,7 @@ func DiscordHooksNewPost(ctx *context.Context, form auth.NewDiscordHookForm) { | |||
return | |||
} | |||
meta, err := json.Marshal(&models.DiscordMeta{ | |||
meta, err := json.Marshal(&webhook.DiscordMeta{ | |||
Username: form.Username, | |||
IconURL: form.IconURL, | |||
}) | |||
@@ -357,7 +357,7 @@ func TelegramHooksNewPost(ctx *context.Context, form auth.NewTelegramHookForm) { | |||
return | |||
} | |||
meta, err := json.Marshal(&models.TelegramMeta{ | |||
meta, err := json.Marshal(&webhook.TelegramMeta{ | |||
BotToken: form.BotToken, | |||
ChatID: form.ChatID, | |||
}) | |||
@@ -452,7 +452,7 @@ func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) { | |||
return | |||
} | |||
meta, err := json.Marshal(&models.SlackMeta{ | |||
meta, err := json.Marshal(&webhook.SlackMeta{ | |||
Channel: strings.TrimSpace(form.Channel), | |||
Username: form.Username, | |||
IconURL: form.IconURL, | |||
@@ -515,11 +515,11 @@ func checkWebhook(ctx *context.Context) (*orgRepoCtx, *models.Webhook) { | |||
ctx.Data["HookType"] = w.HookTaskType.Name() | |||
switch w.HookTaskType { | |||
case models.SLACK: | |||
ctx.Data["SlackHook"] = w.GetSlackHook() | |||
ctx.Data["SlackHook"] = webhook.GetSlackHook(w) | |||
case models.DISCORD: | |||
ctx.Data["DiscordHook"] = w.GetDiscordHook() | |||
ctx.Data["DiscordHook"] = webhook.GetDiscordHook(w) | |||
case models.TELEGRAM: | |||
ctx.Data["TelegramHook"] = w.GetTelegramHook() | |||
ctx.Data["TelegramHook"] = webhook.GetTelegramHook(w) | |||
} | |||
ctx.Data["History"], err = w.History(1) | |||
@@ -646,7 +646,7 @@ func SlackHooksEditPost(ctx *context.Context, form auth.NewSlackHookForm) { | |||
return | |||
} | |||
meta, err := json.Marshal(&models.SlackMeta{ | |||
meta, err := json.Marshal(&webhook.SlackMeta{ | |||
Channel: strings.TrimSpace(form.Channel), | |||
Username: form.Username, | |||
IconURL: form.IconURL, | |||
@@ -690,7 +690,7 @@ func DiscordHooksEditPost(ctx *context.Context, form auth.NewDiscordHookForm) { | |||
return | |||
} | |||
meta, err := json.Marshal(&models.DiscordMeta{ | |||
meta, err := json.Marshal(&webhook.DiscordMeta{ | |||
Username: form.Username, | |||
IconURL: form.IconURL, | |||
}) | |||
@@ -763,7 +763,7 @@ func TelegramHooksEditPost(ctx *context.Context, form auth.NewTelegramHookForm) | |||
ctx.HTML(200, orCtx.NewTemplate) | |||
return | |||
} | |||
meta, err := json.Marshal(&models.TelegramMeta{ | |||
meta, err := json.Marshal(&webhook.TelegramMeta{ | |||
BotToken: form.BotToken, | |||
ChatID: form.ChatID, | |||
}) |