package grilist import ( "fmt" "log" "os" "github.com/BurntSushi/toml" ) type Config struct { Database struct { Hostname string `toml:"hostname"` //Port int `toml:"port"` Database string `toml:"database"` User string `toml:"user"` Password string `toml:"password"` SSLEnabled bool `toml:ssl_enabled"` } `toml:"database"` EnableNSA bool `toml:"enable_nsa"` AnilistAPI struct { ClientID string `toml:"client_id"` ClientSecret string `toml:"client_secret"` } `toml:"anilist_api"` } func (c *Config) DBConnectionString() string { var sslmode string if c.Database.SSLEnabled { sslmode = "require" } else { sslmode = "disable" } return fmt.Sprintf("host=%s user=%s dbname=%s password=%s sslmode=%s", c.Database.Hostname, c.Database.User, c.Database.Database, c.Database.Password, sslmode) } func LoadConfig() Config { var config Config var path string log.Println("Loading config...") for _, v := range []string{ "grilist.conf", "~/grilist.conf", "/etc/grilist.conf", } { log.Printf("Try \"%s\"...", v) if _, err := os.Stat(v); err != nil { log.Printf("Loading config at \"%s\" failed!", v) } else { log.Printf("Config file found!") path = v break } } if path == "" { log.Fatal("No config file found at the possible locations!") } if _, err := toml.DecodeFile(path, &config); err != nil { log.Printf("%v", err) log.Fatal("Fatal error while reading the config!") } return config }