config.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package config
  2. import (
  3. "fmt"
  4. "regexp"
  5. )
  6. // Config store root configuration
  7. type Config struct {
  8. ListenAddr string `flag:"listen-addr" desc:"HTTP listen address" default:":8080"`
  9. PasswdFile string `flag:"passwd-file" desc:"Password file for basic HTTP authentication" default:".htpasswd"`
  10. TruststoreFile string `flag:"truststore-file" desc:"Truststore used by HTTP signature verifier (.pem or .p12)"`
  11. Hook HookConfig `flag:"hook"`
  12. Log LogConfig `flag:"log"`
  13. Notification NotificationConfig `flag:"notification"`
  14. Static StaticConfig `flag:"static"`
  15. TLS TLSConfig `flag:"tls"`
  16. OldConfig `flag:""`
  17. }
  18. // HookConfig store Hook execution configuration
  19. type HookConfig struct {
  20. DefaultExt string `flag:"default-ext" desc:"Default extension for hook scripts" default:"sh"`
  21. DefaultMode string `flag:"default-mode" desc:"Hook default response mode (chuncked,buffered)" default:"chuncked"`
  22. Timeout int `flag:"timeout" desc:"Maximum hook execution time in second" default:"10"`
  23. ScriptsDir string `flag:"scripts" desc:"Scripts location" default:"scripts"`
  24. LogDir string `flag:"log-dir" desc:"Hook execution logs location" default:""`
  25. Workers int `flag:"workers" desc:"Number of workers to start" default:"2"`
  26. }
  27. // LogConfig store logger configuration
  28. type LogConfig struct {
  29. Level string `flag:"level" desc:"Log level (debug, info, warn or error)" default:"info"`
  30. Format string `flag:"format" desc:"Log format (json or text)" default:"text"`
  31. Modules []string `flag:"modules" desc:"Logging modules to activate (http,hook)" default:""`
  32. }
  33. // NotificationConfig store notification configuration
  34. type NotificationConfig struct {
  35. URI string `flag:"uri" desc:"Notification URI"`
  36. }
  37. // StaticConfig store static assets configuration
  38. type StaticConfig struct {
  39. Dir string `flag:"dir" desc:"Static file directory to serve on /static path" default:""`
  40. Path string `flag:"path" desc:"Path to serve static file directory" default:"/static"`
  41. }
  42. // TLSConfig store TLS configuration
  43. type TLSConfig struct {
  44. Enabled bool `flag:"enabled" desc:"Enable TLS" default:"false"`
  45. CertFile string `flag:"cert-file" desc:"TLS certificate file (unused if ACME used)" default:"server.pem"`
  46. KeyFile string `flag:"key-file" desc:"TLS key file (unused if ACME used)" default:"server.key"`
  47. Domain string `flag:"domain" desc:"TLS domain name used by ACME"`
  48. }
  49. // Validate the configuration
  50. func (c *Config) Validate() error {
  51. if matched, _ := regexp.MatchString(`^/\w+$`, c.Static.Path); !matched {
  52. return fmt.Errorf("invalid static path: %s", c.Static.Path)
  53. }
  54. return nil
  55. }