Files
MosisService/portal/internal/config/config.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
}