61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
// Package config handles configuration loading for mosis-portal
|
|
package config
|
|
|
|
import (
|
|
"os"
|
|
)
|
|
|
|
// Config holds all configuration for the portal
|
|
type Config struct {
|
|
// Server settings
|
|
ListenAddr string
|
|
BaseURL string
|
|
|
|
// Database
|
|
DatabasePath string
|
|
|
|
// JWT
|
|
JWTSecret string
|
|
|
|
// OAuth2 - GitHub
|
|
GitHubClientID string
|
|
GitHubClientSecret string
|
|
|
|
// OAuth2 - Google
|
|
GoogleClientID string
|
|
GoogleClientSecret string
|
|
|
|
// Storage
|
|
StoragePath string // Base path for all storage (packages/, assets/, temp/)
|
|
BackupsDir string
|
|
}
|
|
|
|
// Load reads configuration from environment variables with defaults
|
|
func Load() (*Config, error) {
|
|
cfg := &Config{
|
|
ListenAddr: getEnv("LISTEN_ADDR", ":8080"),
|
|
BaseURL: getEnv("BASE_URL", "http://localhost:8080"),
|
|
DatabasePath: getEnv("DATABASE_PATH", "./data/portal.db"),
|
|
|
|
JWTSecret: getEnv("JWT_SECRET", "change-me-in-production"),
|
|
|
|
GitHubClientID: os.Getenv("GITHUB_CLIENT_ID"),
|
|
GitHubClientSecret: os.Getenv("GITHUB_CLIENT_SECRET"),
|
|
|
|
GoogleClientID: os.Getenv("GOOGLE_CLIENT_ID"),
|
|
GoogleClientSecret: os.Getenv("GOOGLE_CLIENT_SECRET"),
|
|
|
|
StoragePath: getEnv("STORAGE_PATH", "./storage"),
|
|
BackupsDir: getEnv("BACKUPS_DIR", "./backups"),
|
|
}
|
|
|
|
return cfg, nil
|
|
}
|
|
|
|
func getEnv(key, defaultValue string) string {
|
|
if value := os.Getenv(key); value != "" {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|