From 682dcf1d16e265e2ae44e15e18d3f47ec4cdf20f Mon Sep 17 00:00:00 2001 From: Matti Ranta Date: Tue, 14 May 2019 19:03:35 -0400 Subject: [PATCH 1/3] Fix #6951 - logs show proper HTTP Method, and allow change HTTP method in form --- models/webhook.go | 22 +++++++++++--------- routers/repo/webhook.go | 1 + templates/repo/settings/webhook/history.tmpl | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/models/webhook.go b/models/webhook.go index 51b91879eea18..b7154ce03c904 100644 --- a/models/webhook.go +++ b/models/webhook.go @@ -755,17 +755,12 @@ func prepareWebhooks(e Engine, repo *Repository, event HookEventType, p api.Payl func (t *HookTask) deliver() { t.IsDelivered = true - t.RequestInfo = &HookRequest{ - Headers: map[string]string{}, - } - t.ResponseInfo = &HookResponse{ - Headers: map[string]string{}, - } timeout := time.Duration(setting.Webhook.DeliverTimeout) * time.Second var req *httplib.Request - if t.HTTPMethod == http.MethodPost { + switch t.HTTPMethod { + case http.MethodPost: req = httplib.Post(t.URL) switch t.ContentType { case ContentTypeJSON: @@ -773,10 +768,10 @@ func (t *HookTask) deliver() { case ContentTypeForm: req.Param("payload", t.PayloadContent) } - } else if t.HTTPMethod == http.MethodGet { + case http.MethodGet: req = httplib.Get(t.URL).Param("payload", t.PayloadContent) - } else { - t.ResponseInfo.Body = fmt.Sprintf("Invalid http method: %v", t.HTTPMethod) + default: + log.Error("Invalid http method for webhook: [%d] %v", t.ID, t.HTTPMethod) return } @@ -792,10 +787,17 @@ func (t *HookTask) deliver() { SetTLSClientConfig(&tls.Config{InsecureSkipVerify: setting.Webhook.SkipTLSVerify}) // Record delivery information. + t.RequestInfo = &HookRequest{ + Headers: map[string]string{}, + } for k, vals := range req.Headers() { t.RequestInfo.Headers[k] = strings.Join(vals, ",") } + t.ResponseInfo = &HookResponse{ + Headers: map[string]string{}, + } + defer func() { t.Delivered = time.Now().UnixNano() if t.IsSucceed { diff --git a/routers/repo/webhook.go b/routers/repo/webhook.go index 7695f208ce5f6..8daf721b50e1c 100644 --- a/routers/repo/webhook.go +++ b/routers/repo/webhook.go @@ -564,6 +564,7 @@ func WebHooksEditPost(ctx *context.Context, form auth.NewWebhookForm) { w.Secret = form.Secret w.HookEvent = ParseHookEvent(form.WebhookForm) w.IsActive = form.Active + w.HTTPMethod = form.HTTPMethod if err := w.UpdateEvent(); err != nil { ctx.ServerError("UpdateEvent", err) return diff --git a/templates/repo/settings/webhook/history.tmpl b/templates/repo/settings/webhook/history.tmpl index 7f85c702b5440..577f35772037f 100644 --- a/templates/repo/settings/webhook/history.tmpl +++ b/templates/repo/settings/webhook/history.tmpl @@ -45,7 +45,7 @@ {{if .RequestInfo}}
{{$.i18n.Tr "repo.settings.webhook.headers"}}
Request URL: {{.URL}}
-Request method: POST
+Request method: {{if .HTTPMethod}}{{.HTTPMethod}}{{else}}POST{{end}}
 {{ range $key, $val := .RequestInfo.Headers }}{{$key}}: {{$val}}
 {{end}}
{{$.i18n.Tr "repo.settings.webhook.payload"}}
From 072937fba33c2c089e145e3fdae7c3d942804379 Mon Sep 17 00:00:00 2001 From: Matti Ranta Date: Tue, 14 May 2019 19:28:56 -0400 Subject: [PATCH 2/3] enforce POST method for webhook --- routers/api/v1/utils/hook.go | 1 + 1 file changed, 1 insertion(+) diff --git a/routers/api/v1/utils/hook.go b/routers/api/v1/utils/hook.go index da15850ec524a..92846c5f2a3fd 100644 --- a/routers/api/v1/utils/hook.go +++ b/routers/api/v1/utils/hook.go @@ -98,6 +98,7 @@ func addHook(ctx *context.APIContext, form *api.CreateHookOption, orgID, repoID URL: form.Config["url"], ContentType: models.ToHookContentType(form.Config["content_type"]), Secret: form.Config["secret"], + HTTPMethod: "POST", HookEvent: &models.HookEvent{ ChooseEvents: true, HookEvents: models.HookEvents{ From e782ed5433e53f6eec63000ab82faa97c6547529 Mon Sep 17 00:00:00 2001 From: Matti Ranta Date: Tue, 14 May 2019 19:52:24 -0400 Subject: [PATCH 3/3] set default if method is empty --- models/webhook.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/models/webhook.go b/models/webhook.go index b7154ce03c904..48c4de2ea3509 100644 --- a/models/webhook.go +++ b/models/webhook.go @@ -760,6 +760,9 @@ func (t *HookTask) deliver() { var req *httplib.Request switch t.HTTPMethod { + case "": + log.Info("HTTP Method for webhook %d empty, setting to POST as default", t.ID) + fallthrough case http.MethodPost: req = httplib.Post(t.URL) switch t.ContentType {