94 lines
2.6 KiB
Go

package config
import (
"fmt"
"os"
"strconv"
)
type AgentConfig struct {
ServerEndpoint string
NATSURL string
NATSUser string
NATSPass string
GetIPv4Endpoint string
GetIPv6Endpoint string
ZadminID int
}
type ServerConfig struct {
DatabaseURL string
NATSURL string
NATSUser string
NATSPass string
ListenAddress string
}
func LoadAgentConfig() (*AgentConfig, error) {
natsHost := getEnv("NATS_HOST", "localhost")
natsPort := getEnv("NATS_PORT", "4222")
natsUser := getEnv("NATS_USER", "agent-1")
natsPass := getEnv("NATS_PASS", "1")
natsURL := fmt.Sprintf("nats://%s:%s", natsHost, natsPort)
zadminEndpoint := getEnv("ZADMIN_ENDPOINT", "https://zadmin.mziesel.nl")
zadminIdString := getEnv("ZADMIN_ID", "1")
zadminID, err := strconv.Atoi(zadminIdString)
if err != nil {
return nil, err
}
ip4Endpoint := getEnv("ZADMIN_IPV4_ENDPOINT", "https://ip4.mziesel.nl/json")
ip6Endpoint := getEnv("ZADMIN_IPV6_ENDPOINT", "https://ip6.mziesel.nl/json")
return &AgentConfig{
NATSURL: natsURL,
NATSUser: natsUser,
NATSPass: natsPass,
ServerEndpoint: zadminEndpoint,
GetIPv4Endpoint: ip4Endpoint,
GetIPv6Endpoint: ip6Endpoint,
ZadminID: zadminID,
}, nil
}
func LoadServerConfig() *ServerConfig {
// Load environment variables with defaults
dbHost := getEnv("POSTGRES_HOST", "localhost")
dbUser := getEnv("POSTGRES_USER", "zadmin_user")
dbPassword := getEnv("POSTGRES_PASSWORD", "s3cret!")
dbName := getEnv("POSTGRES_DB", "zadmin_dev")
dbPort := getEnv("POSTGRES_PORT", "5432")
dbSSLMode := getEnv("POSTGRES_SSLMODE", "disable")
dbTimeZone := getEnv("POSTGRES_TIMEZONE", "Europe/Amsterdam")
databaseURL := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=%s TimeZone=%s",
dbHost, dbUser, dbPassword, dbName, dbPort, dbSSLMode, dbTimeZone)
natsHost := getEnv("NATS_HOST", "localhost")
natsPort := getEnv("NATS_PORT", "4222")
natsUser := getEnv("NATS_USER", "server")
natsPass := getEnv("NATS_PASS", "server")
natsURL := fmt.Sprintf("nats://%s:%s", natsHost, natsPort)
listenAddress := getEnv("LISTEN_ADDRESS", ":8080")
return &ServerConfig{
DatabaseURL: databaseURL,
NATSUser: natsUser,
NATSPass: natsPass,
NATSURL: natsURL,
ListenAddress: listenAddress,
}
}
// getEnv retrieves the value of the environment variable named by the key.
// It returns the default value if the variable is not present.
func getEnv(key, defaultValue string) string {
if value, exists := os.LookupEnv(key); exists {
return value
}
return defaultValue
}