diff --git a/pkg/command/root.go b/pkg/command/root.go index 66369097c8..2f01eb2887 100644 --- a/pkg/command/root.go +++ b/pkg/command/root.go @@ -2,10 +2,13 @@ package command import ( "os" + "strings" "github.com/micro/cli/v2" "github.com/owncloud/ocis-accounts/pkg/config" "github.com/owncloud/ocis-hello/pkg/version" + "github.com/owncloud/ocis-pkg/log" + "github.com/spf13/viper" // init store manager _ "github.com/owncloud/ocis-accounts/pkg/store" @@ -42,3 +45,57 @@ func Execute() error { return app.Run(os.Args) } + +// NewLogger initializes a service-specific logger instance. +func NewLogger(cfg *config.Config) log.Logger { + return log.NewLogger( + log.Name("phoenix"), + log.Level("info"), + log.Pretty(true), + log.Color(true), + ) +} + +// ParseConfig loads proxy configuration from Viper known paths. +func ParseConfig(c *cli.Context, cfg *config.Config) error { + // ParseConfig loads proxy configuration from Viper known paths. + logger := NewLogger(cfg) + + viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) + viper.SetEnvPrefix("OCIS_ACCOUNTS") + viper.AutomaticEnv() + + if c.IsSet("config-file") { + viper.SetConfigFile(c.String("config-file")) + } else { + viper.SetConfigName("accounts") + + 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 +}