77 lines
1.6 KiB
Go
77 lines
1.6 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type Config struct {
|
|
HTTPPort string
|
|
MQTTBroker string
|
|
MQTTUsername string
|
|
MQTTPassword string
|
|
MQTTClientID string
|
|
MQTTSubscribe string
|
|
MQTTQOS byte
|
|
SQLitePath string
|
|
TTLDays int
|
|
MQTTDebug bool
|
|
SettingsFile string
|
|
SysSubscribe string
|
|
}
|
|
|
|
func Load() Config {
|
|
cfg := Config{
|
|
HTTPPort: getEnv("PORT", "8088"),
|
|
MQTTBroker: getEnv("MQTT_BROKER", "tcp://broker.hivemq.com:1883"),
|
|
MQTTUsername: getEnv("MQTT_USERNAME", ""),
|
|
MQTTPassword: getEnv("MQTT_PASSWORD", ""),
|
|
MQTTClientID: getEnv("MQTT_CLIENT_ID", "mqtt-web-explorer"),
|
|
MQTTSubscribe: getEnv("MQTT_SUBSCRIBE", "#"),
|
|
SQLitePath: getEnv("SQLITE_DB", "./data/mqtt.db"),
|
|
TTLDays: getEnvInt("TTL_DAYS", 7),
|
|
MQTTQOS: byte(getEnvInt("MQTT_QOS", 0)),
|
|
MQTTDebug: getEnvBool("MQTT_DEBUG", false),
|
|
SettingsFile: getEnv("SETTINGS_FILE", "/data/settings.yml"),
|
|
SysSubscribe: getEnv("MQTT_SYS_SUBSCRIBE", "$SYS/#"),
|
|
}
|
|
|
|
return cfg
|
|
}
|
|
|
|
func getEnv(key, fallback string) string {
|
|
val := os.Getenv(key)
|
|
if val == "" {
|
|
return fallback
|
|
}
|
|
return val
|
|
}
|
|
|
|
func getEnvInt(key string, fallback int) int {
|
|
val := os.Getenv(key)
|
|
if val == "" {
|
|
return fallback
|
|
}
|
|
parsed, err := strconv.Atoi(val)
|
|
if err != nil {
|
|
return fallback
|
|
}
|
|
return parsed
|
|
}
|
|
|
|
func getEnvBool(key string, fallback bool) bool {
|
|
val := os.Getenv(key)
|
|
if val == "" {
|
|
return fallback
|
|
}
|
|
switch strings.ToLower(val) {
|
|
case "1", "true", "yes", "on":
|
|
return true
|
|
case "0", "false", "no", "off":
|
|
return false
|
|
default:
|
|
return fallback
|
|
}
|
|
}
|