mirror of
https://github.com/alvierahman90/gohookr.git
synced 2024-12-22 07:32:02 +00:00
reload config on new webhook request
This commit is contained in:
parent
cdd19d95e9
commit
8f0cf776b1
8
Makefile
8
Makefile
@ -3,15 +3,17 @@ all: install
|
||||
clean:
|
||||
rm -rf gohookr
|
||||
|
||||
install:
|
||||
go mod tidy
|
||||
go build -o gohookr
|
||||
install: build
|
||||
cp gohookr /usr/local/bin/
|
||||
cp gohookr.service /usr/lib/systemd/system/
|
||||
cp -n config.json /etc/gohookr.json
|
||||
systemctl daemon-reload
|
||||
systemctl enable --now gohookr
|
||||
|
||||
build:
|
||||
go mod tidy
|
||||
go build -o gohookr
|
||||
|
||||
uninstall:
|
||||
systemctl disable --now gohookr
|
||||
rm -rf /usr/local/bin/gohookr /usr/lib/systemd/system/gohookr.service
|
||||
|
43
main.go
43
main.go
@ -18,9 +18,10 @@ import (
|
||||
|
||||
var config_filename = "/etc/gohookr.json"
|
||||
var checkSignature = true
|
||||
var c config.Config
|
||||
|
||||
func main() {
|
||||
var c config.Config
|
||||
|
||||
r := mux.NewRouter()
|
||||
r.HandleFunc("/webhooks/{service}", webhookHandler)
|
||||
|
||||
@ -32,23 +33,47 @@ func main() {
|
||||
checkSignature = p != "true"
|
||||
}
|
||||
|
||||
raw_config, err := ioutil.ReadFile(config_filename)
|
||||
c, err := loadConfig(config_filename)
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
fmt.Printf("CONFIG OK: %s\n", config_filename)
|
||||
fmt.Printf("LISTENING AT: %s\n", c.ListenAddress)
|
||||
|
||||
if err := json.Unmarshal(raw_config, &c); err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
||||
if err := c.Validate(); err != nil {
|
||||
panic(err.Error())
|
||||
for _, v := range os.Args {
|
||||
if v == "checkConfig" {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
log.Fatal(http.ListenAndServe(c.ListenAddress, r))
|
||||
}
|
||||
|
||||
func loadConfig(config_filename string) (config.Config, error) {
|
||||
var c config.Config
|
||||
|
||||
raw_config, err := ioutil.ReadFile(config_filename)
|
||||
if err != nil {
|
||||
return config.Config{}, err
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(raw_config, &c); err != nil {
|
||||
return config.Config{}, err
|
||||
}
|
||||
|
||||
if err := c.Validate(); err != nil {
|
||||
return config.Config{}, err
|
||||
}
|
||||
|
||||
return c, nil
|
||||
|
||||
}
|
||||
|
||||
func webhookHandler(w http.ResponseWriter, r *http.Request) {
|
||||
c, err := loadConfig(config_filename)
|
||||
if err != nil {
|
||||
writeResponse(w, 500, "Unable to read config file")
|
||||
}
|
||||
// Check what service is specified in URL (/webhooks/{service}) and if it exists
|
||||
serviceName := string(mux.Vars(r)["service"])
|
||||
service, ok := c.Services[serviceName]
|
||||
@ -85,7 +110,7 @@ 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 {
|
||||
|
12
readme.md
12
readme.md
@ -15,10 +15,17 @@ make
|
||||
Default config path is `/etc/gohookr.json`.
|
||||
It can be overriden by setting environment variable `CONFIG`.
|
||||
|
||||
The config file will be re-read every request so service configs can be changed without restarting
|
||||
the service (unless you want to change the listening port).
|
||||
|
||||
Check below for an example configuration, which should tell you most of the things you need to know
|
||||
to configure gohookr.
|
||||
|
||||
Currently gohookr must be restarted after config changes.
|
||||
You can test your config file by running
|
||||
|
||||
```
|
||||
gohookr checkConfig
|
||||
```
|
||||
|
||||
### Signature Verification
|
||||
|
||||
@ -32,7 +39,8 @@ For GitHub it would be `sha256=`.
|
||||
|
||||
#### Disable Signature Verification
|
||||
|
||||
You can disable signature verification by setting `DisableSignatureVerification` for a service to `true`.
|
||||
You can disable signature verification by setting `DisableSignatureVerification` for a service to
|
||||
`true`.
|
||||
|
||||
You can disable signature verification for all services by setting environment variable
|
||||
`NO_SIGNATURE_VERIFICATION` to `true`.
|
||||
|
Loading…
Reference in New Issue
Block a user