diff --git a/polyculeconnect/config/config.go b/polyculeconnect/config/config.go index a44f379..a883145 100644 --- a/polyculeconnect/config/config.go +++ b/polyculeconnect/config/config.go @@ -54,6 +54,18 @@ type OpenConnectConfig struct { Issuer string `json:"issuer"` } +type StorageConfigConfig struct { + Host string `json:"host"` + Port int `json:"port"` + Database string `json:"database"` + User string `json:"user"` + Password string `json:"password"` + Ssl struct { + Mode string `json:"mode"` + CaFile string `json:"caFile"` + } `json:"ssl"` +} + type jsonConf struct { Log struct { Level string `json:"level"` @@ -64,6 +76,10 @@ type jsonConf struct { Mode string `json:"mode"` SockPath string `json:"sock"` } `json:"server"` + Storage struct { + StorageType string `json:"type"` + StorageConfig *StorageConfigConfig `json:"config"` + } `json:"storage"` OpenConnectConfig *OpenConnectConfig `json:"openconnect"` } @@ -73,6 +89,8 @@ type AppConfig struct { Host string Port int SockPath string + StorageType string + StorageConfig *StorageConfigConfig OpenConnectConfig *OpenConnectConfig } @@ -102,14 +120,17 @@ func (ac *AppConfig) UnmarshalJSON(data []byte) error { ac.Host = jsonConf.Server.Host ac.Port = jsonConf.Server.Port ac.OpenConnectConfig = jsonConf.OpenConnectConfig + ac.StorageType = jsonConf.Storage.StorageType + ac.StorageConfig = jsonConf.Storage.StorageConfig return nil } var defaultConfig AppConfig = AppConfig{ - LogLevel: logrus.InfoLevel, - ServerMode: ModeNet, - Host: "0.0.0.0", - Port: 5000, + LogLevel: logrus.InfoLevel, + ServerMode: ModeNet, + Host: "0.0.0.0", + Port: 5000, + StorageType: "memory", } func New(filepath string) (*AppConfig, error) { @@ -125,5 +146,6 @@ func New(filepath string) (*AppConfig, error) { if err := json.Unmarshal(content, &conf); err != nil { return nil, fmt.Errorf("failed to parse config file: %w", err) } + fmt.Printf(conf.StorageType) return &conf, nil } diff --git a/polyculeconnect/main.go b/polyculeconnect/main.go index 20953ad..44466f0 100644 --- a/polyculeconnect/main.go +++ b/polyculeconnect/main.go @@ -47,12 +47,22 @@ func main() { logger.Init(conf.LogLevel) logger.L.Infof("Initialized logger with level %v", conf.LogLevel) + var storageType storage.Storage + switch conf.StorageType { + case "memory": + storageType = memory.New(logger.L) + default: + logger.L.Fatalf("Unsupported backend type: %s", conf.StorageType) + } + + logger.L.Infof("Initialized storage backend \"%s\"", conf.StorageType) + dexConf := dex_server.Config{ Web: dex_server.WebConfig{ Dir: "./", Theme: "default", }, - Storage: memory.New(logger.L), + Storage: storageType, Issuer: conf.OpenConnectConfig.Issuer, SupportedResponseTypes: []string{"code"}, SkipApprovalScreen: false,