feat: centrally defined defaults

This commit is contained in:
Henrique Dias
2024-07-22 17:52:56 +02:00
parent 47e3f6de6f
commit 3688420246
3 changed files with 43 additions and 9 deletions
+8 -8
View File
@@ -19,14 +19,14 @@ import (
func init() { func init() {
flags := rootCmd.Flags() flags := rootCmd.Flags()
flags.StringP("config", "c", "", "config file path") flags.StringP("config", "c", "", "config file path")
flags.BoolP("tls", "t", false, "enable TLS") flags.BoolP("tls", "t", lib.DefaultTLS, "enable TLS")
flags.Bool("auth", false, "enable authentication") flags.Bool("auth", lib.DefaultAuth, "enable authentication")
flags.String("cert", "cert.pem", "path to TLS certificate") flags.String("cert", lib.DefaultCert, "path to TLS certificate")
flags.String("key", "key.pem", "path to TLS key") flags.String("key", lib.DefaultKey, "path to TLS key")
flags.StringP("address", "a", "0.0.0.0", "address to listen on") flags.StringP("address", "a", lib.DefaultAddress, "address to listen on")
flags.StringP("port", "p", "0", "port to listen on") flags.IntP("port", "p", lib.DefaultPort, "port to listen on")
flags.StringP("prefix", "P", "/", "URL path prefix") flags.StringP("prefix", "P", lib.DefaultPrefix, "URL path prefix")
flags.String("log_format", "console", "logging format") flags.String("log_format", lib.DefaultLogFormat, "logging format")
} }
var rootCmd = &cobra.Command{ var rootCmd = &cobra.Command{
+27 -1
View File
@@ -10,6 +10,17 @@ import (
"github.com/spf13/viper" "github.com/spf13/viper"
) )
const (
DefaultTLS = false
DefaultAuth = false
DefaultCert = "cert.pem"
DefaultKey = "key.pem"
DefaultAddress = "0.0.0.0"
DefaultPort = 0
DefaultPrefix = "/"
DefaultLogFormat = "console"
)
type Config struct { type Config struct {
Permissions `mapstructure:",squash"` Permissions `mapstructure:",squash"`
Debug bool Debug bool
@@ -55,7 +66,17 @@ func ParseConfig(filename string, flags *pflag.FlagSet) (*Config, error) {
v.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) v.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
v.AutomaticEnv() v.AutomaticEnv()
// Defaults // Defaults shared with flags
v.SetDefault("TLS", DefaultTLS)
v.SetDefault("Cert", DefaultCert)
v.SetDefault("Key", DefaultKey)
v.SetDefault("Address", DefaultAddress)
v.SetDefault("Port", DefaultPort)
v.SetDefault("Auth", DefaultAuth)
v.SetDefault("Prefix", DefaultPrefix)
v.SetDefault("LogFormat", DefaultLogFormat)
// Other defaults
v.SetDefault("CORS.AllowedHeaders", []string{"*"}) v.SetDefault("CORS.AllowedHeaders", []string{"*"})
v.SetDefault("CORS.AllowedHosts", []string{"*"}) v.SetDefault("CORS.AllowedHosts", []string{"*"})
v.SetDefault("CORS.AllowedMethods", []string{"*"}) v.SetDefault("CORS.AllowedMethods", []string{"*"})
@@ -108,6 +129,11 @@ func (c *Config) Validate() error {
return errors.New("invalid config: auth cannot be disabled with users defined") return errors.New("invalid config: auth cannot be disabled with users defined")
} }
c.Scope, err = filepath.Abs(c.Scope)
if err != nil {
return fmt.Errorf("invalid config: %w", err)
}
if c.TLS { if c.TLS {
if c.Cert == "" { if c.Cert == "" {
return errors.New("invalid config: Cert must be defined if TLS is activated") return errors.New("invalid config: Cert must be defined if TLS is activated")
+8
View File
@@ -27,6 +27,14 @@ func TestConfigDefaults(t *testing.T) {
cfg := writeAndParseConfig(t, "", ".yml") cfg := writeAndParseConfig(t, "", ".yml")
require.NoError(t, cfg.Validate()) require.NoError(t, cfg.Validate())
require.EqualValues(t, DefaultAuth, cfg.Auth)
require.EqualValues(t, DefaultTLS, cfg.TLS)
require.EqualValues(t, DefaultAddress, cfg.Address)
require.EqualValues(t, DefaultPort, cfg.Port)
require.EqualValues(t, DefaultPrefix, cfg.Prefix)
require.EqualValues(t, DefaultLogFormat, cfg.LogFormat)
require.NotEmpty(t, cfg.Scope)
require.EqualValues(t, []string{"*"}, cfg.CORS.AllowedHeaders) require.EqualValues(t, []string{"*"}, cfg.CORS.AllowedHeaders)
require.EqualValues(t, []string{"*"}, cfg.CORS.AllowedHosts) require.EqualValues(t, []string{"*"}, cfg.CORS.AllowedHosts)
require.EqualValues(t, []string{"*"}, cfg.CORS.AllowedMethods) require.EqualValues(t, []string{"*"}, cfg.CORS.AllowedMethods)