[REFACTOR] webhook matrix endpoints
This commit is contained in:
parent
e41e18f87e
commit
8dfbbfef07
16 changed files with 134 additions and 49 deletions
|
@ -24,11 +24,14 @@ import (
|
|||
api "code.gitea.io/gitea/modules/structs"
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
"code.gitea.io/gitea/modules/web"
|
||||
"code.gitea.io/gitea/modules/web/middleware"
|
||||
webhook_module "code.gitea.io/gitea/modules/webhook"
|
||||
"code.gitea.io/gitea/services/context"
|
||||
"code.gitea.io/gitea/services/convert"
|
||||
"code.gitea.io/gitea/services/forms"
|
||||
webhook_service "code.gitea.io/gitea/services/webhook"
|
||||
|
||||
"gitea.com/go-chi/binding"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -201,6 +204,29 @@ type webhookParams struct {
|
|||
Meta any
|
||||
}
|
||||
|
||||
func WebhookCreate(ctx *context.Context) {
|
||||
typ := ctx.Params(":type")
|
||||
handler := webhook_service.GetWebhookHandler(typ)
|
||||
if handler == nil {
|
||||
ctx.NotFound("GetWebhookHandler", nil)
|
||||
return
|
||||
}
|
||||
|
||||
fields := handler.FormFields(func(form any) {
|
||||
errs := binding.Bind(ctx.Req, form)
|
||||
middleware.Validate(errs, ctx.Data, form, ctx.Locale) // error will be checked later in ctx.HasError
|
||||
})
|
||||
createWebhook(ctx, webhookParams{
|
||||
Type: typ,
|
||||
URL: fields.URL,
|
||||
ContentType: fields.ContentType,
|
||||
Secret: fields.Secret,
|
||||
HTTPMethod: fields.HTTPMethod,
|
||||
WebhookForm: fields.WebhookForm,
|
||||
Meta: fields.Metadata,
|
||||
})
|
||||
}
|
||||
|
||||
func createWebhook(ctx *context.Context, params webhookParams) {
|
||||
ctx.Data["Title"] = ctx.Tr("repo.settings.add_webhook")
|
||||
ctx.Data["PageIsSettingsHooks"] = true
|
||||
|
@ -260,6 +286,29 @@ func createWebhook(ctx *context.Context, params webhookParams) {
|
|||
ctx.Redirect(orCtx.Link)
|
||||
}
|
||||
|
||||
func WebhookUpdate(ctx *context.Context) {
|
||||
typ := ctx.Params(":type")
|
||||
handler := webhook_service.GetWebhookHandler(typ)
|
||||
if handler == nil {
|
||||
ctx.NotFound("GetWebhookHandler", nil)
|
||||
return
|
||||
}
|
||||
|
||||
fields := handler.FormFields(func(form any) {
|
||||
errs := binding.Bind(ctx.Req, form)
|
||||
middleware.Validate(errs, ctx.Data, form, ctx.Locale) // error will be checked later in ctx.HasError
|
||||
})
|
||||
editWebhook(ctx, webhookParams{
|
||||
Type: typ,
|
||||
URL: fields.URL,
|
||||
ContentType: fields.ContentType,
|
||||
Secret: fields.Secret,
|
||||
HTTPMethod: fields.HTTPMethod,
|
||||
WebhookForm: fields.WebhookForm,
|
||||
Meta: fields.Metadata,
|
||||
})
|
||||
}
|
||||
|
||||
func editWebhook(ctx *context.Context, params webhookParams) {
|
||||
ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook")
|
||||
ctx.Data["PageIsSettingsHooks"] = true
|
||||
|
@ -467,33 +516,6 @@ func telegramHookParams(ctx *context.Context) webhookParams {
|
|||
}
|
||||
}
|
||||
|
||||
// MatrixHooksNewPost response for creating Matrix webhook
|
||||
func MatrixHooksNewPost(ctx *context.Context) {
|
||||
createWebhook(ctx, matrixHookParams(ctx))
|
||||
}
|
||||
|
||||
// MatrixHooksEditPost response for editing Matrix webhook
|
||||
func MatrixHooksEditPost(ctx *context.Context) {
|
||||
editWebhook(ctx, matrixHookParams(ctx))
|
||||
}
|
||||
|
||||
func matrixHookParams(ctx *context.Context) webhookParams {
|
||||
form := web.GetForm(ctx).(*forms.NewMatrixHookForm)
|
||||
|
||||
return webhookParams{
|
||||
Type: webhook_module.MATRIX,
|
||||
URL: fmt.Sprintf("%s/_matrix/client/r0/rooms/%s/send/m.room.message", form.HomeserverURL, url.PathEscape(form.RoomID)),
|
||||
ContentType: webhook.ContentTypeJSON,
|
||||
HTTPMethod: http.MethodPut,
|
||||
WebhookForm: form.WebhookForm,
|
||||
Meta: &webhook_service.MatrixMeta{
|
||||
HomeserverURL: form.HomeserverURL,
|
||||
Room: form.RoomID,
|
||||
MessageType: form.MessageType,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// MSTeamsHooksNewPost response for creating MSTeams webhook
|
||||
func MSTeamsHooksNewPost(ctx *context.Context) {
|
||||
createWebhook(ctx, mSTeamsHookParams(ctx))
|
||||
|
|
|
@ -409,11 +409,11 @@ func registerRoutes(m *web.Route) {
|
|||
m.Post("/discord/new", web.Bind(forms.NewDiscordHookForm{}), repo_setting.DiscordHooksNewPost)
|
||||
m.Post("/dingtalk/new", web.Bind(forms.NewDingtalkHookForm{}), repo_setting.DingtalkHooksNewPost)
|
||||
m.Post("/telegram/new", web.Bind(forms.NewTelegramHookForm{}), repo_setting.TelegramHooksNewPost)
|
||||
m.Post("/matrix/new", web.Bind(forms.NewMatrixHookForm{}), repo_setting.MatrixHooksNewPost)
|
||||
m.Post("/msteams/new", web.Bind(forms.NewMSTeamsHookForm{}), repo_setting.MSTeamsHooksNewPost)
|
||||
m.Post("/feishu/new", web.Bind(forms.NewFeishuHookForm{}), repo_setting.FeishuHooksNewPost)
|
||||
m.Post("/wechatwork/new", web.Bind(forms.NewWechatWorkHookForm{}), repo_setting.WechatworkHooksNewPost)
|
||||
m.Post("/packagist/new", web.Bind(forms.NewPackagistHookForm{}), repo_setting.PackagistHooksNewPost)
|
||||
m.Post("/{type}/new", repo_setting.WebhookCreate)
|
||||
}
|
||||
|
||||
addWebhookEditRoutes := func() {
|
||||
|
@ -424,11 +424,11 @@ func registerRoutes(m *web.Route) {
|
|||
m.Post("/discord/{id}", web.Bind(forms.NewDiscordHookForm{}), repo_setting.DiscordHooksEditPost)
|
||||
m.Post("/dingtalk/{id}", web.Bind(forms.NewDingtalkHookForm{}), repo_setting.DingtalkHooksEditPost)
|
||||
m.Post("/telegram/{id}", web.Bind(forms.NewTelegramHookForm{}), repo_setting.TelegramHooksEditPost)
|
||||
m.Post("/matrix/{id}", web.Bind(forms.NewMatrixHookForm{}), repo_setting.MatrixHooksEditPost)
|
||||
m.Post("/msteams/{id}", web.Bind(forms.NewMSTeamsHookForm{}), repo_setting.MSTeamsHooksEditPost)
|
||||
m.Post("/feishu/{id}", web.Bind(forms.NewFeishuHookForm{}), repo_setting.FeishuHooksEditPost)
|
||||
m.Post("/wechatwork/{id}", web.Bind(forms.NewWechatWorkHookForm{}), repo_setting.WechatworkHooksEditPost)
|
||||
m.Post("/packagist/{id}", web.Bind(forms.NewPackagistHookForm{}), repo_setting.PackagistHooksEditPost)
|
||||
m.Post("/{type}/{id:[0-9]+}", repo_setting.WebhookUpdate)
|
||||
}
|
||||
|
||||
addSettingsVariablesRoutes := func() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue