From 62f9c01cab97598969456faa1148f3cc32c4f817 Mon Sep 17 00:00:00 2001 From: Cameron Moore Date: Wed, 25 Nov 2020 10:06:41 -0600 Subject: [PATCH] Add option to send raw request body to command The existing `entire-payload` option sends a JSON representation of the parsed request body. Add a new `raw-request-body` source to send the raw request body. Fixes #439 --- internal/hook/hook.go | 22 +++++++++++++--------- test/hooks.json.tmpl | 11 +++++++++++ test/hooks.yaml.tmpl | 7 +++++++ webhook_test.go | 19 +++++++++++++++++++ 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/internal/hook/hook.go b/internal/hook/hook.go index 19809e74..987f324d 100644 --- a/internal/hook/hook.go +++ b/internal/hook/hook.go @@ -31,15 +31,16 @@ import ( // Constants used to specify the parameter source const ( - SourceHeader string = "header" - SourceQuery string = "url" - SourceQueryAlias string = "query" - SourcePayload string = "payload" - SourceRequest string = "request" - SourceString string = "string" - SourceEntirePayload string = "entire-payload" - SourceEntireQuery string = "entire-query" - SourceEntireHeaders string = "entire-headers" + SourceHeader string = "header" + SourceQuery string = "url" + SourceQueryAlias string = "query" + SourcePayload string = "payload" + SourceRawRequestBody string = "raw-request-body" + SourceRequest string = "request" + SourceString string = "string" + SourceEntirePayload string = "entire-payload" + SourceEntireQuery string = "entire-query" + SourceEntireHeaders string = "entire-headers" ) const ( @@ -449,6 +450,9 @@ func (ha *Argument) Get(r *Request) (string, error) { case SourceString: return ha.Name, nil + case SourceRawRequestBody: + return string(r.Body), nil + case SourceRequest: if r == nil || r.RawRequest == nil { return "", errors.New("request is nil") diff --git a/test/hooks.json.tmpl b/test/hooks.json.tmpl index fd5cb839..032d331e 100644 --- a/test/hooks.json.tmpl +++ b/test/hooks.json.tmpl @@ -168,6 +168,17 @@ ], } }, + { + "id": "txt-raw", + "execute-command": "{{ .Hookecho }}", + "command-working-directory": "/", + "include-command-output-in-response": true, + "pass-arguments-to-command": [ + { + "source": "raw-request-body" + } + ] + }, { "id": "sendgrid", "execute-command": "{{ .Hookecho }}", diff --git a/test/hooks.yaml.tmpl b/test/hooks.yaml.tmpl index 82833dca..9d73d8b0 100644 --- a/test/hooks.yaml.tmpl +++ b/test/hooks.yaml.tmpl @@ -97,6 +97,13 @@ name: "app.messages.message.#text" value: "Hello!!" +- id: txt-raw + execute-command: '{{ .Hookecho }}' + command-working-directory: / + include-command-output-in-response: true + pass-arguments-to-command: + - source: raw-request-body + - id: sendgrid execute-command: '{{ .Hookecho }}' command-working-directory: / diff --git a/webhook_test.go b/webhook_test.go index 885efb64..539cdd46 100644 --- a/webhook_test.go +++ b/webhook_test.go @@ -572,6 +572,25 @@ env: HOOK_head_commit.timestamp=2013-03-12T08:14:29-07:00 `success`, ``, }, + { + "txt-raw", + "txt-raw", + nil, + "POST", + map[string]string{"Content-Type": "text/plain"}, + "text/plain", + `# FOO + +blah +blah`, + false, + http.StatusOK, + `# FOO + +blah +blah`, + ``, + }, { "payload-json-array", "sendgrid",