59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
type Config struct {
|
|
Port string
|
|
DatabaseURL string
|
|
StorageDir string
|
|
DevMode bool
|
|
OIDCIssuer string
|
|
OIDCAudience string
|
|
OIDCJWKSURL string
|
|
OIDCAuthURL string
|
|
OIDCTokenURL string
|
|
OIDCClientID string
|
|
OIDCRedirect string
|
|
OIDCLogoutURL string
|
|
}
|
|
|
|
func LoadConfig() (Config, error) {
|
|
_ = godotenv.Load()
|
|
|
|
cfg := Config{
|
|
Port: envOrDefault("PORT", "8080"),
|
|
DatabaseURL: os.Getenv("DATABASE_URL"),
|
|
StorageDir: envOrDefault("STORAGE_DIR", "uploads"),
|
|
DevMode: strings.EqualFold(envOrDefault("DEV_MODE", "false"), "true"),
|
|
OIDCIssuer: os.Getenv("OIDC_ISSUER"),
|
|
OIDCAudience: os.Getenv("OIDC_AUDIENCE"),
|
|
OIDCJWKSURL: os.Getenv("OIDC_JWKS_URL"),
|
|
OIDCAuthURL: os.Getenv("OIDC_AUTH_URL"),
|
|
OIDCTokenURL: os.Getenv("OIDC_TOKEN_URL"),
|
|
OIDCClientID: os.Getenv("OIDC_CLIENT_ID"),
|
|
OIDCRedirect: os.Getenv("OIDC_REDIRECT_URL"),
|
|
OIDCLogoutURL: os.Getenv("OIDC_LOGOUT_URL"),
|
|
}
|
|
|
|
if cfg.DatabaseURL == "" {
|
|
return Config{}, fmt.Errorf("DATABASE_URL is required")
|
|
}
|
|
if !cfg.DevMode && (cfg.OIDCIssuer == "" || cfg.OIDCAudience == "" || cfg.OIDCJWKSURL == "") {
|
|
return Config{}, fmt.Errorf("OIDC_ISSUER, OIDC_AUDIENCE, and OIDC_JWKS_URL are required")
|
|
}
|
|
return cfg, nil
|
|
}
|
|
|
|
func envOrDefault(key, fallback string) string {
|
|
value := os.Getenv(key)
|
|
if value == "" {
|
|
return fallback
|
|
}
|
|
return value
|
|
}
|