mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00:00 
			
		
		
		
	[REFACTOR] webhook forgejo/gitea endpoints
This commit is contained in:
		
					parent
					
						
							
								8dfbbfef07
							
						
					
				
			
			
				commit
				
					
						7e0965b02c
					
				
			
		
					 4 changed files with 22 additions and 76 deletions
				
			
		| 
						 | 
					@ -361,62 +361,6 @@ func editWebhook(ctx *context.Context, params webhookParams) {
 | 
				
			||||||
	ctx.Redirect(fmt.Sprintf("%s/%d", orCtx.Link, w.ID))
 | 
						ctx.Redirect(fmt.Sprintf("%s/%d", orCtx.Link, w.ID))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ForgejoHooksNewPost response for creating Forgejo webhook
 | 
					 | 
				
			||||||
func ForgejoHooksNewPost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	createWebhook(ctx, forgejoHookParams(ctx))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ForgejoHooksEditPost response for editing Forgejo webhook
 | 
					 | 
				
			||||||
func ForgejoHooksEditPost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	editWebhook(ctx, forgejoHookParams(ctx))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func forgejoHookParams(ctx *context.Context) webhookParams {
 | 
					 | 
				
			||||||
	form := web.GetForm(ctx).(*forms.NewWebhookForm)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	contentType := webhook.ContentTypeJSON
 | 
					 | 
				
			||||||
	if webhook.HookContentType(form.ContentType) == webhook.ContentTypeForm {
 | 
					 | 
				
			||||||
		contentType = webhook.ContentTypeForm
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return webhookParams{
 | 
					 | 
				
			||||||
		Type:        webhook_module.FORGEJO,
 | 
					 | 
				
			||||||
		URL:         form.PayloadURL,
 | 
					 | 
				
			||||||
		ContentType: contentType,
 | 
					 | 
				
			||||||
		Secret:      form.Secret,
 | 
					 | 
				
			||||||
		HTTPMethod:  form.HTTPMethod,
 | 
					 | 
				
			||||||
		WebhookForm: form.WebhookForm,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// GiteaHooksNewPost response for creating Gitea webhook
 | 
					 | 
				
			||||||
func GiteaHooksNewPost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	createWebhook(ctx, giteaHookParams(ctx))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// GiteaHooksEditPost response for editing Gitea webhook
 | 
					 | 
				
			||||||
func GiteaHooksEditPost(ctx *context.Context) {
 | 
					 | 
				
			||||||
	editWebhook(ctx, giteaHookParams(ctx))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func giteaHookParams(ctx *context.Context) webhookParams {
 | 
					 | 
				
			||||||
	form := web.GetForm(ctx).(*forms.NewWebhookForm)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	contentType := webhook.ContentTypeJSON
 | 
					 | 
				
			||||||
	if webhook.HookContentType(form.ContentType) == webhook.ContentTypeForm {
 | 
					 | 
				
			||||||
		contentType = webhook.ContentTypeForm
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return webhookParams{
 | 
					 | 
				
			||||||
		Type:        webhook_module.GITEA,
 | 
					 | 
				
			||||||
		URL:         form.PayloadURL,
 | 
					 | 
				
			||||||
		ContentType: contentType,
 | 
					 | 
				
			||||||
		Secret:      form.Secret,
 | 
					 | 
				
			||||||
		HTTPMethod:  form.HTTPMethod,
 | 
					 | 
				
			||||||
		WebhookForm: form.WebhookForm,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// GogsHooksNewPost response for creating Gogs webhook
 | 
					// GogsHooksNewPost response for creating Gogs webhook
 | 
				
			||||||
func GogsHooksNewPost(ctx *context.Context) {
 | 
					func GogsHooksNewPost(ctx *context.Context) {
 | 
				
			||||||
	createWebhook(ctx, gogsHookParams(ctx))
 | 
						createWebhook(ctx, gogsHookParams(ctx))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -402,8 +402,6 @@ func registerRoutes(m *web.Route) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	addWebhookAddRoutes := func() {
 | 
						addWebhookAddRoutes := func() {
 | 
				
			||||||
		m.Get("/{type}/new", repo_setting.WebhooksNew)
 | 
							m.Get("/{type}/new", repo_setting.WebhooksNew)
 | 
				
			||||||
		m.Post("/forgejo/new", web.Bind(forms.NewWebhookForm{}), repo_setting.ForgejoHooksNewPost)
 | 
					 | 
				
			||||||
		m.Post("/gitea/new", web.Bind(forms.NewWebhookForm{}), repo_setting.GiteaHooksNewPost)
 | 
					 | 
				
			||||||
		m.Post("/gogs/new", web.Bind(forms.NewGogshookForm{}), repo_setting.GogsHooksNewPost)
 | 
							m.Post("/gogs/new", web.Bind(forms.NewGogshookForm{}), repo_setting.GogsHooksNewPost)
 | 
				
			||||||
		m.Post("/slack/new", web.Bind(forms.NewSlackHookForm{}), repo_setting.SlackHooksNewPost)
 | 
							m.Post("/slack/new", web.Bind(forms.NewSlackHookForm{}), repo_setting.SlackHooksNewPost)
 | 
				
			||||||
		m.Post("/discord/new", web.Bind(forms.NewDiscordHookForm{}), repo_setting.DiscordHooksNewPost)
 | 
							m.Post("/discord/new", web.Bind(forms.NewDiscordHookForm{}), repo_setting.DiscordHooksNewPost)
 | 
				
			||||||
| 
						 | 
					@ -417,8 +415,6 @@ func registerRoutes(m *web.Route) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	addWebhookEditRoutes := func() {
 | 
						addWebhookEditRoutes := func() {
 | 
				
			||||||
		m.Post("/forgejo/{id}", web.Bind(forms.NewWebhookForm{}), repo_setting.ForgejoHooksEditPost)
 | 
					 | 
				
			||||||
		m.Post("/gitea/{id}", web.Bind(forms.NewWebhookForm{}), repo_setting.GiteaHooksEditPost)
 | 
					 | 
				
			||||||
		m.Post("/gogs/{id}", web.Bind(forms.NewGogshookForm{}), repo_setting.GogsHooksEditPost)
 | 
							m.Post("/gogs/{id}", web.Bind(forms.NewGogshookForm{}), repo_setting.GogsHooksEditPost)
 | 
				
			||||||
		m.Post("/slack/{id}", web.Bind(forms.NewSlackHookForm{}), repo_setting.SlackHooksEditPost)
 | 
							m.Post("/slack/{id}", web.Bind(forms.NewSlackHookForm{}), repo_setting.SlackHooksEditPost)
 | 
				
			||||||
		m.Post("/discord/{id}", web.Bind(forms.NewDiscordHookForm{}), repo_setting.DiscordHooksEditPost)
 | 
							m.Post("/discord/{id}", web.Bind(forms.NewDiscordHookForm{}), repo_setting.DiscordHooksEditPost)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -279,21 +279,6 @@ func (f WebhookForm) ChooseEvents() bool {
 | 
				
			||||||
	return f.Events == "choose_events"
 | 
						return f.Events == "choose_events"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewWebhookForm form for creating web hook
 | 
					 | 
				
			||||||
type NewWebhookForm struct {
 | 
					 | 
				
			||||||
	PayloadURL  string `binding:"Required;ValidUrl"`
 | 
					 | 
				
			||||||
	HTTPMethod  string `binding:"Required;In(POST,GET)"`
 | 
					 | 
				
			||||||
	ContentType int    `binding:"Required"`
 | 
					 | 
				
			||||||
	Secret      string
 | 
					 | 
				
			||||||
	WebhookForm
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Validate validates the fields
 | 
					 | 
				
			||||||
func (f *NewWebhookForm) Validate(req *http.Request, errs binding.Errors) binding.Errors {
 | 
					 | 
				
			||||||
	ctx := context.GetValidateContext(req)
 | 
					 | 
				
			||||||
	return middleware.Validate(errs, ctx.Data, f, ctx.Locale)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// NewGogshookForm form for creating gogs hook
 | 
					// NewGogshookForm form for creating gogs hook
 | 
				
			||||||
type NewGogshookForm struct {
 | 
					type NewGogshookForm struct {
 | 
				
			||||||
	PayloadURL  string `binding:"Required;ValidUrl"`
 | 
						PayloadURL  string `binding:"Required;ValidUrl"`
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@ import (
 | 
				
			||||||
	webhook_model "code.gitea.io/gitea/models/webhook"
 | 
						webhook_model "code.gitea.io/gitea/models/webhook"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/log"
 | 
						"code.gitea.io/gitea/modules/log"
 | 
				
			||||||
	webhook_module "code.gitea.io/gitea/modules/webhook"
 | 
						webhook_module "code.gitea.io/gitea/modules/webhook"
 | 
				
			||||||
 | 
						"code.gitea.io/gitea/services/forms"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _ Handler = defaultHandler{}
 | 
					var _ Handler = defaultHandler{}
 | 
				
			||||||
| 
						 | 
					@ -36,7 +37,27 @@ func (dh defaultHandler) Type() webhook_module.HookType {
 | 
				
			||||||
func (defaultHandler) Metadata(*webhook_model.Webhook) any { return nil }
 | 
					func (defaultHandler) Metadata(*webhook_model.Webhook) any { return nil }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (defaultHandler) FormFields(bind func(any)) FormFields {
 | 
					func (defaultHandler) FormFields(bind func(any)) FormFields {
 | 
				
			||||||
	panic("TODO")
 | 
						var form struct {
 | 
				
			||||||
 | 
							forms.WebhookForm
 | 
				
			||||||
 | 
							PayloadURL  string `binding:"Required;ValidUrl"`
 | 
				
			||||||
 | 
							HTTPMethod  string `binding:"Required;In(POST,GET)"`
 | 
				
			||||||
 | 
							ContentType int    `binding:"Required"`
 | 
				
			||||||
 | 
							Secret      string
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						bind(&form)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						contentType := webhook_model.ContentTypeJSON
 | 
				
			||||||
 | 
						if webhook_model.HookContentType(form.ContentType) == webhook_model.ContentTypeForm {
 | 
				
			||||||
 | 
							contentType = webhook_model.ContentTypeForm
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return FormFields{
 | 
				
			||||||
 | 
							WebhookForm: form.WebhookForm,
 | 
				
			||||||
 | 
							URL:         form.PayloadURL,
 | 
				
			||||||
 | 
							ContentType: contentType,
 | 
				
			||||||
 | 
							Secret:      form.Secret,
 | 
				
			||||||
 | 
							HTTPMethod:  form.HTTPMethod,
 | 
				
			||||||
 | 
							Metadata:    nil,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (defaultHandler) NewRequest(ctx context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (req *http.Request, body []byte, err error) {
 | 
					func (defaultHandler) NewRequest(ctx context.Context, w *webhook_model.Webhook, t *webhook_model.HookTask) (req *http.Request, body []byte, err error) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue