Template
77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
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
|
|
}
|