From e0c6ab2d44d17b72a7ea6f8b4c829c42baeaae3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Boulanouar?= Date: Mon, 29 May 2017 09:17:15 +0200 Subject: [PATCH] Add Gitea Webhook (#1755) * Replace Gogs by Gitea * Fix missing changes * Create Gitea webhook and put Gogs webhook apart. --- models/webhook.go | 9 ++- models/webhook_test.go | 5 +- modules/auth/repo_form.go | 14 ++++ modules/setting/setting.go | 3 +- public/img/gogs.ico | Bin 0 -> 29157 bytes routers/repo/webhook.go | 93 +++++++++++++++++++++++- routers/routes/routes.go | 12 ++- templates/org/settings/hook_new.tmpl | 5 +- templates/repo/settings/hook_gitea.tmpl | 28 +++++++ templates/repo/settings/hook_list.tmpl | 5 +- templates/repo/settings/hook_new.tmpl | 5 +- 11 files changed, 167 insertions(+), 12 deletions(-) create mode 100644 public/img/gogs.ico create mode 100644 templates/repo/settings/hook_gitea.tmpl diff --git a/models/webhook.go b/models/webhook.go index 3fb1e57e78..5cb2e13a6d 100644 --- a/models/webhook.go +++ b/models/webhook.go @@ -1,4 +1,5 @@ // Copyright 2014 The Gogs Authors. All rights reserved. +// Copyright 2017 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. @@ -312,9 +313,11 @@ type HookTaskType int const ( GOGS HookTaskType = iota + 1 SLACK + GITEA ) var hookTaskTypes = map[string]HookTaskType{ + "gitea": GITEA, "gogs": GOGS, "slack": SLACK, } @@ -327,6 +330,8 @@ func ToHookTaskType(name string) HookTaskType { // 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: @@ -503,7 +508,7 @@ func PrepareWebhooks(repo *Repository, event HookEventType, p api.Payloader) err } } - // Use separate objects so modifications won't be made on payload on non-Gogs type hooks. + // Use separate objects so modifications won't be made on payload on non-Gogs/Gitea type hooks. switch w.HookTaskType { case SLACK: payloader, err = GetSlackPayload(p, event, w.Meta) @@ -536,6 +541,8 @@ func (t *HookTask) deliver() { timeout := time.Duration(setting.Webhook.DeliverTimeout) * time.Second req := httplib.Post(t.URL).SetTimeout(timeout, timeout). + Header("X-Gitea-Delivery", t.UUID). + Header("X-Gitea-Event", string(t.EventType)). Header("X-Gogs-Delivery", t.UUID). Header("X-Gogs-Event", string(t.EventType)). Header("X-GitHub-Delivery", t.UUID). diff --git a/models/webhook_test.go b/models/webhook_test.go index 3f377eae7a..a637a16999 100644 --- a/models/webhook_test.go +++ b/models/webhook_test.go @@ -191,16 +191,19 @@ func TestDeleteWebhookByOrgID(t *testing.T) { func TestToHookTaskType(t *testing.T) { assert.Equal(t, GOGS, ToHookTaskType("gogs")) assert.Equal(t, SLACK, ToHookTaskType("slack")) + assert.Equal(t, GITEA, ToHookTaskType("gitea")) } func TestHookTaskType_Name(t *testing.T) { assert.Equal(t, "gogs", GOGS.Name()) assert.Equal(t, "slack", SLACK.Name()) + assert.Equal(t, "gitea", GITEA.Name()) } func TestIsValidHookTaskType(t *testing.T) { assert.True(t, IsValidHookTaskType("gogs")) assert.True(t, IsValidHookTaskType("slack")) + assert.True(t, IsValidHookTaskType("gitea")) assert.False(t, IsValidHookTaskType("invalid")) } @@ -221,7 +224,7 @@ func TestCreateHookTask(t *testing.T) { hookTask := &HookTask{ RepoID: 3, HookID: 3, - Type: GOGS, + Type: GITEA, URL: "http://www.example.com/unit_test", Payloader: &api.PushPayload{}, } diff --git a/modules/auth/repo_form.go b/modules/auth/repo_form.go index c56e76c871..58dcf468ef 100644 --- a/modules/auth/repo_form.go +++ b/modules/auth/repo_form.go @@ -1,4 +1,5 @@ // Copyright 2014 The Gogs Authors. All rights reserved. +// Copyright 2017 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. @@ -154,6 +155,19 @@ func (f *NewWebhookForm) Validate(ctx *macaron.Context, errs binding.Errors) bin return validate(errs, ctx.Data, f, ctx.Locale) } +// NewGogshookForm form for creating gogs hook +type NewGogshookForm struct { + PayloadURL string `binding:"Required;ValidUrl"` + ContentType int `binding:"Required"` + Secret string + WebhookForm +} + +// Validate validates the fields +func (f *NewGogshookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} + // NewSlackHookForm form for creating slack hook type NewSlackHookForm struct { PayloadURL string `binding:"Required;ValidUrl"` diff --git a/modules/setting/setting.go b/modules/setting/setting.go index c3a829715b..a948527a2c 100644 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -1,4 +1,5 @@ // Copyright 2014 The Gogs Authors. All rights reserved. +// Copyright 2017 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. @@ -1325,7 +1326,7 @@ func newWebhookService() { Webhook.QueueLength = sec.Key("QUEUE_LENGTH").MustInt(1000) Webhook.DeliverTimeout = sec.Key("DELIVER_TIMEOUT").MustInt(5) Webhook.SkipTLSVerify = sec.Key("SKIP_TLS_VERIFY").MustBool() - Webhook.Types = []string{"gogs", "slack"} + Webhook.Types = []string{"gitea", "gogs", "slack"} Webhook.PagingNum = sec.Key("PAGING_NUM").MustInt(10) } diff --git a/public/img/gogs.ico b/public/img/gogs.ico new file mode 100644 index 0000000000000000000000000000000000000000..34385535534c7520f4b1194e9a5def4094874374 GIT binary patch literal 29157 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 bOymCp`q|SR$fnVD00000NkvXXu0mjf {{if .PageIsSettingsHooksNew}}{{.i18n.Tr "repo.settings.add_webhook"}}{{else}}{{.i18n.Tr "repo.settings.update_webhook"}}{{end}}

- {{if eq .HookType "gogs"}} + {{if eq .HookType "gitea"}} + {{else if eq .HookType "gogs"}} + {{else if eq .HookType "slack"}} {{end}}
+ {{template "repo/settings/hook_gitea" .}} {{template "repo/settings/hook_gogs" .}} {{template "repo/settings/hook_slack" .}}
diff --git a/templates/repo/settings/hook_gitea.tmpl b/templates/repo/settings/hook_gitea.tmpl new file mode 100644 index 0000000000..4ac6d718c9 --- /dev/null +++ b/templates/repo/settings/hook_gitea.tmpl @@ -0,0 +1,28 @@ +{{if eq .HookType "gitea"}} +

{{.i18n.Tr "repo.settings.add_webhook_desc" "https://docs.gitea.io/features/webhook.html" | Str2html}}

+
+ {{.CsrfTokenHtml}} +
+ + +
+
+ + +
+ +
+ + +
+ {{template "repo/settings/hook_settings" .}} +
+{{end}} diff --git a/templates/repo/settings/hook_list.tmpl b/templates/repo/settings/hook_list.tmpl index 0b9c4d5057..aba948b952 100644 --- a/templates/repo/settings/hook_list.tmpl +++ b/templates/repo/settings/hook_list.tmpl @@ -5,9 +5,12 @@