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