diff options
Diffstat (limited to 'c2ec/config.go')
-rw-r--r-- | c2ec/config.go | 168 |
1 files changed, 166 insertions, 2 deletions
diff --git a/c2ec/config.go b/c2ec/config.go index 25617ff..b6ec403 100644 --- a/c2ec/config.go +++ b/c2ec/config.go @@ -3,7 +3,9 @@ package main import ( "errors" "os" + "strings" + "gopkg.in/ini.v1" "gopkg.in/yaml.v3" ) @@ -19,6 +21,7 @@ type C2ECServerConfig struct { Port int `yaml:"port"` UseUnixDomainSocket bool `yaml:"unix-domain-socket"` UnixSocketPath string `yaml:"unix-socket-path"` + UnixPathMode int `yaml:"unix-path-mode"` StrictAttestors bool `yaml:"fail-on-missing-attestors"` CreditAccount string `yaml:"credit-account"` MaxRetries int32 `yaml:"max-retries"` @@ -63,8 +66,16 @@ func Parse(path string) (*C2ECConfig, error) { return nil, err } - cfg := new(C2ECConfig) - err = yaml.Unmarshal(content, cfg) + if strings.HasSuffix(path, ".yml") || strings.HasSuffix(path, ".yaml") { + cfg := new(C2ECConfig) + err = yaml.Unmarshal(content, cfg) + if err != nil { + return nil, err + } + return cfg, nil + } + + cfg, err := ParseIni(content) if err != nil { return nil, err } @@ -82,3 +93,156 @@ func ConfigForProvider(name string) (*C2ECProviderConfig, error) { } return nil, errors.New("no such provider") } + +func ParseIni(content []byte) (*C2ECConfig, error) { + + ini, err := ini.Load(content) + if err != nil { + return nil, err + } + + cfg := new(C2ECConfig) + for _, s := range ini.Sections() { + + if s.Name() == "c2ec" { + + value, err := s.GetKey("PROD") + if err != nil { + return nil, err + } + + cfg.Server.IsProd, err = value.Bool() + if err != nil { + return nil, err + } + + value, err = s.GetKey("SERVE") + if err != nil { + return nil, err + } + + str := value.String() + cfg.Server.UseUnixDomainSocket = str == "unix" + + value, err = s.GetKey("HOST") + if err != nil { + return nil, err + } + + cfg.Server.Host = value.String() + + value, err = s.GetKey("PORT") + if err != nil { + return nil, err + } + + cfg.Server.Port, err = value.Int() + if err != nil { + return nil, err + } + + value, err = s.GetKey("UNIXPATH") + if err != nil { + return nil, err + } + + cfg.Server.UnixSocketPath = value.String() + + value, err = s.GetKey("UNIXPATH_MODE") + if err != nil { + return nil, err + } + + cfg.Server.UnixSocketPath = value.String() + + value, err = s.GetKey("FAIL_ON_MISSING_ATTESTORS") + if err != nil { + return nil, err + } + + cfg.Server.StrictAttestors, err = value.Bool() + if err != nil { + return nil, err + } + + value, err = s.GetKey("EXCHANGE_ACCOUNT") + if err != nil { + return nil, err + } + + cfg.Server.CreditAccount = value.String() + + value, err = s.GetKey("MAX_RETRIES") + if err != nil { + return nil, err + } + + num, err := value.Int() + if err != nil { + return nil, err + } + cfg.Server.MaxRetries = int32(num) + + value, err = s.GetKey("RETRY_DELAY_MS") + if err != nil { + return nil, err + } + + cfg.Server.RetryDelayMs, err = value.Int() + if err != nil { + return nil, err + } + + } + + if s.Name() == "wire-gateway" { + + value, err := s.GetKey("USERNAME") + if err != nil { + return nil, err + } + cfg.Server.CreditAccount = value.String() + + value, err = s.GetKey("PASSWORD") + if err != nil { + return nil, err + } + cfg.Server.CreditAccount = value.String() + } + + if s.Name() == "database" { + + value, err := s.GetKey("CONFIG") + if err != nil { + return nil, err + } + + connstr := value.String() + + err = os.Setenv("PGHOST", connstr) + if err != nil { + return nil, err + } + } + + if strings.HasPrefix(s.Name(), "provider-") { + + provider := C2ECProviderConfig{} + + value, err := s.GetKey("NAME") + if err != nil { + return nil, err + } + provider.Name = value.String() + + value, err = s.GetKey("CREDENTIALS_PASSWORD") + if err != nil { + return nil, err + } + provider.CredentialsPassword = value.String() + + cfg.Providers = append(cfg.Providers, provider) + } + } + return cfg, nil +} |