109 lines
2.8 KiB
Go
109 lines
2.8 KiB
Go
// Package config provides the environment based configuration for the program
|
|
package config
|
|
|
|
import (
|
|
"git.haelnorr.com/h/golib/ezconf"
|
|
"git.haelnorr.com/h/golib/hlog"
|
|
"git.haelnorr.com/h/golib/hws"
|
|
"git.haelnorr.com/h/golib/hwsauth"
|
|
"git.haelnorr.com/h/oslstats/internal/db"
|
|
"git.haelnorr.com/h/oslstats/internal/discord"
|
|
"git.haelnorr.com/h/oslstats/internal/rbac"
|
|
"git.haelnorr.com/h/oslstats/pkg/oauth"
|
|
"github.com/joho/godotenv"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type Config struct {
|
|
DB *db.Config
|
|
HWS *hws.Config
|
|
HWSAuth *hwsauth.Config
|
|
HLOG *hlog.Config
|
|
Discord *discord.Config
|
|
OAuth *oauth.Config
|
|
RBAC *rbac.Config
|
|
Flags *Flags
|
|
}
|
|
|
|
// GetConfig loads the application configuration and returns a pointer to the Config object
|
|
// If doconly is specified, only the loader will be returned
|
|
func GetConfig(flags *Flags) (*Config, *ezconf.ConfigLoader, error) {
|
|
err := godotenv.Load(flags.EnvFile)
|
|
if err != nil && flags.GenEnv == "" && !flags.EnvDoc {
|
|
return nil, nil, errors.Wrap(err, "gotgodotenv.Load")
|
|
}
|
|
|
|
loader := ezconf.New()
|
|
err = loader.RegisterIntegrations(
|
|
hlog.NewEZConfIntegration(),
|
|
hws.NewEZConfIntegration(),
|
|
hwsauth.NewEZConfIntegration(),
|
|
db.NewEZConfIntegration(),
|
|
discord.NewEZConfIntegration(),
|
|
oauth.NewEZConfIntegration(),
|
|
rbac.NewEZConfIntegration(),
|
|
)
|
|
if err != nil {
|
|
return nil, nil, errors.Wrap(err, "loader.RegisterIntegrations")
|
|
}
|
|
if err := loader.ParseEnvVars(); err != nil {
|
|
return nil, nil, errors.Wrap(err, "loader.ParseEnvVars")
|
|
}
|
|
|
|
if flags.GenEnv != "" || flags.EnvDoc {
|
|
return nil, loader, nil
|
|
}
|
|
|
|
if err := loader.LoadConfigs(); err != nil {
|
|
return nil, nil, errors.Wrap(err, "loader.LoadConfigs")
|
|
}
|
|
|
|
hwscfg, ok := loader.GetConfig("hws")
|
|
if !ok {
|
|
return nil, nil, errors.New("HWS Config not loaded")
|
|
}
|
|
|
|
hwsauthcfg, ok := loader.GetConfig("hwsauth")
|
|
if !ok {
|
|
return nil, nil, errors.New("HWSAuth Config not loaded")
|
|
}
|
|
|
|
hlogcfg, ok := loader.GetConfig("hlog")
|
|
if !ok {
|
|
return nil, nil, errors.New("HLog Config not loaded")
|
|
}
|
|
|
|
dbcfg, ok := loader.GetConfig("db")
|
|
if !ok {
|
|
return nil, nil, errors.New("DB Config not loaded")
|
|
}
|
|
|
|
discordcfg, ok := loader.GetConfig("discord")
|
|
if !ok {
|
|
return nil, nil, errors.New("Dicord Config not loaded")
|
|
}
|
|
|
|
oauthcfg, ok := loader.GetConfig("oauth")
|
|
if !ok {
|
|
return nil, nil, errors.New("OAuth Config not loaded")
|
|
}
|
|
|
|
rbaccfg, ok := loader.GetConfig("rbac")
|
|
if !ok {
|
|
return nil, nil, errors.New("RBAC Config not loaded")
|
|
}
|
|
|
|
config := &Config{
|
|
DB: dbcfg.(*db.Config),
|
|
HWS: hwscfg.(*hws.Config),
|
|
HWSAuth: hwsauthcfg.(*hwsauth.Config),
|
|
HLOG: hlogcfg.(*hlog.Config),
|
|
Discord: discordcfg.(*discord.Config),
|
|
OAuth: oauthcfg.(*oauth.Config),
|
|
RBAC: rbaccfg.(*rbac.Config),
|
|
Flags: flags,
|
|
}
|
|
|
|
return config, loader, nil
|
|
}
|