60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
package app
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func loadConfig() (Config, error) {
|
|
cfg := Config{
|
|
DatabaseURL: getenv("DATABASE_URL", "postgres://postgres:postgres@localhost:5432/box?sslmode=disable"),
|
|
ListenAddr: getenv("LISTEN_ADDR", ":8080"),
|
|
UnixSocketPath: getenv("UNIX_SOCKET_PATH", ""),
|
|
DevMode: getenvBool("DEV_MODE", true),
|
|
DemoUser: getenv("DEV_DEMO_USER", "demo"),
|
|
DemoEmail: getenv("DEV_DEMO_EMAIL", "demo@example.local"),
|
|
AuthHeaderUser: getenv("AUTH_HEADER_USER", "X-authentik-username"),
|
|
AuthHeaderEmail: getenv("AUTH_HEADER_EMAIL", "X-authentik-email"),
|
|
ForgejoBaseURL: strings.TrimRight(getenv("FORGEJO_BASE_URL", ""), "/"),
|
|
ForgejoToken: getenv("FORGEJO_TOKEN", ""),
|
|
ForgejoOrg: getenv("FORGEJO_ORG", ""),
|
|
CaddyAdminURL: strings.TrimRight(getenv("CADDY_ADMIN_URL", "http://localhost:2019"), "/"),
|
|
CaddyServerID: getenv("CADDY_SERVER_ID", "srv0"),
|
|
CaddyDomainSuffix: getenv("CADDY_DOMAIN_SUFFIX", ""),
|
|
CaddyRouteEnabled: getenvBool("CADDY_ROUTE_ENABLED", false),
|
|
WebhookBaseURL: strings.TrimRight(getenv("WEBHOOK_BASE_URL", ""), "/"),
|
|
}
|
|
if cfg.DatabaseURL == "" {
|
|
return cfg, errors.New("DATABASE_URL is required")
|
|
}
|
|
return cfg, nil
|
|
}
|
|
|
|
func userHomeOrDot() string {
|
|
h, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return "."
|
|
}
|
|
return h
|
|
}
|
|
|
|
func getenv(key, fallback string) string {
|
|
if v := os.Getenv(key); v != "" {
|
|
return v
|
|
}
|
|
return fallback
|
|
}
|
|
|
|
func getenvBool(key string, fallback bool) bool {
|
|
v := os.Getenv(key)
|
|
if v == "" {
|
|
return fallback
|
|
}
|
|
b, err := strconv.ParseBool(v)
|
|
if err != nil {
|
|
return fallback
|
|
}
|
|
return b
|
|
}
|