46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
|
|
// Package config provides application configuration loaded from environment
|
||
|
|
// variables with sensible defaults for local development.
|
||
|
|
package config
|
||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
"strconv"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Config holds all application configuration.
|
||
|
|
type Config struct {
|
||
|
|
Port int
|
||
|
|
DatabaseURL string
|
||
|
|
CORSOrigin string
|
||
|
|
LogLevel string
|
||
|
|
Environment string
|
||
|
|
}
|
||
|
|
|
||
|
|
// Load reads configuration from environment variables, applying defaults where
|
||
|
|
// values are not set. All secrets come from the environment — nothing is hardcoded.
|
||
|
|
func Load() *Config {
|
||
|
|
return &Config{
|
||
|
|
Port: getEnvInt("PORT", 8080),
|
||
|
|
DatabaseURL: getEnv("DATABASE_URL", "postgres://controlcenter:controlcenter@localhost:5432/controlcenter?sslmode=disable"),
|
||
|
|
CORSOrigin: getEnv("CORS_ORIGIN", "*"),
|
||
|
|
LogLevel: getEnv("LOG_LEVEL", "info"),
|
||
|
|
Environment: getEnv("ENVIRONMENT", "development"),
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func getEnv(key, fallback string) string {
|
||
|
|
if v := os.Getenv(key); v != "" {
|
||
|
|
return v
|
||
|
|
}
|
||
|
|
return fallback
|
||
|
|
}
|
||
|
|
|
||
|
|
func getEnvInt(key string, fallback int) int {
|
||
|
|
if v := os.Getenv(key); v != "" {
|
||
|
|
if i, err := strconv.Atoi(v); err == nil {
|
||
|
|
return i
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return fallback
|
||
|
|
}
|