From c07f97ff40b871f12d3121907a0c6cefe058e815 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Wed, 18 Mar 2020 18:56:35 +0100 Subject: [PATCH 1/5] abstract ParseConfig to its own scope --- pkg/command/root.go | 83 ++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 39 deletions(-) diff --git a/pkg/command/root.go b/pkg/command/root.go index 585add3bf..128e05d35 100644 --- a/pkg/command/root.go +++ b/pkg/command/root.go @@ -32,45 +32,7 @@ func Execute() error { Flags: flagset.RootWithConfig(cfg), Before: func(c *cli.Context) error { - logger := NewLogger(cfg) - - viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) - viper.SetEnvPrefix("WEBDAV") - viper.AutomaticEnv() - - if c.IsSet("config-file") { - viper.SetConfigFile(c.String("config-file")) - } else { - viper.SetConfigName("webdav") - - viper.AddConfigPath("/etc/ocis") - viper.AddConfigPath("$HOME/.ocis") - viper.AddConfigPath("./config") - } - - if err := viper.ReadInConfig(); err != nil { - switch err.(type) { - case viper.ConfigFileNotFoundError: - logger.Info(). - Msg("Continue without config") - case viper.UnsupportedConfigError: - logger.Fatal(). - Err(err). - Msg("Unsupported config type") - default: - logger.Fatal(). - Err(err). - Msg("Failed to read config") - } - } - - if err := viper.Unmarshal(&cfg); err != nil { - logger.Fatal(). - Err(err). - Msg("Failed to parse config") - } - - return nil + return ParseConfig(c, cfg) }, Commands: []*cli.Command{ @@ -101,3 +63,46 @@ func NewLogger(cfg *config.Config) log.Logger { log.Color(cfg.Log.Color), ) } + +// ParseConfig loads webdav configuration from Viper known paths. +func ParseConfig(c *cli.Context, cfg *config.Config) error { + logger := NewLogger(cfg) + + viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) + viper.SetEnvPrefix("WEBDAV") + viper.AutomaticEnv() + + if c.IsSet("config-file") { + viper.SetConfigFile(c.String("config-file")) + } else { + viper.SetConfigName("webdav") + + viper.AddConfigPath("/etc/ocis") + viper.AddConfigPath("$HOME/.ocis") + viper.AddConfigPath("./config") + } + + if err := viper.ReadInConfig(); err != nil { + switch err.(type) { + case viper.ConfigFileNotFoundError: + logger.Info(). + Msg("Continue without config") + case viper.UnsupportedConfigError: + logger.Fatal(). + Err(err). + Msg("Unsupported config type") + default: + logger.Fatal(). + Err(err). + Msg("Failed to read config") + } + } + + if err := viper.Unmarshal(&cfg); err != nil { + logger.Fatal(). + Err(err). + Msg("Failed to parse config") + } + + return nil +} From 3f67d9d7bb2d9c581710a5e9c7732e3263497bad Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Wed, 18 Mar 2020 18:56:57 +0100 Subject: [PATCH 2/5] use ParseConfig on server command --- pkg/command/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/command/server.go b/pkg/command/server.go index 8a57fabbc..a898275c7 100644 --- a/pkg/command/server.go +++ b/pkg/command/server.go @@ -34,7 +34,7 @@ func Server(cfg *config.Config) *cli.Command { cfg.HTTP.Root = strings.TrimSuffix(cfg.HTTP.Root, "/") } - return nil + return ParseConfig(c, cfg) }, Action: func(c *cli.Context) error { logger := NewLogger(cfg) From 6b60a4ed23642f15e06294d6a7d292a12ec16565 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Wed, 18 Mar 2020 18:57:22 +0100 Subject: [PATCH 3/5] add changelog skeleton --- changelog/unreleased/config-management.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 changelog/unreleased/config-management.md diff --git a/changelog/unreleased/config-management.md b/changelog/unreleased/config-management.md new file mode 100644 index 000000000..e69de29bb From 44d118cc79ff9fc042ccea54a4578e2c1b92d446 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Wed, 18 Mar 2020 18:59:31 +0100 Subject: [PATCH 4/5] add changelog --- changelog/unreleased/config-management.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog/unreleased/config-management.md b/changelog/unreleased/config-management.md index e69de29bb..ff7f35be8 100644 --- a/changelog/unreleased/config-management.md +++ b/changelog/unreleased/config-management.md @@ -0,0 +1,5 @@ +Enhancement: Configuration + +Extensions should be responsible of configuring themselves. We use Viper for config loading from default paths. Environment variables **WILL** take precedence over config files. + +https://github.com/owncloud/ocis-webdav/pull/14 From f4e7e16758adc0abbc76d22bf65f86187dae123c Mon Sep 17 00:00:00 2001 From: Alex Unger Date: Wed, 18 Mar 2020 18:09:30 +0000 Subject: [PATCH 5/5] Automated changelog update [skip ci] --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 548e8d741..502772f40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ The following sections list the changes for unreleased. ## Summary * Chg #1: Initial release of basic version + * Enh #14: Configuration ## Details @@ -15,4 +16,11 @@ The following sections list the changes for unreleased. https://github.com/owncloud/ocis-webdav/issues/1 + * Enhancement #14: Configuration + + Extensions should be responsible of configuring themselves. We use Viper for config loading + from default paths. Environment variables **WILL** take precedence over config files. + + https://github.com/owncloud/ocis-webdav/pull/14 +