Files
mqtt_explorer/backend/internal/config/config.go
Gilles Soulier 383ad292d3 first
2025-12-24 14:47:39 +01:00

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
}
}