]> source.dussan.org Git - gitea.git/commitdiff
Webhook Logs show proper HTTP Method, and allow change HTTP method in form (#6953)
authortechknowlogick <matti@mdranta.net>
Wed, 15 May 2019 12:01:53 +0000 (08:01 -0400)
committerLunny Xiao <xiaolunwen@gmail.com>
Wed, 15 May 2019 12:01:53 +0000 (20:01 +0800)
* Fix #6951 - logs show proper HTTP Method, and allow change HTTP method
in form

* enforce POST method for webhook

* set default if method is empty

models/webhook.go
routers/api/v1/utils/hook.go
routers/repo/webhook.go
templates/repo/settings/webhook/history.tmpl

index 51b91879eea189497405a8d8e0af82bca9b8fe90..48c4de2ea3509ad1a32aecc21f3b0ce1323fcf86 100644 (file)
@@ -755,17 +755,15 @@ 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 "":
+               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 {
                case ContentTypeJSON:
@@ -773,10 +771,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 +790,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 {
index da15850ec524a7674772e80b3191d2007620bc49..92846c5f2a3fddab4fd283c0de99f9240a358607 100644 (file)
@@ -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{
index 7695f208ce5f699f556399fd0796995f75c25499..8daf721b50e1c059c7e4e91636bd0eee8b7b8e74 100644 (file)
@@ -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
index 7f85c702b5440e1ed3dc295a83c7332b5c58d561..577f35772037fde5709697ecd50a01fef0ee4f17 100644 (file)
@@ -45,7 +45,7 @@
                                                        {{if .RequestInfo}}
                                                                <h5>{{$.i18n.Tr "repo.settings.webhook.headers"}}</h5>
                                                                <pre class="raw"><strong>Request URL:</strong> {{.URL}}
-<strong>Request method:</strong> POST
+<strong>Request method:</strong> {{if .HTTPMethod}}{{.HTTPMethod}}{{else}}POST{{end}}
 {{ range $key, $val := .RequestInfo.Headers }}<strong>{{$key}}:</strong> {{$val}}
 {{end}}</pre>
                                                                <h5>{{$.i18n.Tr "repo.settings.webhook.payload"}}</h5>