package config import ( "fmt" "os" "strings" ) type Config struct { DatabaseURL string HTTPPort string DefaultServerName string DefaultServerHost string DefaultServerIP string SessionCookieName string SessionTTLHours int ACMEEmail string ACMEStaging bool ACMEHTTPAddr string SSLStoragePath string NginxSitesDir string NginxReloadCmd string } func Load() (*Config, error) { url := os.Getenv("DATABASE_URL") if url == "" { return nil, fmt.Errorf("DATABASE_URL is required") } port := os.Getenv("HTTP_PORT") if port == "" { port = "8000" } serverName := os.Getenv("DEFAULT_SERVER_NAME") if serverName == "" { serverName = "local" } serverHost := os.Getenv("DEFAULT_SERVER_HOSTNAME") if serverHost == "" { serverHost = "localhost" } serverIP := os.Getenv("DEFAULT_SERVER_IP") if serverIP == "" { serverIP = "127.0.0.1" } cookieName := os.Getenv("SESSION_COOKIE_NAME") if cookieName == "" { cookieName = "panel_session" } sslPath := os.Getenv("SSL_STORAGE_PATH") if sslPath == "" { sslPath = "/etc/ssl/panel" } return &Config{ DatabaseURL: url, HTTPPort: port, DefaultServerName: serverName, DefaultServerHost: serverHost, DefaultServerIP: serverIP, SessionCookieName: cookieName, SessionTTLHours: 168, ACMEEmail: strings.TrimSpace(os.Getenv("ACME_EMAIL")), ACMEStaging: os.Getenv("ACME_STAGING") == "true" || os.Getenv("ACME_STAGING") == "1", ACMEHTTPAddr: strings.TrimSpace(os.Getenv("ACME_HTTP_ADDR")), SSLStoragePath: sslPath, NginxSitesDir: strings.TrimSpace(os.Getenv("NGINX_SITES_DIR")), NginxReloadCmd: strings.TrimSpace(os.Getenv("NGINX_RELOAD_CMD")), }, nil }