51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
package config
|
|
|
|
import (
|
|
"github.com/knadh/koanf/parsers/yaml"
|
|
"github.com/knadh/koanf/providers/confmap"
|
|
"github.com/knadh/koanf/providers/file"
|
|
"github.com/knadh/koanf/v2"
|
|
"log"
|
|
"os"
|
|
)
|
|
|
|
type Configuration struct {
|
|
Users []UserConfig `koanf:"users"`
|
|
PXVDI PXVDIConfig `koanf:"pxvdi"`
|
|
}
|
|
|
|
type PXVDIConfig struct {
|
|
Enabled bool `koanf:"enabled"`
|
|
ApiUrl string `koanf:"apiurl"`
|
|
ApiKey string `koanf:"apikey"`
|
|
}
|
|
|
|
type UserConfig struct {
|
|
Username string `koanf:"username"`
|
|
Password string `koanf:"password"`
|
|
}
|
|
|
|
var Conf Configuration
|
|
|
|
func Load(configFile string) Configuration {
|
|
|
|
var k = koanf.New(".")
|
|
|
|
k.Load(confmap.Provider(map[string]interface{}{}, "."), nil)
|
|
|
|
if _, err := os.Stat(configFile); os.IsNotExist(err) {
|
|
log.Printf("Config file %s not found, skipping config file", configFile)
|
|
} else {
|
|
if err := k.Load(file.Provider(configFile), yaml.Parser()); err != nil {
|
|
log.Fatalf("Error loading config from file: %v", err)
|
|
}
|
|
}
|
|
|
|
koanfTag := koanf.UnmarshalConf{Tag: "koanf"}
|
|
k.UnmarshalWithConf("Users", &Conf.Users, koanfTag)
|
|
k.UnmarshalWithConf("PXVDI", &Conf.PXVDI, koanfTag)
|
|
|
|
return Conf
|
|
|
|
}
|