Compare commits

...

2 Commits

Author SHA1 Message Date
Urko. b11c8cbcbf fix: execute script in background to not block response 2024-05-06 17:28:48 +02:00
Urko. 2ff3299ad7 fix: allow load config file 2024-05-06 17:19:58 +02:00
2 changed files with 32 additions and 15 deletions

19
Makefile Normal file
View File

@ -0,0 +1,19 @@
BINARY_DIR=bin
BINARY_NAME=webhook-listener
COVERAGE_DIR=coverage
lint:
golangci-lint run ./...
goreportcard:
goreportcard-cli -v
test:
go test ./...
test-coverage:
rm -rf ${COVERAGE_DIR}
mkdir ${COVERAGE_DIR}
go test -v -coverprofile ${COVERAGE_DIR}/cover.out ./...
go tool cover -html ${COVERAGE_DIR}/cover.out -o ${COVERAGE_DIR}/cover.html
build:
rm -rf ${BINARY_DIR}
mkdir ${BINARY_DIR}
env GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -o ./${BINARY_DIR}/${BINARY_NAME} main.go

28
main.go
View File

@ -15,9 +15,13 @@ import (
) )
func main() { func main() {
// Get root path cfgFile := os.Getenv("CONFIG_FILE")
_, filename, _, _ := runtime.Caller(0) if cfgFile == "" {
cfg, err := config.LoadConfig(path.Join(path.Dir(filename), "configs", "app.yml")) // Get root path
_, filename, _, _ := runtime.Caller(0)
cfgFile = path.Join(path.Dir(filename), "configs", "app.yml")
}
cfg, err := config.LoadConfig(cfgFile)
if err != nil { if err != nil {
log.Fatalf("Error loading config: %v", err) log.Fatalf("Error loading config: %v", err)
} }
@ -36,7 +40,6 @@ func handlePayload(secret string, scripts map[string]config.ConfigScript) func(w
defer r.Body.Close() defer r.Body.Close()
authHeader := r.Header.Get("Authorization") authHeader := r.Header.Get("Authorization")
log.Println("authHeader", authHeader)
if authHeader != secret { if authHeader != secret {
http.Error(w, "Signatures didn't match", http.StatusUnauthorized) http.Error(w, "Signatures didn't match", http.StatusUnauthorized)
return return
@ -53,22 +56,17 @@ func handlePayload(secret string, scripts map[string]config.ConfigScript) func(w
http.Error(w, "not found", http.StatusNotFound) http.Error(w, "not found", http.StatusNotFound)
return return
} }
log.Println("body", body)
// Parse the JSON payload
var payload interface{} var payload interface{}
err = json.Unmarshal(body, &payload) if err = json.Unmarshal(body, &payload); err != nil {
if err != nil {
http.Error(w, "Failed to parse JSON payload", http.StatusBadRequest) http.Error(w, "Failed to parse JSON payload", http.StatusBadRequest)
return return
} }
// TODO: Do something with the payload go func() {
fmt.Fprintf(w, "I got some JSON: %v", payload) if err := execute(scr.BinaryPath, scr.ScriptPath); err != nil {
log.Println(err)
if err := execute(scr.BinaryPath, scr.ScriptPath); err != nil { }
panic(err) }()
}
}) })
} }