diff --git a/hook/hook.go b/hook/hook.go index 7fd8c1f..bc9c58b 100644 --- a/hook/hook.go +++ b/hook/hook.go @@ -391,6 +391,7 @@ type Hook struct { JSONStringParameters []Argument `json:"parse-parameters-as-json,omitempty"` TriggerRule *Rules `json:"trigger-rule,omitempty"` TriggerRuleMismatchHttpResponseCode int `json:"trigger-rule-mismatch-http-response-code,omitempty"` + IncomingPayloadContentType string `json:"incoming-payload-content-type,omitempty"` } // ParseJSONParameters decodes specified arguments to JSON objects and replaces the diff --git a/webhook.go b/webhook.go index 8a318ee..e75f473 100644 --- a/webhook.go +++ b/webhook.go @@ -231,7 +231,7 @@ func hookHandler(w http.ResponseWriter, r *http.Request) { contentType := r.Header.Get("Content-Type") - if strings.Contains(contentType, "json") { + if strings.Contains(matchedHook.IncomingPayloadContentType, "json") || strings.Contains(contentType, "json") { decoder := json.NewDecoder(strings.NewReader(string(body))) decoder.UseNumber() @@ -240,7 +240,7 @@ func hookHandler(w http.ResponseWriter, r *http.Request) { if err != nil { log.Printf("[%s] error parsing JSON payload %+v\n", rid, err) } - } else if strings.Contains(contentType, "form") { + } else if strings.Contains(matchedHook.IncomingPayloadContentType, "form") || strings.Contains(contentType, "form") { fd, err := url.ParseQuery(string(body)) if err != nil { log.Printf("[%s] error parsing form payload %+v\n", rid, err)