From a30d6403f723765b8f9b7609e7eb3ade0f5434a0 Mon Sep 17 00:00:00 2001 From: Niall Sheridan Date: Sat, 10 Sep 2016 17:40:23 +0100 Subject: Make client a top-level package for consistency --- client/config.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 client/config.go (limited to 'client/config.go') diff --git a/client/config.go b/client/config.go new file mode 100644 index 0000000..1cc9401 --- /dev/null +++ b/client/config.go @@ -0,0 +1,38 @@ +package client + +import ( + "github.com/spf13/pflag" + "github.com/spf13/viper" +) + +// Config holds the client configuration. +type Config struct { + CA string `mapstructure:"ca"` + Keytype string `mapstructure:"key_type"` + Keysize int `mapstructure:"key_size"` + Validity string `mapstructure:"validity"` + ValidateTLSCertificate bool `mapstructure:"validate_tls_certificate"` +} + +func setDefaults() { + viper.BindPFlag("ca", pflag.Lookup("ca")) + viper.BindPFlag("key_type", pflag.Lookup("key_type")) + viper.BindPFlag("key_size", pflag.Lookup("key_size")) + viper.BindPFlag("validity", pflag.Lookup("validity")) + viper.SetDefault("validateTLSCertificate", true) +} + +// ReadConfig reads the client configuration from a file into a Config struct. +func ReadConfig(path string) (*Config, error) { + setDefaults() + viper.SetConfigFile(path) + viper.SetConfigType("hcl") + if err := viper.ReadInConfig(); err != nil { + return nil, err + } + c := &Config{} + if err := viper.Unmarshal(c); err != nil { + return nil, err + } + return c, nil +} -- cgit v1.2.3