From 22717a1c064511cf37c46af5e650baf7184cf25b Mon Sep 17 00:00:00 2001 From: ᴜɴᴋɴᴡᴏɴ Date: Sun, 22 Mar 2020 22:07:22 +0800 Subject: webhook: overhaul route handlers (#6002) * Overual route handlers and fixes #5366 * Merge routes for repo and org * Inject OrgRepoContext * DRY validateWebhook * DRY c.HasError * Add tests * Update CHANGELOG --- internal/cmd/web.go | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) (limited to 'internal/cmd/web.go') diff --git a/internal/cmd/web.go b/internal/cmd/web.go index e8b8f57a..3ef925f4 100644 --- a/internal/cmd/web.go +++ b/internal/cmd/web.go @@ -356,6 +356,23 @@ func runWeb(c *cli.Context) error { reqRepoAdmin := context.RequireRepoAdmin() reqRepoWriter := context.RequireRepoWriter() + webhookRoutes := func() { + m.Group("", func() { + m.Get("", repo.Webhooks) + m.Post("/delete", repo.DeleteWebhook) + m.Get("/:type/new", repo.WebhooksNew) + m.Post("/gogs/new", bindIgnErr(form.NewWebhook{}), repo.WebhooksNewPost) + m.Post("/slack/new", bindIgnErr(form.NewSlackHook{}), repo.WebhooksSlackNewPost) + m.Post("/discord/new", bindIgnErr(form.NewDiscordHook{}), repo.WebhooksDiscordNewPost) + m.Post("/dingtalk/new", bindIgnErr(form.NewDingtalkHook{}), repo.WebhooksDingtalkNewPost) + m.Get("/:id", repo.WebhooksEdit) + m.Post("/gogs/:id", bindIgnErr(form.NewWebhook{}), repo.WebhooksEditPost) + m.Post("/slack/:id", bindIgnErr(form.NewSlackHook{}), repo.WebhooksSlackEditPost) + m.Post("/discord/:id", bindIgnErr(form.NewDiscordHook{}), repo.WebhooksDiscordEditPost) + m.Post("/dingtalk/:id", bindIgnErr(form.NewDingtalkHook{}), repo.WebhooksDingtalkEditPost) + }, repo.InjectOrgRepoContext()) + } + // ***** START: Organization ***** m.Group("/org", func() { m.Group("", func() { @@ -396,20 +413,7 @@ func runWeb(c *cli.Context) error { m.Post("/avatar", binding.MultipartForm(form.Avatar{}), org.SettingsAvatar) m.Post("/avatar/delete", org.SettingsDeleteAvatar) - m.Group("/hooks", func() { - m.Get("", org.Webhooks) - m.Post("/delete", org.DeleteWebhook) - m.Get("/:type/new", repo.WebhooksNew) - m.Post("/gogs/new", bindIgnErr(form.NewWebhook{}), repo.WebHooksNewPost) - m.Post("/slack/new", bindIgnErr(form.NewSlackHook{}), repo.SlackHooksNewPost) - m.Post("/discord/new", bindIgnErr(form.NewDiscordHook{}), repo.DiscordHooksNewPost) - m.Post("/dingtalk/new", bindIgnErr(form.NewDingtalkHook{}), repo.DingtalkHooksNewPost) - m.Get("/:id", repo.WebHooksEdit) - m.Post("/gogs/:id", bindIgnErr(form.NewWebhook{}), repo.WebHooksEditPost) - m.Post("/slack/:id", bindIgnErr(form.NewSlackHook{}), repo.SlackHooksEditPost) - m.Post("/discord/:id", bindIgnErr(form.NewDiscordHook{}), repo.DiscordHooksEditPost) - m.Post("/dingtalk/:id", bindIgnErr(form.NewDingtalkHook{}), repo.DingtalkHooksEditPost) - }) + m.Group("/hooks", webhookRoutes) m.Route("/delete", "GET,POST", org.SettingsDelete) }) @@ -454,20 +458,9 @@ func runWeb(c *cli.Context) error { }) m.Group("/hooks", func() { - m.Get("", repo.Webhooks) - m.Post("/delete", repo.DeleteWebhook) - m.Get("/:type/new", repo.WebhooksNew) - m.Post("/gogs/new", bindIgnErr(form.NewWebhook{}), repo.WebHooksNewPost) - m.Post("/slack/new", bindIgnErr(form.NewSlackHook{}), repo.SlackHooksNewPost) - m.Post("/discord/new", bindIgnErr(form.NewDiscordHook{}), repo.DiscordHooksNewPost) - m.Post("/dingtalk/new", bindIgnErr(form.NewDingtalkHook{}), repo.DingtalkHooksNewPost) - m.Post("/gogs/:id", bindIgnErr(form.NewWebhook{}), repo.WebHooksEditPost) - m.Post("/slack/:id", bindIgnErr(form.NewSlackHook{}), repo.SlackHooksEditPost) - m.Post("/discord/:id", bindIgnErr(form.NewDiscordHook{}), repo.DiscordHooksEditPost) - m.Post("/dingtalk/:id", bindIgnErr(form.NewDingtalkHook{}), repo.DingtalkHooksEditPost) + webhookRoutes() m.Group("/:id", func() { - m.Get("", repo.WebHooksEdit) m.Post("/test", repo.TestWebhook) m.Post("/redelivery", repo.RedeliveryWebhook) }) -- cgit v1.2.3