mirror of
https://github.com/hacdias/webdav.git
synced 2026-09-22 03:20:41 +08:00
feat: centrally defined defaults
This commit is contained in:
+8
-8
@@ -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
@@ -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")
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user