summaryrefslogtreecommitdiff
path: root/c2ec/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'c2ec/config.go')
-rw-r--r--c2ec/config.go168
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
+}