From 534f7f630f12c04de72deb0945c98d67123b9fe2 Mon Sep 17 00:00:00 2001 From: Olgun Cengiz <olgun.cengiz@vereign.com> Date: Mon, 26 Oct 2020 15:51:12 +0300 Subject: [PATCH] fixed comments --- config/configs.go | 109 ++++++++++++++++++++-------------------------- main.go | 10 +---- 2 files changed, 49 insertions(+), 70 deletions(-) diff --git a/config/configs.go b/config/configs.go index 39302db..0080afc 100644 --- a/config/configs.go +++ b/config/configs.go @@ -6,10 +6,10 @@ import ( "io/ioutil" "os" "path/filepath" - "reflect" "strings" "code.vereign.com/code/viam-apis/clientutils" + "code.vereign.com/code/viam-apis/config" "code.vereign.com/code/viam-apis/errors" "code.vereign.com/code/viam-apis/log" @@ -25,47 +25,60 @@ var SystemAuth = &authentication.Authentication{ Session: "undefined", } -const tagValidation = "validation" - type Configuration struct { - ListenAddress string `validation:"optional" yaml:"listenAddress"` - GrpcListenAddress string `validation:"optional" yaml:"grpcListenAddress"` + ListenAddress string `required:"false" yaml:"listenAddress"` + GrpcListenAddress string `required:"false" yaml:"grpcListenAddress"` SystemAuthentication struct { - UUID string `validation:"optional" yaml:"viamUUID"` - Session string `validation:"optional" yaml:"viamSession"` - } `validation:"optional" yaml:"systemAuthentication"` - DataStorageAgentURL string `validation:"optional" yaml:"dataStorageAgentURL"` - EntitiesManagementAgentURL string `validation:"optional" yaml:"entitiesManagementAgentURL"` - MaxMessageSize int `validation:"optional" yaml:"maxMessageSize"` + UUID string `required:"false" yaml:"viamUUID"` + Session string `required:"false" yaml:"viamSession"` + } `required:"false" yaml:"systemAuthentication"` + DataStorageAgentURL string `required:"false" yaml:"dataStorageAgentURL"` + EntitiesManagementAgentURL string `required:"false" yaml:"entitiesManagementAgentURL"` + MaxMessageSize int `required:"false" yaml:"maxMessageSize"` Certification struct { - Path string `validation:"required" yaml:"path"` - CertificateFile string `validation:"required" yaml:"certificateFile"` - CertificatePEM []byte `validation:"calculated" yaml:"certificatePEM"` - PrivateKeyFile string `validation:"required" yaml:"privateKeyFile"` - PrivateKeyPEM []byte `validation:"calculated" yaml:"privateKeyPEM"` - CaCertificateFile string `validation:"required" yaml:"caCertificateFile"` - CaCertificatePEM []byte `validation:"calculated" yaml:"caCertificatePEM"` - EncryptionCertificateFile string `validation:"required" yaml:"encryptionCertificateFile"` - EncryptionCertificatePEM []byte `validation:"calculated" yaml:"encryptionCertificatePEM"` - EncryptionCertificate []*x509.Certificate `validation:"calculated" yaml:"encryptionCertificate"` - EncryptionPrivateKeyFile string `validation:"required" yaml:"encryptionPrivateKeyFile"` - EncryptionPrivateKeyPEM []byte `validation:"calculated" yaml:"encryptionPrivateKeyPEM"` - EncryptionPrivateKey crypto.Signer `validation:"calculated" yaml:"encryptionPrivateKey"` - VereignCertificateFile string `validation:"required" yaml:"vereignCertificateFile"` - VereignCertificatePEM []byte `validation:"calculated" yaml:"vereignCertificatePEM"` - } `validation:"required" yaml:"certification"` - PrometeusListenAddress string `validation:"optional" yaml:"prometeusListenAddress"` - MetricEnvironmentPrefix string `validation:"optional" yaml:"metricEnvironmentPrefix"` - ReplaceKey bool `validation:"optional" yaml:"replaceKey"` - GlobalLogLevel string `validation:"optional" yaml:"globalLogLevel"` + Path string `required:"true" yaml:"path"` + CertificateFile string `required:"true" yaml:"certificateFile"` + CertificatePEM []byte `required:"true"` + PrivateKeyFile string `required:"true" yaml:"privateKeyFile"` + PrivateKeyPEM []byte `required:"true"` + CaCertificateFile string `required:"true" yaml:"caCertificateFile"` + CaCertificatePEM []byte `required:"true"` + EncryptionCertificateFile string `required:"true" yaml:"encryptionCertificateFile"` + EncryptionCertificatePEM []byte `required:"true"` + EncryptionCertificate []*x509.Certificate `required:"true"` + EncryptionPrivateKeyFile string `required:"true" yaml:"encryptionPrivateKeyFile"` + EncryptionPrivateKeyPEM []byte `required:"true"` + EncryptionPrivateKey crypto.Signer `required:"true"` + VereignCertificateFile string `required:"true" yaml:"vereignCertificateFile"` + VereignCertificatePEM []byte `required:"true"` + } `required:"true" yaml:"certification"` + PrometeusListenAddress string `required:"false" yaml:"prometeusListenAddress"` + MetricEnvironmentPrefix string `required:"false" yaml:"metricEnvironmentPrefix"` + ReplaceKey bool `required:"false" yaml:"replaceKey"` + GlobalLogLevel string `required:"false" yaml:"globalLogLevel"` } var Config Configuration +// LoadConfigValues loads config values from config file +func LoadConfigValues(configFile, etcdURL string) error { + setConfigValues(configFile, etcdURL) + + calculateConfigValues() + + err := config.CheckConfigValues(Config) + if err != nil { + log.Fatalf("Exiting due to wrong configuration: %s", err) + return err + } + + return nil +} + // SetConfigValues Sets Values For Config Variable -func SetConfigValues(configFile, etcdURL string) { +func setConfigValues(configFile, etcdURL string) { // Set default values for configuration variable - // NOTE: Only for 'validation:"optional"' fields + // NOTE: Only for 'required:"false"' fields Config.ListenAddress = ":7878" Config.GrpcListenAddress = ":7877" Config.SystemAuthentication.UUID = "viam-system" @@ -122,36 +135,8 @@ func SetConfigValues(configFile, etcdURL string) { } } -// CheckConfigValues checks if there is any missing required fields in configuration -func CheckConfigValues(configs interface{}) error { - structIterator := reflect.ValueOf(configs) - for i := 0; i < structIterator.NumField(); i++ { - field := structIterator.Type().Field(i).Name - val := structIterator.Field(i).Interface() - tR := structIterator.Type().Field(i).Tag.Get(tagValidation) - log.Printf("%v: %v", field, val) - - if tR == "required" { - if structIterator.Field(i).Kind() == reflect.Struct { - if err := CheckConfigValues(structIterator.Field(i).Interface()); err != nil { - return err - } - } - - if reflect.DeepEqual(val, reflect.Zero(structIterator.Field(i).Type()).Interface()) { - // Check if the field is zero-valued, meaning it won't be updated - return errors.NewFormat("Empty value for required field: %v", field) - } - } else if tR != "optional" && tR != "calculated" { - return errors.NewFormat("Wrong validation type for field: %v (Must be 'optional', 'required' or 'calculated')", field) - } - } - - return nil -} - // CalculateConfigValues calculates config values using provided configuraion -func CalculateConfigValues() { +func calculateConfigValues() { SystemAuth.Uuid = Config.SystemAuthentication.UUID SystemAuth.Session = Config.SystemAuthentication.Session diff --git a/main.go b/main.go index 783a2f2..6bf6456 100644 --- a/main.go +++ b/main.go @@ -39,18 +39,12 @@ func main() { return } - log.Printf("Setting configuration values...") - config.SetConfigValues(*configFile, *etcdURL) - - log.Printf("Checking configuration values...") - err := config.CheckConfigValues(config.Config) + log.Printf("Loading configuration values...") + err := config.LoadConfigValues(*configFile, *etcdURL) if err != nil { log.Fatalf("Exiting due to wrong configuration: %s", err) } - log.Printf("Calculating configuration values...") - config.CalculateConfigValues() - grpcAddress := config.Config.GrpcListenAddress restAddress := config.Config.ListenAddress dataStorageAddress := config.Config.DataStorageAgentURL -- GitLab