mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Move webhook type from int to string (#13664)
* Move webhook type from int to string * rename webhook_services * finish refactor * Fix merge * Ignore unnecessary ci Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
		| @@ -101,6 +101,9 @@ issues: | ||||
|     - path: cmd/dump.go | ||||
|       linters: | ||||
|         - dupl | ||||
|     - path: services/webhook/webhook.go | ||||
|       linters: | ||||
|         - structcheck | ||||
|     - text: "commentFormatting: put a space between `//` and comment text" | ||||
|       linters: | ||||
|         - gocritic | ||||
|   | ||||
| @@ -265,6 +265,8 @@ var migrations = []Migration{ | ||||
| 	NewMigration("update reactions constraint", updateReactionConstraint), | ||||
| 	// v160 -> v161 | ||||
| 	NewMigration("Add block on official review requests branch protection", addBlockOnOfficialReviewRequests), | ||||
| 	// v161 -> v162 | ||||
| 	NewMigration("Convert task type from int to string", convertTaskTypeToString), | ||||
| } | ||||
|  | ||||
| // GetCurrentDBVersion returns the current db version | ||||
|   | ||||
							
								
								
									
										59
									
								
								models/migrations/v161.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								models/migrations/v161.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| // 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 migrations | ||||
|  | ||||
| import ( | ||||
| 	"xorm.io/xorm" | ||||
| ) | ||||
|  | ||||
| func convertTaskTypeToString(x *xorm.Engine) error { | ||||
| 	const ( | ||||
| 		GOGS int = iota + 1 | ||||
| 		SLACK | ||||
| 		GITEA | ||||
| 		DISCORD | ||||
| 		DINGTALK | ||||
| 		TELEGRAM | ||||
| 		MSTEAMS | ||||
| 		FEISHU | ||||
| 		MATRIX | ||||
| 	) | ||||
|  | ||||
| 	var hookTaskTypes = map[int]string{ | ||||
| 		GITEA:    "gitea", | ||||
| 		GOGS:     "gogs", | ||||
| 		SLACK:    "slack", | ||||
| 		DISCORD:  "discord", | ||||
| 		DINGTALK: "dingtalk", | ||||
| 		TELEGRAM: "telegram", | ||||
| 		MSTEAMS:  "msteams", | ||||
| 		FEISHU:   "feishu", | ||||
| 		MATRIX:   "matrix", | ||||
| 	} | ||||
|  | ||||
| 	type HookTask struct { | ||||
| 		Typ string `xorm:"char(16) index"` | ||||
| 	} | ||||
| 	if err := x.Sync2(new(HookTask)); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	for i, s := range hookTaskTypes { | ||||
| 		if _, err := x.Exec("UPDATE hook_task set typ = ? where type=?", s, i); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	sess := x.NewSession() | ||||
| 	defer sess.Close() | ||||
| 	if err := sess.Begin(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err := dropTableColumns(sess, "hook_task", "type"); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return sess.Commit() | ||||
| } | ||||
| @@ -547,69 +547,21 @@ func copyDefaultWebhooksToRepo(e Engine, repoID int64) error { | ||||
| //        \/                    \/              \/     \/     \/ | ||||
|  | ||||
| // HookTaskType is the type of an hook task | ||||
| type HookTaskType int | ||||
| type HookTaskType string | ||||
|  | ||||
| // Types of hook tasks | ||||
| const ( | ||||
| 	GOGS HookTaskType = iota + 1 | ||||
| 	SLACK | ||||
| 	GITEA | ||||
| 	DISCORD | ||||
| 	DINGTALK | ||||
| 	TELEGRAM | ||||
| 	MSTEAMS | ||||
| 	FEISHU | ||||
| 	MATRIX | ||||
| 	GITEA    HookTaskType = "gitea" | ||||
| 	GOGS     HookTaskType = "gogs" | ||||
| 	SLACK    HookTaskType = "slack" | ||||
| 	DISCORD  HookTaskType = "discord" | ||||
| 	DINGTALK HookTaskType = "dingtalk" | ||||
| 	TELEGRAM HookTaskType = "telegram" | ||||
| 	MSTEAMS  HookTaskType = "msteams" | ||||
| 	FEISHU   HookTaskType = "feishu" | ||||
| 	MATRIX   HookTaskType = "matrix" | ||||
| ) | ||||
|  | ||||
| var hookTaskTypes = map[string]HookTaskType{ | ||||
| 	"gitea":    GITEA, | ||||
| 	"gogs":     GOGS, | ||||
| 	"slack":    SLACK, | ||||
| 	"discord":  DISCORD, | ||||
| 	"dingtalk": DINGTALK, | ||||
| 	"telegram": TELEGRAM, | ||||
| 	"msteams":  MSTEAMS, | ||||
| 	"feishu":   FEISHU, | ||||
| 	"matrix":   MATRIX, | ||||
| } | ||||
|  | ||||
| // ToHookTaskType returns HookTaskType by given name. | ||||
| func ToHookTaskType(name string) HookTaskType { | ||||
| 	return hookTaskTypes[name] | ||||
| } | ||||
|  | ||||
| // Name returns the name of an hook task type | ||||
| func (t HookTaskType) Name() string { | ||||
| 	switch t { | ||||
| 	case GITEA: | ||||
| 		return "gitea" | ||||
| 	case GOGS: | ||||
| 		return "gogs" | ||||
| 	case SLACK: | ||||
| 		return "slack" | ||||
| 	case DISCORD: | ||||
| 		return "discord" | ||||
| 	case DINGTALK: | ||||
| 		return "dingtalk" | ||||
| 	case TELEGRAM: | ||||
| 		return "telegram" | ||||
| 	case MSTEAMS: | ||||
| 		return "msteams" | ||||
| 	case FEISHU: | ||||
| 		return "feishu" | ||||
| 	case MATRIX: | ||||
| 		return "matrix" | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| // IsValidHookTaskType returns true if given name is a valid hook task type. | ||||
| func IsValidHookTaskType(name string) bool { | ||||
| 	_, ok := hookTaskTypes[name] | ||||
| 	return ok | ||||
| } | ||||
|  | ||||
| // HookEventType is the type of an hook event | ||||
| type HookEventType string | ||||
|  | ||||
| @@ -687,7 +639,7 @@ type HookTask struct { | ||||
| 	RepoID          int64 `xorm:"INDEX"` | ||||
| 	HookID          int64 | ||||
| 	UUID            string | ||||
| 	Type            HookTaskType | ||||
| 	Typ             HookTaskType | ||||
| 	URL             string `xorm:"TEXT"` | ||||
| 	Signature       string `xorm:"TEXT"` | ||||
| 	api.Payloader   `xorm:"-"` | ||||
|   | ||||
| @@ -185,28 +185,6 @@ func TestDeleteWebhookByOrgID(t *testing.T) { | ||||
| 	assert.True(t, IsErrWebhookNotExist(err)) | ||||
| } | ||||
|  | ||||
| func TestToHookTaskType(t *testing.T) { | ||||
| 	assert.Equal(t, GOGS, ToHookTaskType("gogs")) | ||||
| 	assert.Equal(t, SLACK, ToHookTaskType("slack")) | ||||
| 	assert.Equal(t, GITEA, ToHookTaskType("gitea")) | ||||
| 	assert.Equal(t, TELEGRAM, ToHookTaskType("telegram")) | ||||
| } | ||||
|  | ||||
| func TestHookTaskType_Name(t *testing.T) { | ||||
| 	assert.Equal(t, "gogs", GOGS.Name()) | ||||
| 	assert.Equal(t, "slack", SLACK.Name()) | ||||
| 	assert.Equal(t, "gitea", GITEA.Name()) | ||||
| 	assert.Equal(t, "telegram", TELEGRAM.Name()) | ||||
| } | ||||
|  | ||||
| func TestIsValidHookTaskType(t *testing.T) { | ||||
| 	assert.True(t, IsValidHookTaskType("gogs")) | ||||
| 	assert.True(t, IsValidHookTaskType("slack")) | ||||
| 	assert.True(t, IsValidHookTaskType("gitea")) | ||||
| 	assert.True(t, IsValidHookTaskType("telegram")) | ||||
| 	assert.False(t, IsValidHookTaskType("invalid")) | ||||
| } | ||||
|  | ||||
| func TestHookTasks(t *testing.T) { | ||||
| 	assert.NoError(t, PrepareTestDatabase()) | ||||
| 	hookTasks, err := HookTasks(1, 1) | ||||
| @@ -225,7 +203,7 @@ func TestCreateHookTask(t *testing.T) { | ||||
| 	hookTask := &HookTask{ | ||||
| 		RepoID:    3, | ||||
| 		HookID:    3, | ||||
| 		Type:      GITEA, | ||||
| 		Typ:       GITEA, | ||||
| 		URL:       "http://www.example.com/unit_test", | ||||
| 		Payloader: &api.PushPayload{}, | ||||
| 	} | ||||
|   | ||||
| @@ -16,7 +16,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" | ||||
| 	"code.gitea.io/gitea/services/webhook" | ||||
|  | ||||
| 	"github.com/unknwon/com" | ||||
| ) | ||||
| @@ -237,7 +237,7 @@ func ToHook(repoLink string, w *models.Webhook) *api.Hook { | ||||
|  | ||||
| 	return &api.Hook{ | ||||
| 		ID:      w.ID, | ||||
| 		Type:    w.HookTaskType.Name(), | ||||
| 		Type:    string(w.HookTaskType), | ||||
| 		URL:     fmt.Sprintf("%s/settings/hooks/%d", repoLink, w.ID), | ||||
| 		Active:  w.IsActive, | ||||
| 		Config:  config, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/repository" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 	api "code.gitea.io/gitea/modules/structs" | ||||
| 	webhook_module "code.gitea.io/gitea/modules/webhook" | ||||
| 	webhook_services "code.gitea.io/gitea/services/webhook" | ||||
| ) | ||||
|  | ||||
| type webhookNotifier struct { | ||||
| @@ -48,7 +48,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *models.User, issue *model | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestLabel, &api.PullRequestPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventPullRequestLabel, &api.PullRequestPayload{ | ||||
| 			Action:      api.HookIssueLabelCleared, | ||||
| 			Index:       issue.Index, | ||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||
| @@ -56,7 +56,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *models.User, issue *model | ||||
| 			Sender:      convert.ToUser(doer, false, false), | ||||
| 		}) | ||||
| 	} else { | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | ||||
| 			Action:     api.HookIssueLabelCleared, | ||||
| 			Index:      issue.Index, | ||||
| 			Issue:      convert.ToAPIIssue(issue), | ||||
| @@ -74,7 +74,7 @@ func (m *webhookNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo | ||||
| 	mode, _ := models.AccessLevel(doer, repo) | ||||
|  | ||||
| 	// forked webhook | ||||
| 	if err := webhook_module.PrepareWebhooks(oldRepo, models.HookEventFork, &api.ForkPayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(oldRepo, models.HookEventFork, &api.ForkPayload{ | ||||
| 		Forkee: convert.ToRepo(oldRepo, oldMode), | ||||
| 		Repo:   convert.ToRepo(repo, mode), | ||||
| 		Sender: convert.ToUser(doer, false, false), | ||||
| @@ -86,7 +86,7 @@ func (m *webhookNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo | ||||
|  | ||||
| 	// Add to hook queue for created repo after session commit. | ||||
| 	if u.IsOrganization() { | ||||
| 		if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||
| 		if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||
| 			Action:       api.HookRepoCreated, | ||||
| 			Repository:   convert.ToRepo(repo, models.AccessModeOwner), | ||||
| 			Organization: convert.ToUser(u, false, false), | ||||
| @@ -99,7 +99,7 @@ func (m *webhookNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo | ||||
|  | ||||
| func (m *webhookNotifier) NotifyCreateRepository(doer *models.User, u *models.User, repo *models.Repository) { | ||||
| 	// Add to hook queue for created repo after session commit. | ||||
| 	if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||
| 		Action:       api.HookRepoCreated, | ||||
| 		Repository:   convert.ToRepo(repo, models.AccessModeOwner), | ||||
| 		Organization: convert.ToUser(u, false, false), | ||||
| @@ -112,7 +112,7 @@ func (m *webhookNotifier) NotifyCreateRepository(doer *models.User, u *models.Us | ||||
| func (m *webhookNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) { | ||||
| 	u := repo.MustOwner() | ||||
|  | ||||
| 	if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||
| 		Action:       api.HookRepoDeleted, | ||||
| 		Repository:   convert.ToRepo(repo, models.AccessModeOwner), | ||||
| 		Organization: convert.ToUser(u, false, false), | ||||
| @@ -143,7 +143,7 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *mo | ||||
| 			apiPullRequest.Action = api.HookIssueAssigned | ||||
| 		} | ||||
| 		// Assignee comment triggers a webhook | ||||
| 		if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestAssign, apiPullRequest); err != nil { | ||||
| 		if err := webhook_services.PrepareWebhooks(issue.Repo, models.HookEventPullRequestAssign, apiPullRequest); err != nil { | ||||
| 			log.Error("PrepareWebhooks [is_pull: %v, remove_assignee: %v]: %v", issue.IsPull, removed, err) | ||||
| 			return | ||||
| 		} | ||||
| @@ -161,7 +161,7 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *mo | ||||
| 			apiIssue.Action = api.HookIssueAssigned | ||||
| 		} | ||||
| 		// Assignee comment triggers a webhook | ||||
| 		if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueAssign, apiIssue); err != nil { | ||||
| 		if err := webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueAssign, apiIssue); err != nil { | ||||
| 			log.Error("PrepareWebhooks [is_pull: %v, remove_assignee: %v]: %v", issue.IsPull, removed, err) | ||||
| 			return | ||||
| 		} | ||||
| @@ -177,7 +177,7 @@ func (m *webhookNotifier) NotifyIssueChangeTitle(doer *models.User, issue *model | ||||
| 			return | ||||
| 		} | ||||
| 		issue.PullRequest.Issue = issue | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 			Action: api.HookIssueEdited, | ||||
| 			Index:  issue.Index, | ||||
| 			Changes: &api.ChangesPayload{ | ||||
| @@ -190,7 +190,7 @@ func (m *webhookNotifier) NotifyIssueChangeTitle(doer *models.User, issue *model | ||||
| 			Sender:      convert.ToUser(doer, false, false), | ||||
| 		}) | ||||
| 	} else { | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||
| 			Action: api.HookIssueEdited, | ||||
| 			Index:  issue.Index, | ||||
| 			Changes: &api.ChangesPayload{ | ||||
| @@ -229,7 +229,7 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(doer *models.User, issue *mode | ||||
| 		} else { | ||||
| 			apiPullRequest.Action = api.HookIssueReOpened | ||||
| 		} | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, apiPullRequest) | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, apiPullRequest) | ||||
| 	} else { | ||||
| 		apiIssue := &api.IssuePayload{ | ||||
| 			Index:      issue.Index, | ||||
| @@ -242,7 +242,7 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(doer *models.User, issue *mode | ||||
| 		} else { | ||||
| 			apiIssue.Action = api.HookIssueReOpened | ||||
| 		} | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, apiIssue) | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssues, apiIssue) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		log.Error("PrepareWebhooks [is_pull: %v, is_closed: %v]: %v", issue.IsPull, isClosed, err) | ||||
| @@ -260,7 +260,7 @@ func (m *webhookNotifier) NotifyNewIssue(issue *models.Issue) { | ||||
| 	} | ||||
|  | ||||
| 	mode, _ := models.AccessLevel(issue.Poster, issue.Repo) | ||||
| 	if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||
| 		Action:     api.HookIssueOpened, | ||||
| 		Index:      issue.Index, | ||||
| 		Issue:      convert.ToAPIIssue(issue), | ||||
| @@ -286,7 +286,7 @@ func (m *webhookNotifier) NotifyNewPullRequest(pull *models.PullRequest) { | ||||
| 	} | ||||
|  | ||||
| 	mode, _ := models.AccessLevel(pull.Issue.Poster, pull.Issue.Repo) | ||||
| 	if err := webhook_module.PrepareWebhooks(pull.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(pull.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 		Action:      api.HookIssueOpened, | ||||
| 		Index:       pull.Issue.Index, | ||||
| 		PullRequest: convert.ToAPIPullRequest(pull), | ||||
| @@ -302,7 +302,7 @@ func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *mod | ||||
| 	var err error | ||||
| 	if issue.IsPull { | ||||
| 		issue.PullRequest.Issue = issue | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 			Action: api.HookIssueEdited, | ||||
| 			Index:  issue.Index, | ||||
| 			Changes: &api.ChangesPayload{ | ||||
| @@ -315,7 +315,7 @@ func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *mod | ||||
| 			Sender:      convert.ToUser(doer, false, false), | ||||
| 		}) | ||||
| 	} else { | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||
| 			Action: api.HookIssueEdited, | ||||
| 			Index:  issue.Index, | ||||
| 			Changes: &api.ChangesPayload{ | ||||
| @@ -352,7 +352,7 @@ func (m *webhookNotifier) NotifyUpdateComment(doer *models.User, c *models.Comme | ||||
|  | ||||
| 	mode, _ := models.AccessLevel(doer, c.Issue.Repo) | ||||
| 	if c.Issue.IsPull { | ||||
| 		err = webhook_module.PrepareWebhooks(c.Issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(c.Issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | ||||
| 			Action:  api.HookIssueCommentEdited, | ||||
| 			Issue:   convert.ToAPIIssue(c.Issue), | ||||
| 			Comment: convert.ToComment(c), | ||||
| @@ -366,7 +366,7 @@ func (m *webhookNotifier) NotifyUpdateComment(doer *models.User, c *models.Comme | ||||
| 			IsPull:     true, | ||||
| 		}) | ||||
| 	} else { | ||||
| 		err = webhook_module.PrepareWebhooks(c.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(c.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | ||||
| 			Action:  api.HookIssueCommentEdited, | ||||
| 			Issue:   convert.ToAPIIssue(c.Issue), | ||||
| 			Comment: convert.ToComment(c), | ||||
| @@ -392,7 +392,7 @@ func (m *webhookNotifier) NotifyCreateIssueComment(doer *models.User, repo *mode | ||||
|  | ||||
| 	var err error | ||||
| 	if issue.IsPull { | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | ||||
| 			Action:     api.HookIssueCommentCreated, | ||||
| 			Issue:      convert.ToAPIIssue(issue), | ||||
| 			Comment:    convert.ToComment(comment), | ||||
| @@ -401,7 +401,7 @@ func (m *webhookNotifier) NotifyCreateIssueComment(doer *models.User, repo *mode | ||||
| 			IsPull:     true, | ||||
| 		}) | ||||
| 	} else { | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | ||||
| 			Action:     api.HookIssueCommentCreated, | ||||
| 			Issue:      convert.ToAPIIssue(issue), | ||||
| 			Comment:    convert.ToComment(comment), | ||||
| @@ -436,7 +436,7 @@ func (m *webhookNotifier) NotifyDeleteComment(doer *models.User, comment *models | ||||
| 	mode, _ := models.AccessLevel(doer, comment.Issue.Repo) | ||||
|  | ||||
| 	if comment.Issue.IsPull { | ||||
| 		err = webhook_module.PrepareWebhooks(comment.Issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(comment.Issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | ||||
| 			Action:     api.HookIssueCommentDeleted, | ||||
| 			Issue:      convert.ToAPIIssue(comment.Issue), | ||||
| 			Comment:    convert.ToComment(comment), | ||||
| @@ -445,7 +445,7 @@ func (m *webhookNotifier) NotifyDeleteComment(doer *models.User, comment *models | ||||
| 			IsPull:     true, | ||||
| 		}) | ||||
| 	} else { | ||||
| 		err = webhook_module.PrepareWebhooks(comment.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(comment.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | ||||
| 			Action:     api.HookIssueCommentDeleted, | ||||
| 			Issue:      convert.ToAPIIssue(comment.Issue), | ||||
| 			Comment:    convert.ToComment(comment), | ||||
| @@ -485,7 +485,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *models.User, issue *mode | ||||
| 			log.Error("LoadIssue: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestLabel, &api.PullRequestPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventPullRequestLabel, &api.PullRequestPayload{ | ||||
| 			Action:      api.HookIssueLabelUpdated, | ||||
| 			Index:       issue.Index, | ||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||
| @@ -493,7 +493,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *models.User, issue *mode | ||||
| 			Sender:      convert.ToUser(doer, false, false), | ||||
| 		}) | ||||
| 	} else { | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | ||||
| 			Action:     api.HookIssueLabelUpdated, | ||||
| 			Index:      issue.Index, | ||||
| 			Issue:      convert.ToAPIIssue(issue), | ||||
| @@ -527,7 +527,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m | ||||
| 			log.Error("LoadIssue: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestMilestone, &api.PullRequestPayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventPullRequestMilestone, &api.PullRequestPayload{ | ||||
| 			Action:      hookAction, | ||||
| 			Index:       issue.Index, | ||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||
| @@ -535,7 +535,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m | ||||
| 			Sender:      convert.ToUser(doer, false, false), | ||||
| 		}) | ||||
| 	} else { | ||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueMilestone, &api.IssuePayload{ | ||||
| 		err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventIssueMilestone, &api.IssuePayload{ | ||||
| 			Action:     hookAction, | ||||
| 			Index:      issue.Index, | ||||
| 			Issue:      convert.ToAPIIssue(issue), | ||||
| @@ -556,7 +556,7 @@ func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Re | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if err := webhook_module.PrepareWebhooks(repo, models.HookEventPush, &api.PushPayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventPush, &api.PushPayload{ | ||||
| 		Ref:        opts.RefFullName, | ||||
| 		Before:     opts.OldCommitID, | ||||
| 		After:      opts.NewCommitID, | ||||
| @@ -602,7 +602,7 @@ func (*webhookNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *mod | ||||
| 		Action:      api.HookIssueClosed, | ||||
| 	} | ||||
|  | ||||
| 	err = webhook_module.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, apiPullRequest) | ||||
| 	err = webhook_services.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, apiPullRequest) | ||||
| 	if err != nil { | ||||
| 		log.Error("PrepareWebhooks: %v", err) | ||||
| 	} | ||||
| @@ -621,7 +621,7 @@ func (m *webhookNotifier) NotifyPullRequestChangeTargetBranch(doer *models.User, | ||||
| 	} | ||||
| 	issue.PullRequest.Issue = issue | ||||
| 	mode, _ := models.AccessLevel(issue.Poster, issue.Repo) | ||||
| 	err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 	err = webhook_services.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||
| 		Action: api.HookIssueEdited, | ||||
| 		Index:  issue.Index, | ||||
| 		Changes: &api.ChangesPayload{ | ||||
| @@ -665,7 +665,7 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review | ||||
| 		log.Error("models.AccessLevel: %v", err) | ||||
| 		return | ||||
| 	} | ||||
| 	if err := webhook_module.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{ | ||||
| 		Action:      api.HookIssueReviewed, | ||||
| 		Index:       review.Issue.Index, | ||||
| 		PullRequest: convert.ToAPIPullRequest(pr), | ||||
| @@ -699,7 +699,7 @@ func (m *webhookNotifier) NotifyCreateRef(pusher *models.User, repo *models.Repo | ||||
| 	} | ||||
| 	gitRepo.Close() | ||||
|  | ||||
| 	if err = webhook_module.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{ | ||||
| 	if err = webhook_services.PrepareWebhooks(repo, models.HookEventCreate, &api.CreatePayload{ | ||||
| 		Ref:     refName, | ||||
| 		Sha:     shaSum, | ||||
| 		RefType: refType, | ||||
| @@ -720,7 +720,7 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *m | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if err := webhook_module.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequestSync, &api.PullRequestPayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequestSync, &api.PullRequestPayload{ | ||||
| 		Action:      api.HookIssueSynchronized, | ||||
| 		Index:       pr.Issue.Index, | ||||
| 		PullRequest: convert.ToAPIPullRequest(pr), | ||||
| @@ -736,7 +736,7 @@ func (m *webhookNotifier) NotifyDeleteRef(pusher *models.User, repo *models.Repo | ||||
| 	apiRepo := convert.ToRepo(repo, models.AccessModeNone) | ||||
| 	refName := git.RefEndName(refFullName) | ||||
|  | ||||
| 	if err := webhook_module.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventDelete, &api.DeletePayload{ | ||||
| 		Ref:        refName, | ||||
| 		RefType:    refType, | ||||
| 		PusherType: api.PusherTypeUser, | ||||
| @@ -754,7 +754,7 @@ func sendReleaseHook(doer *models.User, rel *models.Release, action api.HookRele | ||||
| 	} | ||||
|  | ||||
| 	mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) | ||||
| 	if err := webhook_module.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ | ||||
| 		Action:     action, | ||||
| 		Release:    convert.ToRelease(rel), | ||||
| 		Repository: convert.ToRepo(rel.Repo, mode), | ||||
| @@ -784,7 +784,7 @@ func (m *webhookNotifier) NotifySyncPushCommits(pusher *models.User, repo *model | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if err := webhook_module.PrepareWebhooks(repo, models.HookEventPush, &api.PushPayload{ | ||||
| 	if err := webhook_services.PrepareWebhooks(repo, models.HookEventPush, &api.PushPayload{ | ||||
| 		Ref:        opts.RefFullName, | ||||
| 		Before:     opts.OldCommitID, | ||||
| 		After:      opts.NewCommitID, | ||||
|   | ||||
| @@ -13,8 +13,8 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/convert" | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| 	api "code.gitea.io/gitea/modules/structs" | ||||
| 	"code.gitea.io/gitea/modules/webhook" | ||||
| 	"code.gitea.io/gitea/routers/api/v1/utils" | ||||
| 	"code.gitea.io/gitea/services/webhook" | ||||
| ) | ||||
|  | ||||
| // ListHooks list all hooks of a repository | ||||
|   | ||||
| @@ -13,8 +13,8 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/context" | ||||
| 	"code.gitea.io/gitea/modules/convert" | ||||
| 	api "code.gitea.io/gitea/modules/structs" | ||||
| 	"code.gitea.io/gitea/modules/webhook" | ||||
| 	"code.gitea.io/gitea/routers/utils" | ||||
| 	"code.gitea.io/gitea/services/webhook" | ||||
|  | ||||
| 	"github.com/unknwon/com" | ||||
| ) | ||||
| @@ -52,7 +52,7 @@ func GetRepoHook(ctx *context.APIContext, repoID, hookID int64) (*models.Webhook | ||||
| // CheckCreateHookOption check if a CreateHookOption form is valid. If invalid, | ||||
| // write the appropriate error to `ctx`. Return whether the form is valid | ||||
| func CheckCreateHookOption(ctx *context.APIContext, form *api.CreateHookOption) bool { | ||||
| 	if !models.IsValidHookTaskType(form.Type) { | ||||
| 	if !webhook.IsValidHookTaskType(form.Type) { | ||||
| 		ctx.Error(http.StatusUnprocessableEntity, "", "Invalid hook type") | ||||
| 		return false | ||||
| 	} | ||||
| @@ -133,7 +133,7 @@ func addHook(ctx *context.APIContext, form *api.CreateHookOption, orgID, repoID | ||||
| 			BranchFilter: form.BranchFilter, | ||||
| 		}, | ||||
| 		IsActive:     form.Active, | ||||
| 		HookTaskType: models.ToHookTaskType(form.Type), | ||||
| 		HookTaskType: models.HookTaskType(form.Type), | ||||
| 	} | ||||
| 	if w.HookTaskType == models.SLACK { | ||||
| 		channel, ok := form.Config["channel"] | ||||
|   | ||||
| @@ -32,11 +32,11 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/storage" | ||||
| 	"code.gitea.io/gitea/modules/svg" | ||||
| 	"code.gitea.io/gitea/modules/task" | ||||
| 	"code.gitea.io/gitea/modules/webhook" | ||||
| 	"code.gitea.io/gitea/services/mailer" | ||||
| 	mirror_service "code.gitea.io/gitea/services/mirror" | ||||
| 	pull_service "code.gitea.io/gitea/services/pull" | ||||
| 	"code.gitea.io/gitea/services/repository" | ||||
| 	"code.gitea.io/gitea/services/webhook" | ||||
|  | ||||
| 	"gitea.com/macaron/i18n" | ||||
| 	"gitea.com/macaron/macaron" | ||||
|   | ||||
| @@ -20,7 +20,7 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 	api "code.gitea.io/gitea/modules/structs" | ||||
| 	"code.gitea.io/gitea/modules/webhook" | ||||
| 	"code.gitea.io/gitea/services/webhook" | ||||
|  | ||||
| 	"github.com/unknwon/com" | ||||
| ) | ||||
| @@ -181,7 +181,7 @@ func GiteaHooksNewPost(ctx *context.Context, form auth.NewWebhookForm) { | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksNew"] = true | ||||
| 	ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} | ||||
| 	ctx.Data["HookType"] = models.GITEA.Name() | ||||
| 	ctx.Data["HookType"] = models.GITEA | ||||
|  | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| @@ -235,7 +235,7 @@ func newGogsWebhookPost(ctx *context.Context, form auth.NewGogshookForm, kind mo | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksNew"] = true | ||||
| 	ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} | ||||
| 	ctx.Data["HookType"] = models.GOGS.Name() | ||||
| 	ctx.Data["HookType"] = models.GOGS | ||||
|  | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| @@ -283,7 +283,7 @@ func DiscordHooksNewPost(ctx *context.Context, form auth.NewDiscordHookForm) { | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksNew"] = true | ||||
| 	ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} | ||||
| 	ctx.Data["HookType"] = models.DISCORD.Name() | ||||
| 	ctx.Data["HookType"] = models.DISCORD | ||||
|  | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| @@ -334,7 +334,7 @@ func DingtalkHooksNewPost(ctx *context.Context, form auth.NewDingtalkHookForm) { | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksNew"] = true | ||||
| 	ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} | ||||
| 	ctx.Data["HookType"] = models.DINGTALK.Name() | ||||
| 	ctx.Data["HookType"] = models.DINGTALK | ||||
|  | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| @@ -376,7 +376,7 @@ func TelegramHooksNewPost(ctx *context.Context, form auth.NewTelegramHookForm) { | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksNew"] = true | ||||
| 	ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} | ||||
| 	ctx.Data["HookType"] = models.TELEGRAM.Name() | ||||
| 	ctx.Data["HookType"] = models.TELEGRAM | ||||
|  | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| @@ -427,7 +427,7 @@ func MatrixHooksNewPost(ctx *context.Context, form auth.NewMatrixHookForm) { | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksNew"] = true | ||||
| 	ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} | ||||
| 	ctx.Data["HookType"] = models.MATRIX.Name() | ||||
| 	ctx.Data["HookType"] = models.MATRIX | ||||
|  | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| @@ -481,7 +481,7 @@ func MSTeamsHooksNewPost(ctx *context.Context, form auth.NewMSTeamsHookForm) { | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksNew"] = true | ||||
| 	ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} | ||||
| 	ctx.Data["HookType"] = models.MSTEAMS.Name() | ||||
| 	ctx.Data["HookType"] = models.MSTEAMS | ||||
|  | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| @@ -523,7 +523,7 @@ func SlackHooksNewPost(ctx *context.Context, form auth.NewSlackHookForm) { | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksNew"] = true | ||||
| 	ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} | ||||
| 	ctx.Data["HookType"] = models.SLACK.Name() | ||||
| 	ctx.Data["HookType"] = models.SLACK | ||||
|  | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| @@ -582,7 +582,7 @@ func FeishuHooksNewPost(ctx *context.Context, form auth.NewFeishuHookForm) { | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksNew"] = true | ||||
| 	ctx.Data["Webhook"] = models.Webhook{HookEvent: &models.HookEvent{}} | ||||
| 	ctx.Data["HookType"] = models.FEISHU.Name() | ||||
| 	ctx.Data["HookType"] = models.FEISHU | ||||
|  | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| @@ -647,7 +647,7 @@ func checkWebhook(ctx *context.Context) (*orgRepoCtx, *models.Webhook) { | ||||
| 		return nil, nil | ||||
| 	} | ||||
|  | ||||
| 	ctx.Data["HookType"] = w.HookTaskType.Name() | ||||
| 	ctx.Data["HookType"] = w.HookTaskType | ||||
| 	switch w.HookTaskType { | ||||
| 	case models.SLACK: | ||||
| 		ctx.Data["SlackHook"] = webhook.GetSlackHook(w) | ||||
|   | ||||
| @@ -78,7 +78,7 @@ func Deliver(t *models.HookTask) error { | ||||
| 			return err | ||||
| 		} | ||||
| 	case http.MethodPut: | ||||
| 		switch t.Type { | ||||
| 		switch t.Typ { | ||||
| 		case models.MATRIX: | ||||
| 			req, err = getMatrixHookRequest(t) | ||||
| 			if err != nil { | ||||
| @@ -20,6 +20,55 @@ import ( | ||||
| 	"github.com/gobwas/glob" | ||||
| ) | ||||
| 
 | ||||
| type webhook struct { | ||||
| 	name           models.HookTaskType | ||||
| 	payloadCreator func(p api.Payloader, event models.HookEventType, meta string) (api.Payloader, error) | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	webhooks = map[models.HookTaskType]*webhook{ | ||||
| 		models.SLACK: { | ||||
| 			name:           models.SLACK, | ||||
| 			payloadCreator: GetSlackPayload, | ||||
| 		}, | ||||
| 		models.DISCORD: { | ||||
| 			name:           models.DISCORD, | ||||
| 			payloadCreator: GetDiscordPayload, | ||||
| 		}, | ||||
| 		models.DINGTALK: { | ||||
| 			name:           models.DINGTALK, | ||||
| 			payloadCreator: GetDingtalkPayload, | ||||
| 		}, | ||||
| 		models.TELEGRAM: { | ||||
| 			name:           models.TELEGRAM, | ||||
| 			payloadCreator: GetTelegramPayload, | ||||
| 		}, | ||||
| 		models.MSTEAMS: { | ||||
| 			name:           models.MSTEAMS, | ||||
| 			payloadCreator: GetMSTeamsPayload, | ||||
| 		}, | ||||
| 		models.FEISHU: { | ||||
| 			name:           models.FEISHU, | ||||
| 			payloadCreator: GetFeishuPayload, | ||||
| 		}, | ||||
| 		models.MATRIX: { | ||||
| 			name:           models.MATRIX, | ||||
| 			payloadCreator: GetMatrixPayload, | ||||
| 		}, | ||||
| 	} | ||||
| ) | ||||
| 
 | ||||
| // RegisterWebhook registers a webhook | ||||
| func RegisterWebhook(name string, webhook *webhook) { | ||||
| 	webhooks[models.HookTaskType(name)] = webhook | ||||
| } | ||||
| 
 | ||||
| // IsValidHookTaskType returns true if a webhook registered | ||||
| func IsValidHookTaskType(name string) bool { | ||||
| 	_, ok := webhooks[models.HookTaskType(name)] | ||||
| 	return ok | ||||
| } | ||||
| 
 | ||||
| // hookQueue is a global queue of web hooks | ||||
| var hookQueue = sync.NewUniqueQueue(setting.Webhook.QueueLength) | ||||
| 
 | ||||
| @@ -95,44 +144,13 @@ func prepareWebhook(w *models.Webhook, repo *models.Repository, event models.Hoo | ||||
| 
 | ||||
| 	var payloader api.Payloader | ||||
| 	var err error | ||||
| 	// 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 = GetSlackPayload(p, event, w.Meta) | ||||
| 	webhook, ok := webhooks[w.HookTaskType] | ||||
| 	if ok { | ||||
| 		payloader, err = webhook.payloadCreator(p, event, w.Meta) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("GetSlackPayload: %v", err) | ||||
| 			return fmt.Errorf("create payload for %s[%s]: %v", w.HookTaskType, event, err) | ||||
| 		} | ||||
| 	case models.DISCORD: | ||||
| 		payloader, err = GetDiscordPayload(p, event, w.Meta) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("GetDiscordPayload: %v", err) | ||||
| 		} | ||||
| 	case models.DINGTALK: | ||||
| 		payloader, err = GetDingtalkPayload(p, event, w.Meta) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("GetDingtalkPayload: %v", err) | ||||
| 		} | ||||
| 	case models.TELEGRAM: | ||||
| 		payloader, err = GetTelegramPayload(p, event, w.Meta) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("GetTelegramPayload: %v", err) | ||||
| 		} | ||||
| 	case models.MSTEAMS: | ||||
| 		payloader, err = GetMSTeamsPayload(p, event, w.Meta) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("GetMSTeamsPayload: %v", err) | ||||
| 		} | ||||
| 	case models.FEISHU: | ||||
| 		payloader, err = GetFeishuPayload(p, event, w.Meta) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("GetFeishuPayload: %v", err) | ||||
| 		} | ||||
| 	case models.MATRIX: | ||||
| 		payloader, err = GetMatrixPayload(p, event, w.Meta) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("GetMatrixPayload: %v", err) | ||||
| 		} | ||||
| 	default: | ||||
| 	} else { | ||||
| 		p.SetSecret(w.Secret) | ||||
| 		payloader = p | ||||
| 	} | ||||
| @@ -154,7 +172,7 @@ func prepareWebhook(w *models.Webhook, repo *models.Repository, event models.Hoo | ||||
| 	if err = models.CreateHookTask(&models.HookTask{ | ||||
| 		RepoID:      repo.ID, | ||||
| 		HookID:      w.ID, | ||||
| 		Type:        w.HookTaskType, | ||||
| 		Typ:         w.HookTaskType, | ||||
| 		URL:         w.URL, | ||||
| 		Signature:   signature, | ||||
| 		Payloader:   payloader, | ||||
		Reference in New Issue
	
	Block a user