feat #4: add storage config in config file #3

Merged
chapoline merged 1 commit from add-database-backend into main 2023-10-22 12:07:49 +00:00
2 changed files with 57 additions and 11 deletions

View file

@ -40,12 +40,19 @@ const (
ModeNet
)
type BackendConfigType string
const (
Memory BackendConfigType = "memory"
SQLite BackendConfigType = "sqlite"
)
type BackendConfig struct {
Config *oidc.Config `json:"config"`
Name string `json:"name"`
ID string `json:"ID"`
Type string `json:"type"`
Local bool `json:"local"`
Config *oidc.Config `json:"config"`
Name string `json:"name"`
ID string `json:"ID"`
Type BackendConfigType `json:"type"`
Local bool `json:"local"`
}
faercol marked this conversation as resolved Outdated

pourquoi pas appeler ça juste StorageConfig? Y'a pas de dépendances dans le code je crois ?

pourquoi pas appeler ça juste `StorageConfig`? Y'a pas de dépendances dans le code je crois ?
type OpenConnectConfig struct {
@ -54,6 +61,19 @@ type OpenConnectConfig struct {
Issuer string `json:"issuer"`
}
type StorageConfig struct {
File string `json:"file"`
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 +84,10 @@ type jsonConf struct {
Mode string `json:"mode"`
SockPath string `json:"sock"`
} `json:"server"`
Storage struct {
StorageType string `json:"type"`
Config *StorageConfig `json:"config"`
} `json:"storage"`
OpenConnectConfig *OpenConnectConfig `json:"openconnect"`
}
@ -73,6 +97,8 @@ type AppConfig struct {
Host string
Port int
SockPath string
StorageType string
StorageConfig *StorageConfig
OpenConnectConfig *OpenConnectConfig
}
@ -102,14 +128,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.Config
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) {

View file

@ -4,6 +4,7 @@ import (
"context"
"encoding/json"
"flag"
"fmt"
"os"
"os/signal"
"time"
@ -34,6 +35,17 @@ func parseArgs() *cliArgs {
}
}
func initStorage(conf *config.AppConfig) (storage.Storage, error) {
var storageType storage.Storage
switch conf.StorageType {
case "memory":
storageType = memory.New(logger.L)
default:
return storageType, fmt.Errorf("unsupported storage backend type: %s", conf.StorageType)
}
return storageType, nil
}
func main() {
args := parseArgs()
faercol marked this conversation as resolved Outdated

En vrai vu qu'on va commencer à ajouter des backends ici, ça serait ptetre pertinent d'ajouter une fonction séparée pour initialiser le storage, ça permet d'éviter de trop alourdir la fonction main

En vrai vu qu'on va commencer à ajouter des backends ici, ça serait ptetre pertinent d'ajouter une fonction séparée pour initialiser le `storage`, ça permet d'éviter de trop alourdir la fonction `main`
@ -47,12 +59,17 @@ func main() {
logger.Init(conf.LogLevel)
logger.L.Infof("Initialized logger with level %v", conf.LogLevel)
storageType, err := initStorage(conf)
if err != nil {
logger.L.Fatalf("Failed to initialize storage backend: %s", err.Error())
}
logger.L.Infof("Initialized storage backend %q", 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,
@ -82,7 +99,7 @@ func main() {
if err := dexConf.Storage.CreateConnector(storage.Connector{
ID: backend.ID,
Name: backend.Name,
Type: backend.Type,
Type: string(backend.Type),
Config: backendConfJson,
}); err != nil {
logger.L.Errorf("Failed to add connector for backend %q to stage: %s", backend.Name, err.Error())