package config import ( "github.com/sirupsen/logrus" "github.com/spf13/pflag" "github.com/spf13/viper" ) type smtp struct { Enabled bool Host string Port uint16 Username string Password string From string } var SMTP smtp = smtp{} var BaseURL string = "localhost" var Debug bool = false func InitConfig() error { viper.SetDefault("host", "[::]") viper.SetDefault("port", 8080) viper.SetDefault("db_path", "bin.db") viper.SetDefault("smtp.enabled", false) viper.SetDefault("user.registration_enabled", false) viper.SetDefault("base_url", "localhost") viper.SetDefault("debug", false) viper.SetConfigName("config") viper.SetConfigType("toml") viper.AddConfigPath("/etc/bin") viper.AddConfigPath("$HOME/.config/bin") viper.AddConfigPath("$XDG_CONFIG_HOME/bin") viper.AddConfigPath(".") if err := viper.ReadInConfig(); err != nil { if _, ok := err.(viper.ConfigFileNotFoundError); ok { logrus.Warnln("No config file found.") } else { logrus.WithError(err).Errorln("Config file found but could not read it.") } } pflag.BoolP("debug", "D", false, "toggle debug mode") pflag.Parse() viper.BindPFlags(pflag.CommandLine) Debug = viper.GetBool("debug") SMTP = smtp{ Enabled: viper.GetBool("smtp.enabled"), Host: viper.GetString("smtp.host"), Port: viper.GetUint16("smtp.port"), Username: viper.GetString("smtp.username"), Password: viper.GetString("smtp.password"), From: viper.GetString("smtp.from"), } BaseURL = viper.GetString("base_url") return nil }