Skip to content

Commit

Permalink
Webhook Logs show proper HTTP Method, and allow change HTTP method in…
Browse files Browse the repository at this point in the history
… form (#6953)

* 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
  • Loading branch information
techknowlogick authored and lunny committed May 15, 2019
1 parent 710245e commit 5fb1ad7
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 11 deletions.
25 changes: 15 additions & 10 deletions models/webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -755,28 +755,26 @@ 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:
req = req.Header("Content-Type", "application/json").Body(t.PayloadContent)
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
}

Expand All @@ -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 {
Expand Down
1 change: 1 addition & 0 deletions routers/api/v1/utils/hook.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down
1 change: 1 addition & 0 deletions routers/repo/webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion templates/repo/settings/webhook/history.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down

0 comments on commit 5fb1ad7

Please sign in to comment.