Felix Niederwanger
03cb62aba7
Adds read and write timeout configuration settings and allows to configure a maximum acceptable header size.
66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
|
|
"gopkg.in/yaml.v2"
|
|
)
|
|
|
|
type Config struct {
|
|
Settings ConfigSettings `yaml:"settings"`
|
|
Hooks []Hook `yaml:"hooks"`
|
|
}
|
|
|
|
type ConfigSettings struct {
|
|
BindAddress string `yaml:"bind"` // Bind address for the webserver
|
|
UID int `yaml:"uid"` // Custom user ID or 0, if not being used
|
|
GID int `yaml:"gid"` // Custom group ID or 0, if not being used
|
|
ReadTimeout int `yaml:"readtimeout"` // Timeout for reading the whole request
|
|
WriteTimeout int `yaml:"writetimeout"` // Timeout for writing the whole response
|
|
MaxHeaderBytes int `yaml:"maxheadersize"` // Maximum size of the receive body
|
|
}
|
|
|
|
func (cf *Config) SetDefaults() {
|
|
cf.Settings.BindAddress = ":2088"
|
|
cf.Settings.UID = 0
|
|
cf.Settings.GID = 0
|
|
cf.Settings.ReadTimeout = 0
|
|
cf.Settings.WriteTimeout = 0
|
|
cf.Settings.MaxHeaderBytes = 0
|
|
}
|
|
|
|
// Check performs sanity checks on the config
|
|
func (cf *Config) Check() error {
|
|
if cf.Settings.BindAddress == "" {
|
|
return fmt.Errorf("no bind address configured")
|
|
}
|
|
for _, hook := range cf.Hooks {
|
|
if hook.Name == "" {
|
|
return fmt.Errorf("hook without name")
|
|
}
|
|
if hook.Route == "" {
|
|
return fmt.Errorf("hook %s with no route", hook.Name)
|
|
}
|
|
if hook.Command == "" {
|
|
return fmt.Errorf("hook %s with no command", hook.Name)
|
|
}
|
|
if hook.Concurrency < 1 {
|
|
hook.Concurrency = 1
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (cf *Config) LoadYAML(filename string) error {
|
|
content, err := ioutil.ReadFile(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err := yaml.Unmarshal(content, cf); err != nil {
|
|
return err
|
|
}
|
|
return cf.Check()
|
|
}
|