make http return code for mismatched rules configurable

Signed-off-by: Mathias Merscher <Mathias.Merscher@dg-i.net>
This commit is contained in:
Mathias Merscher 2017-02-10 12:32:11 +01:00
parent 8226d5e50f
commit ddb1f2441a
4 changed files with 20 additions and 1 deletions

View file

@ -300,6 +300,7 @@ type Hook struct {
PassArgumentsToCommand []Argument `json:"pass-arguments-to-command,omitempty"`
JSONStringParameters []Argument `json:"parse-parameters-as-json,omitempty"`
TriggerRule *Rules `json:"trigger-rule,omitempty"`
TriggerRuleMismatchCode int `json:"trigger-rule-mismatch-code,omitempty"`
}
// ParseJSONParameters decodes specified arguments to JSON objects and replaces the

View file

@ -4,6 +4,7 @@
"execute-command": "{{ .Hookecho }}",
"command-working-directory": "/",
"include-command-output-in-response": true,
"trigger-rule-mismatch-code": 400,
"pass-environment-to-command":
[
{
@ -59,6 +60,7 @@
"command-working-directory": "/",
"include-command-output-in-response": false,
"response-message": "success",
"trigger-rule-mismatch-code": 999,
"parse-parameters-as-json": [
{
"source": "payload",

View file

@ -242,6 +242,17 @@ func hookHandler(w http.ResponseWriter, r *http.Request) {
return
}
// Check if a return code is configured for the hook
if matchedHook.TriggerRuleMismatchCode != 0 {
// Check if the configured return code is supported by the http package
// by testing if there is a StatusText for this code.
if len(http.StatusText(matchedHook.TriggerRuleMismatchCode)) > 0 {
w.WriteHeader(matchedHook.TriggerRuleMismatchCode)
} else {
log.Printf("%s got matched, but the configured return code %d is unknown - defaulting to 200\n", matchedHook.ID, matchedHook.TriggerRuleMismatchCode)
}
}
// if none of the hooks got triggered
log.Printf("%s got matched, but didn't get triggered because the trigger rules were not satisfied\n", matchedHook.ID)

View file

@ -515,5 +515,10 @@ env: HOOK_head_commit.timestamp=2013-03-12T08:14:29-07:00
`,
},
{"empty payload", "github", nil, `{}`, false, http.StatusOK, `Hook rules were not satisfied.`},
// test with custom return code
{"empty payload", "github", nil, `{}`, false, http.StatusBadRequest, `Hook rules were not satisfied.`},
// test with custom invalid http code, should default to 200 OK
{"empty payload", "bitbucket", nil, `{}`, false, http.StatusOK, `Hook rules were not satisfied.`},
// test with no configured http return code, should default to 200 OK
{"empty payload", "gitlab", nil, `{}`, false, http.StatusOK, `Hook rules were not satisfied.`},
}