mirror of
https://github.com/alvierahman90/gohookr.git
synced 2024-11-21 23:29:52 +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:
|
clean:
|
||||||
rm -rf gohookr
|
rm -rf gohookr
|
||||||
|
|
||||||
install:
|
install: build
|
||||||
go mod tidy
|
|
||||||
go build -o gohookr
|
|
||||||
cp gohookr /usr/local/bin/
|
cp gohookr /usr/local/bin/
|
||||||
cp gohookr.service /usr/lib/systemd/system/
|
cp gohookr.service /usr/lib/systemd/system/
|
||||||
cp -n config.json /etc/gohookr.json
|
cp -n config.json /etc/gohookr.json
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable --now gohookr
|
systemctl enable --now gohookr
|
||||||
|
|
||||||
|
build:
|
||||||
|
go mod tidy
|
||||||
|
go build -o gohookr
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
systemctl disable --now gohookr
|
systemctl disable --now gohookr
|
||||||
rm -rf /usr/local/bin/gohookr /usr/lib/systemd/system/gohookr.service
|
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 config_filename = "/etc/gohookr.json"
|
||||||
var checkSignature = true
|
var checkSignature = true
|
||||||
var c config.Config
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
var c config.Config
|
||||||
|
|
||||||
r := mux.NewRouter()
|
r := mux.NewRouter()
|
||||||
r.HandleFunc("/webhooks/{service}", webhookHandler)
|
r.HandleFunc("/webhooks/{service}", webhookHandler)
|
||||||
|
|
||||||
@ -32,23 +33,47 @@ func main() {
|
|||||||
checkSignature = p != "true"
|
checkSignature = p != "true"
|
||||||
}
|
}
|
||||||
|
|
||||||
raw_config, err := ioutil.ReadFile(config_filename)
|
c, err := loadConfig(config_filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err.Error())
|
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 {
|
for _, v := range os.Args {
|
||||||
panic(err.Error())
|
if v == "checkConfig" {
|
||||||
}
|
return
|
||||||
|
}
|
||||||
if err := c.Validate(); err != nil {
|
|
||||||
panic(err.Error())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Fatal(http.ListenAndServe(c.ListenAddress, r))
|
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) {
|
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
|
// Check what service is specified in URL (/webhooks/{service}) and if it exists
|
||||||
serviceName := string(mux.Vars(r)["service"])
|
serviceName := string(mux.Vars(r)["service"])
|
||||||
service, ok := c.Services[serviceName]
|
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
|
// Run tests and script as goroutine to prevent timing out
|
||||||
go func(){
|
go func() {
|
||||||
// Run tests, immediately stop if one fails
|
// Run tests, immediately stop if one fails
|
||||||
for _, test := range service.Tests {
|
for _, test := range service.Tests {
|
||||||
if _, err := test.Execute(payload); err != nil {
|
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`.
|
Default config path is `/etc/gohookr.json`.
|
||||||
It can be overriden by setting environment variable `CONFIG`.
|
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
|
Check below for an example configuration, which should tell you most of the things you need to know
|
||||||
to configure gohookr.
|
to configure gohookr.
|
||||||
|
|
||||||
Currently gohookr must be restarted after config changes.
|
You can test your config file by running
|
||||||
|
|
||||||
|
```
|
||||||
|
gohookr checkConfig
|
||||||
|
```
|
||||||
|
|
||||||
### Signature Verification
|
### Signature Verification
|
||||||
|
|
||||||
@ -32,7 +39,8 @@ For GitHub it would be `sha256=`.
|
|||||||
|
|
||||||
#### Disable Signature Verification
|
#### 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
|
You can disable signature verification for all services by setting environment variable
|
||||||
`NO_SIGNATURE_VERIFICATION` to `true`.
|
`NO_SIGNATURE_VERIFICATION` to `true`.
|
||||||
|
Loading…
Reference in New Issue
Block a user