webhookd/pkg/config/config.go
Nicolas Carlier 321ad7ef5d
Feature: add blocking request with response code (#99)
feat(hook): add blocking request with response code

close #74
2024-07-09 00:19:19 +02:00

64 lines
2.7 KiB
Go

package config
import (
"fmt"
"regexp"
)
// Config store root configuration
type Config struct {
ListenAddr string `flag:"listen-addr" desc:"HTTP listen address" default:":8080"`
PasswdFile string `flag:"passwd-file" desc:"Password file for basic HTTP authentication" default:".htpasswd"`
TruststoreFile string `flag:"truststore-file" desc:"Truststore used by HTTP signature verifier (.pem or .p12)"`
Hook HookConfig `flag:"hook"`
Log LogConfig `flag:"log"`
Notification NotificationConfig `flag:"notification"`
Static StaticConfig `flag:"static"`
TLS TLSConfig `flag:"tls"`
OldConfig `flag:""`
}
// HookConfig store Hook execution configuration
type HookConfig struct {
DefaultExt string `flag:"default-ext" desc:"Default extension for hook scripts" default:"sh"`
DefaultMode string `flag:"default-mode" desc:"Hook default response mode (chuncked,buffered)" default:"chuncked"`
Timeout int `flag:"timeout" desc:"Maximum hook execution time in second" default:"10"`
ScriptsDir string `flag:"scripts" desc:"Scripts location" default:"scripts"`
LogDir string `flag:"log-dir" desc:"Hook execution logs location" default:""`
Workers int `flag:"workers" desc:"Number of workers to start" default:"2"`
}
// LogConfig store logger configuration
type LogConfig struct {
Level string `flag:"level" desc:"Log level (debug, info, warn or error)" default:"info"`
Format string `flag:"format" desc:"Log format (json or text)" default:"text"`
Modules []string `flag:"modules" desc:"Logging modules to activate (http,hook)" default:""`
}
// NotificationConfig store notification configuration
type NotificationConfig struct {
URI string `flag:"uri" desc:"Notification URI"`
}
// StaticConfig store static assets configuration
type StaticConfig struct {
Dir string `flag:"dir" desc:"Static file directory to serve on /static path" default:""`
Path string `flag:"path" desc:"Path to serve static file directory" default:"/static"`
}
// TLSConfig store TLS configuration
type TLSConfig struct {
Enabled bool `flag:"enabled" desc:"Enable TLS" default:"false"`
CertFile string `flag:"cert-file" desc:"TLS certificate file (unused if ACME used)" default:"server.pem"`
KeyFile string `flag:"key-file" desc:"TLS key file (unused if ACME used)" default:"server.key"`
Domain string `flag:"domain" desc:"TLS domain name used by ACME"`
}
// Validate the configuration
func (c *Config) Validate() error {
if matched, _ := regexp.MatchString(`^/\w+$`, c.Static.Path); !matched {
return fmt.Errorf("invalid static path: %s", c.Static.Path)
}
return nil
}