92 lines
2.4 KiB
Go
92 lines
2.4 KiB
Go
package config
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"strconv"
|
|
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
type Config struct {
|
|
Port string
|
|
DBUrl string
|
|
JWTSecret string
|
|
AppURL string // e.g. https://api.example.com - used for verification links in emails
|
|
GoogleClientID string
|
|
GoogleClientSecret string
|
|
GithubClientID string
|
|
GithubClientSecret string
|
|
ClientCallbackURL string
|
|
RedisUrl string
|
|
|
|
// Avatar Settings
|
|
AvatarHeight int
|
|
AvatarWidth int
|
|
AvatarQuality int
|
|
AvatarFormat string
|
|
AvatarMode string // cover, contain, resize
|
|
|
|
// Email Settings
|
|
EmailHost string
|
|
EmailPort string
|
|
EmailHostUser string
|
|
EmailHostPassword string
|
|
EmailFrom string
|
|
}
|
|
|
|
var AppConfig *Config
|
|
|
|
func LoadConfig() {
|
|
err := godotenv.Load()
|
|
if err != nil {
|
|
log.Println("Warning: Error loading .env file, continuing with system env")
|
|
}
|
|
|
|
AppConfig = &Config{
|
|
Port: getEnv("PORT", "8080"),
|
|
DBUrl: getEnv("DB_URL", ""),
|
|
JWTSecret: getEnv("JWT_SECRET", "default_secret"),
|
|
AppURL: getEnv("APP_URL", "http://localhost:8080"),
|
|
GoogleClientID: getEnv("GOOGLE_CLIENT_ID", ""),
|
|
GoogleClientSecret: getEnv("GOOGLE_CLIENT_SECRET", ""),
|
|
GithubClientID: getEnv("GITHUB_CLIENT_ID", ""),
|
|
GithubClientSecret: getEnv("GITHUB_CLIENT_SECRET", ""),
|
|
ClientCallbackURL: getEnv("CLIENT_CALLBACK_URL", ""),
|
|
RedisUrl: getEnv("REDIS_URL", ""),
|
|
|
|
// Avatar Defaults
|
|
AvatarHeight: getEnvAsInt("AVATAR_H", 0), // Default 0 (auto)
|
|
AvatarWidth: getEnvAsInt("AVATAR_W", 800), // Default 800
|
|
AvatarQuality: getEnvAsInt("AVATAR_Q", 80), // Default 80
|
|
AvatarFormat: getEnv("AVATAR_F", "webp"), // Default webp
|
|
AvatarMode: getEnv("AVATAR_B", "contain"), // Default contain (Fit)
|
|
|
|
// Email Settings
|
|
EmailHost: getEnv("EMAIL_HOST", "localhost"),
|
|
EmailPort: getEnv("EMAIL_PORT", "1025"),
|
|
EmailHostUser: getEnv("EMAIL_HOST_USER", ""),
|
|
EmailHostPassword: getEnv("EMAIL_HOST_PASSWORD", ""),
|
|
EmailFrom: getEnv("EMAIL_FROM", "noreply@gauth.local"),
|
|
}
|
|
}
|
|
|
|
func getEnv(key, fallback string) string {
|
|
if value, exists := os.LookupEnv(key); exists {
|
|
return value
|
|
}
|
|
return fallback
|
|
}
|
|
|
|
func getEnvAsInt(key string, fallback int) int {
|
|
valueStr := getEnv(key, "")
|
|
if valueStr == "" {
|
|
return fallback
|
|
}
|
|
value, err := strconv.Atoi(valueStr)
|
|
if err != nil {
|
|
return fallback
|
|
}
|
|
return value
|
|
}
|