Fix bug for webhook and feishu caused by API changed (#13937)
* Fix bug for webhook * Fix bug for feishu
This commit is contained in:
		
							parent
							
								
									b35546631e
								
							
						
					
					
						commit
						ea914d0f7a
					
				|  | @ -8,6 +8,7 @@ package models | ||||||
| import ( | import ( | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
|  | @ -310,6 +311,7 @@ func CreateWebhook(w *Webhook) error { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func createWebhook(e Engine, w *Webhook) error { | func createWebhook(e Engine, w *Webhook) error { | ||||||
|  | 	w.Type = strings.TrimSpace(w.Type) | ||||||
| 	_, err := e.Insert(w) | 	_, err := e.Insert(w) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  | @ -547,7 +549,7 @@ func copyDefaultWebhooksToRepo(e Engine, repoID int64) error { | ||||||
| //        \/                    \/              \/     \/     \/
 | //        \/                    \/              \/     \/     \/
 | ||||||
| 
 | 
 | ||||||
| // HookTaskType is the type of an hook task
 | // HookTaskType is the type of an hook task
 | ||||||
| type HookTaskType string | type HookTaskType = string | ||||||
| 
 | 
 | ||||||
| // Types of hook tasks
 | // Types of hook tasks
 | ||||||
| const ( | const ( | ||||||
|  |  | ||||||
|  | @ -17,11 +17,24 @@ import ( | ||||||
| type ( | type ( | ||||||
| 	// FeishuPayload represents
 | 	// FeishuPayload represents
 | ||||||
| 	FeishuPayload struct { | 	FeishuPayload struct { | ||||||
| 		Title string `json:"title"` | 		MsgType string `json:"msg_type"` // text / post / image / share_chat / interactive
 | ||||||
| 		Text  string `json:"text"` | 		Content struct { | ||||||
|  | 			Text string `json:"text"` | ||||||
|  | 		} `json:"content"` | ||||||
| 	} | 	} | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | func newFeishuTextPayload(text string) *FeishuPayload { | ||||||
|  | 	return &FeishuPayload{ | ||||||
|  | 		MsgType: "text", | ||||||
|  | 		Content: struct { | ||||||
|  | 			Text string `json:"text"` | ||||||
|  | 		}{ | ||||||
|  | 			Text: text, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // SetSecret sets the Feishu secret
 | // SetSecret sets the Feishu secret
 | ||||||
| func (f *FeishuPayload) SetSecret(_ string) {} | func (f *FeishuPayload) SetSecret(_ string) {} | ||||||
| 
 | 
 | ||||||
|  | @ -42,34 +55,25 @@ var ( | ||||||
| func (f *FeishuPayload) Create(p *api.CreatePayload) (api.Payloader, error) { | func (f *FeishuPayload) Create(p *api.CreatePayload) (api.Payloader, error) { | ||||||
| 	// created tag/branch
 | 	// created tag/branch
 | ||||||
| 	refName := git.RefEndName(p.Ref) | 	refName := git.RefEndName(p.Ref) | ||||||
| 	title := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName) | 	text := fmt.Sprintf("[%s] %s %s created", p.Repo.FullName, p.RefType, refName) | ||||||
| 
 | 
 | ||||||
| 	return &FeishuPayload{ | 	return newFeishuTextPayload(text), nil | ||||||
| 		Text:  title, |  | ||||||
| 		Title: title, |  | ||||||
| 	}, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Delete implements PayloadConvertor Delete method
 | // Delete implements PayloadConvertor Delete method
 | ||||||
| func (f *FeishuPayload) Delete(p *api.DeletePayload) (api.Payloader, error) { | func (f *FeishuPayload) Delete(p *api.DeletePayload) (api.Payloader, error) { | ||||||
| 	// created tag/branch
 | 	// created tag/branch
 | ||||||
| 	refName := git.RefEndName(p.Ref) | 	refName := git.RefEndName(p.Ref) | ||||||
| 	title := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName) | 	text := fmt.Sprintf("[%s] %s %s deleted", p.Repo.FullName, p.RefType, refName) | ||||||
| 
 | 
 | ||||||
| 	return &FeishuPayload{ | 	return newFeishuTextPayload(text), nil | ||||||
| 		Text:  title, |  | ||||||
| 		Title: title, |  | ||||||
| 	}, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Fork implements PayloadConvertor Fork method
 | // Fork implements PayloadConvertor Fork method
 | ||||||
| func (f *FeishuPayload) Fork(p *api.ForkPayload) (api.Payloader, error) { | func (f *FeishuPayload) Fork(p *api.ForkPayload) (api.Payloader, error) { | ||||||
| 	title := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName) | 	text := fmt.Sprintf("%s is forked to %s", p.Forkee.FullName, p.Repo.FullName) | ||||||
| 
 | 
 | ||||||
| 	return &FeishuPayload{ | 	return newFeishuTextPayload(text), nil | ||||||
| 		Text:  title, |  | ||||||
| 		Title: title, |  | ||||||
| 	}, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Push implements PayloadConvertor Push method
 | // Push implements PayloadConvertor Push method
 | ||||||
|  | @ -79,9 +83,7 @@ func (f *FeishuPayload) Push(p *api.PushPayload) (api.Payloader, error) { | ||||||
| 		commitDesc string | 		commitDesc string | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| 	title := fmt.Sprintf("[%s:%s] %s", p.Repo.FullName, branchName, commitDesc) | 	var text = fmt.Sprintf("[%s:%s] %s\n", p.Repo.FullName, branchName, commitDesc) | ||||||
| 
 |  | ||||||
| 	var text string |  | ||||||
| 	// for each commit, generate attachment text
 | 	// for each commit, generate attachment text
 | ||||||
| 	for i, commit := range p.Commits { | 	for i, commit := range p.Commits { | ||||||
| 		var authorName string | 		var authorName string | ||||||
|  | @ -96,40 +98,28 @@ func (f *FeishuPayload) Push(p *api.PushPayload) (api.Payloader, error) { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return &FeishuPayload{ | 	return newFeishuTextPayload(text), nil | ||||||
| 		Text:  text, |  | ||||||
| 		Title: title, |  | ||||||
| 	}, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Issue implements PayloadConvertor Issue method
 | // Issue implements PayloadConvertor Issue method
 | ||||||
| func (f *FeishuPayload) Issue(p *api.IssuePayload) (api.Payloader, error) { | func (f *FeishuPayload) Issue(p *api.IssuePayload) (api.Payloader, error) { | ||||||
| 	text, issueTitle, attachmentText, _ := getIssuesPayloadInfo(p, noneLinkFormatter, true) | 	text, issueTitle, attachmentText, _ := getIssuesPayloadInfo(p, noneLinkFormatter, true) | ||||||
| 
 | 
 | ||||||
| 	return &FeishuPayload{ | 	return newFeishuTextPayload(issueTitle + "\r\n" + text + "\r\n\r\n" + attachmentText), nil | ||||||
| 		Text:  text + "\r\n\r\n" + attachmentText, |  | ||||||
| 		Title: issueTitle, |  | ||||||
| 	}, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // IssueComment implements PayloadConvertor IssueComment method
 | // IssueComment implements PayloadConvertor IssueComment method
 | ||||||
| func (f *FeishuPayload) IssueComment(p *api.IssueCommentPayload) (api.Payloader, error) { | func (f *FeishuPayload) IssueComment(p *api.IssueCommentPayload) (api.Payloader, error) { | ||||||
| 	text, issueTitle, _ := getIssueCommentPayloadInfo(p, noneLinkFormatter, true) | 	text, issueTitle, _ := getIssueCommentPayloadInfo(p, noneLinkFormatter, true) | ||||||
| 
 | 
 | ||||||
| 	return &FeishuPayload{ | 	return newFeishuTextPayload(issueTitle + "\r\n" + text + "\r\n\r\n" + p.Comment.Body), nil | ||||||
| 		Text:  text + "\r\n\r\n" + p.Comment.Body, |  | ||||||
| 		Title: issueTitle, |  | ||||||
| 	}, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // PullRequest implements PayloadConvertor PullRequest method
 | // PullRequest implements PayloadConvertor PullRequest method
 | ||||||
| func (f *FeishuPayload) PullRequest(p *api.PullRequestPayload) (api.Payloader, error) { | func (f *FeishuPayload) PullRequest(p *api.PullRequestPayload) (api.Payloader, error) { | ||||||
| 	text, issueTitle, attachmentText, _ := getPullRequestPayloadInfo(p, noneLinkFormatter, true) | 	text, issueTitle, attachmentText, _ := getPullRequestPayloadInfo(p, noneLinkFormatter, true) | ||||||
| 
 | 
 | ||||||
| 	return &FeishuPayload{ | 	return newFeishuTextPayload(issueTitle + "\r\n" + text + "\r\n\r\n" + attachmentText), nil | ||||||
| 		Text:  text + "\r\n\r\n" + attachmentText, |  | ||||||
| 		Title: issueTitle, |  | ||||||
| 	}, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Review implements PayloadConvertor Review method
 | // Review implements PayloadConvertor Review method
 | ||||||
|  | @ -147,28 +137,19 @@ func (f *FeishuPayload) Review(p *api.PullRequestPayload, event models.HookEvent | ||||||
| 
 | 
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return &FeishuPayload{ | 	return newFeishuTextPayload(title + "\r\n\r\n" + text), nil | ||||||
| 		Text:  title + "\r\n\r\n" + text, |  | ||||||
| 		Title: title, |  | ||||||
| 	}, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Repository implements PayloadConvertor Repository method
 | // Repository implements PayloadConvertor Repository method
 | ||||||
| func (f *FeishuPayload) Repository(p *api.RepositoryPayload) (api.Payloader, error) { | func (f *FeishuPayload) Repository(p *api.RepositoryPayload) (api.Payloader, error) { | ||||||
| 	var title string | 	var text string | ||||||
| 	switch p.Action { | 	switch p.Action { | ||||||
| 	case api.HookRepoCreated: | 	case api.HookRepoCreated: | ||||||
| 		title = fmt.Sprintf("[%s] Repository created", p.Repository.FullName) | 		text = fmt.Sprintf("[%s] Repository created", p.Repository.FullName) | ||||||
| 		return &FeishuPayload{ | 		return newFeishuTextPayload(text), nil | ||||||
| 			Text:  title, |  | ||||||
| 			Title: title, |  | ||||||
| 		}, nil |  | ||||||
| 	case api.HookRepoDeleted: | 	case api.HookRepoDeleted: | ||||||
| 		title = fmt.Sprintf("[%s] Repository deleted", p.Repository.FullName) | 		text = fmt.Sprintf("[%s] Repository deleted", p.Repository.FullName) | ||||||
| 		return &FeishuPayload{ | 		return newFeishuTextPayload(text), nil | ||||||
| 			Title: title, |  | ||||||
| 			Text:  title, |  | ||||||
| 		}, nil |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return nil, nil | 	return nil, nil | ||||||
|  | @ -178,10 +159,7 @@ func (f *FeishuPayload) Repository(p *api.RepositoryPayload) (api.Payloader, err | ||||||
| func (f *FeishuPayload) Release(p *api.ReleasePayload) (api.Payloader, error) { | func (f *FeishuPayload) Release(p *api.ReleasePayload) (api.Payloader, error) { | ||||||
| 	text, _ := getReleasePayloadInfo(p, noneLinkFormatter, true) | 	text, _ := getReleasePayloadInfo(p, noneLinkFormatter, true) | ||||||
| 
 | 
 | ||||||
| 	return &FeishuPayload{ | 	return newFeishuTextPayload(text), nil | ||||||
| 		Text:  text, |  | ||||||
| 		Title: text, |  | ||||||
| 	}, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetFeishuPayload converts a ding talk webhook into a FeishuPayload
 | // GetFeishuPayload converts a ding talk webhook into a FeishuPayload
 | ||||||
|  |  | ||||||
|  | @ -144,7 +144,7 @@ func prepareWebhook(w *models.Webhook, repo *models.Repository, event models.Hoo | ||||||
| 
 | 
 | ||||||
| 	var payloader api.Payloader | 	var payloader api.Payloader | ||||||
| 	var err error | 	var err error | ||||||
| 	webhook, ok := webhooks[w.Type] | 	webhook, ok := webhooks[strings.TrimSpace(w.Type)] // NOTICE: w.Type maynot be trimmed before store into database
 | ||||||
| 	if ok { | 	if ok { | ||||||
| 		payloader, err = webhook.payloadCreator(p, event, w.Meta) | 		payloader, err = webhook.payloadCreator(p, event, w.Meta) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue