AppendHeaders

This commit is contained in:
Akbar Rahman 2023-10-28 21:48:54 +01:00
parent e74c3a684e
commit c5fef8e42d
Signed by: alvierahman90
GPG Key ID: 20609519444A1269
5 changed files with 20 additions and 7 deletions

View File

@ -4,7 +4,8 @@
"test": {
"Script": {
"Program": "./example.sh",
"AppendPayload": true
"AppendPayload": true,
"AppendHeaders": true
},
"DisableSignatureVerification": true,
"Tests": [

View File

@ -2,22 +2,33 @@ package config
import (
"fmt"
"net/http"
"os/exec"
"strings"
)
type Command struct {
Program string
Arguments []string
AppendPayload bool
AppendHeaders bool
}
func (c Command) Execute(payload string) ([]byte, error) {
func (c Command) Execute(payload string, header http.Header) ([]byte, error) {
arguments := make([]string, 0)
copy(c.Arguments, arguments)
if c.AppendPayload {
arguments = append(arguments, payload)
}
if c.AppendHeaders {
var header_builder strings.Builder;
header.Write(&header_builder);
arguments = append(arguments, header_builder.String())
}
return exec.Command(c.Program, arguments...).Output()
}

View File

@ -1,3 +1,3 @@
#!/usr/bin/bash
date >> test_output
echo "$1" >> test_output
echo "$1" "$2" >> test_output

View File

@ -84,15 +84,15 @@ func webhookHandler(w http.ResponseWriter, r *http.Request) {
}
// Run tests and script as goroutine to prevent timing out
go func(){
go func() {
// Run tests, immediately stop if one fails
for _, test := range service.Tests {
if _, err := test.Execute(payload); err != nil {
if _, err := test.Execute(payload, r.Header); err != nil {
fmt.Printf("Test failed(%v) for service %v\n", test, serviceName)
return
}
}
stdout, err := service.Script.Execute(payload)
stdout, err := service.Script.Execute(payload, r.Header)
fmt.Println(string(stdout))
if err != nil {
fmt.Println(err.Error())

View File

@ -41,7 +41,8 @@ You can disable signature verification for all services by setting environment v
gohookr doesn't care what the command is as long as the `Program` is executable.
You can specify extra arguments with the `Arguments` field.
You can ask it to put the payload as the last argument by setting `AppendPayload` to true.
You can ask it to put the payload as the last (or second to last if `AppendHeaders` is set) argument by setting `AppendPayload` to true.
You can ask it to put the request headers as the last argument by setting `AppendHeaders` to true.
### Writing Tests