speedtest-go/config/config.go

88 lines
2.4 KiB
Go
Raw Normal View History

package config
import (
log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
)
type Config struct {
2020-08-19 05:02:37 -04:00
BindAddress string `mapstructure:"bind_address"`
Port string `mapstructure:"listen_port"`
ProxyProtocolPort string `mapstructure:"proxyprotocol_port"`
ServerLat float64 `mapstructure:"server_lat"`
ServerLng float64 `mapstructure:"server_lng"`
IPInfoAPIKey string `mapstructure:"ipinfo_api_key"`
StatsPassword string `mapstructure:"statistics_password"`
RedactIP bool `mapstructure:"redact_ip_addresses"`
AssetsPath string `mapstructure:"assets_path"`
DatabaseType string `mapstructure:"database_type"`
DatabaseHostname string `mapstructure:"database_hostname"`
DatabaseName string `mapstructure:"database_name"`
DatabaseUsername string `mapstructure:"database_username"`
DatabasePassword string `mapstructure:"database_password"`
DatabaseFile string `mapstructure:"database_file"`
2022-03-26 14:47:16 -04:00
EnableHTTP2 bool `mapstructure:"enable_http2"`
EnableTLS bool `mapstructure:"enable_tls"`
TLSCertFile string `mapstructure:"tls_cert_file"`
TLSKeyFile string `mapstructure:"tls_key_file"`
}
var (
2021-09-17 09:06:00 -04:00
configFile string
loadedConfig *Config = nil
)
func init() {
viper.SetDefault("listen_port", "8989")
2020-08-19 05:02:37 -04:00
viper.SetDefault("proxyprotocol_port", "0")
viper.SetDefault("download_chunks", 4)
viper.SetDefault("distance_unit", "K")
viper.SetDefault("enable_cors", false)
viper.SetDefault("statistics_password", "PASSWORD")
viper.SetDefault("redact_ip_addresses", false)
viper.SetDefault("database_type", "postgresql")
viper.SetDefault("database_hostname", "localhost")
viper.SetDefault("database_name", "speedtest")
viper.SetDefault("database_username", "postgres")
2022-03-26 14:47:16 -04:00
viper.SetDefault("enable_tls", false)
viper.SetDefault("enable_http2", false)
viper.SetConfigName("settings")
viper.AddConfigPath(".")
}
2020-11-10 03:33:19 -05:00
func Load(configPath string) Config {
var conf Config
2020-11-10 03:33:19 -05:00
configFile = configPath
viper.SetConfigFile(configPath)
if err := viper.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
log.Warnf("No config file found in search paths, using default values")
} else {
2020-06-16 04:10:58 -04:00
log.Fatalf("Error reading config: %s", err)
}
}
if err := viper.Unmarshal(&conf); err != nil {
log.Fatalf("Error parsing config: %s", err)
}
loadedConfig = &conf
return conf
}
func LoadedConfig() *Config {
if loadedConfig == nil {
2020-11-10 03:33:19 -05:00
Load(configFile)
}
return loadedConfig
}