package configs import ( "log" "os" "strconv" "strings" "github.com/joho/godotenv" ) type Config struct { Env string // örn. development, production Port string DBUrl string JWTSecret string AppURL string ApiAppURL string // örn. https://api.example.com - e-posta doğrulama linkleri için kullanılır GoogleClientID string GoogleClientSecret string GithubClientID string GithubClientSecret string GoogleRedirectURL string GithubRedirectURL string ClientCallbackURL string OAuthRedirectURL string RedisUrl string AccessTokenExpireMinutes int RefreshTokenExpireDays int // Avatar Ayarları AvatarHeight int AvatarWidth int AvatarQuality int AvatarFormat string AvatarMode string // cover, contain, resize // Ana Sayfa Resim Ayarları HomeImageHeight int HomeImageWidth int HomeImageQuality int HomeImageFormat string HomeImageMode string // cover, contain, resize // Hakkında Resim Ayarları AboutImageHeight int AboutImageWidth int AboutImageQuality int AboutImageFormat string AboutImageMode string // cover, contain, resize // Servis Resim Ayarları ServiceImageHeight int ServiceImageWidth int ServiceImageQuality int ServiceImageFormat string ServiceImageMode string // cover, contain, resize // Gönderi Resim Ayarları PostImageHeight int PostImageWidth int PostImageQuality int PostImageFormat string PostImageMode string // cover, contain, resize // Gönderi Kategori Resim Ayarları PostCategoryImageHeight int PostCategoryImageWidth int PostCategoryImageQuality int PostCategoryImageFormat string PostCategoryImageMode string // cover, contain, resize // Site Logo Ayarları SettingsLogoHeight int SettingsLogoWidth int SettingsLogoQuality int SettingsLogoFormat string SettingsLogoMode string // cover, contain, resize // Afiş Resim Ayarları BannerImageHeight int BannerImageWidth int BannerImageQuality int BannerImageFormat string BannerImageMode string // cover, contain, resize // Afiş Küçük Resim (Thumb) Ayarları BannerThumbHeight int BannerThumbWidth int BannerThumbQuality int BannerThumbFormat string BannerThumbMode string // cover, contain, resize // E-posta Ayarları EmailHost string EmailPort string EmailHostUser string EmailHostPassword string EmailFrom string // Debug / Logging Debug bool // SET_DEBUG=true ise middleware ve diğer debug logları açılır CorsDebug bool } var AppConfig *Config func LoadConfig() { err := godotenv.Load() if err != nil { // Eğer proje kök dizininden çalıştırılmıyorsa (örn: cmd/app içinden), üst dizinleri kontrol et err = godotenv.Load(".env") //err = godotenv.Load("../../.env") } if err != nil { log.Printf("Uyarı: .env dosyası yüklenirken hata oluştu: %v — sistem ortam değişkenleriyle devam ediliyor", err) } log.Printf(".env ENV YUKLENDI") AppConfig = &Config{ Env: getEnv("APP_ENV", "development"), Port: getEnv("PORT", "8080"), DBUrl: getEnv("DB_URL", ""), JWTSecret: getEnv("JWT_SECRET", "go-gin-mTFY2jAOMWWxadVIWjRoPG9aOM3z9srCVoU35Gs1VZaRKgXet26cztUE8LLpwok9"), AppURL: getEnv("APP_URL", "http://localhost:8080"), ApiAppURL: getEnv("BASE_SITE_URL", "http://localhost:3000"), GoogleClientID: getEnv("GOOGLE_CLIENT_ID", ""), GoogleClientSecret: getEnv("GOOGLE_CLIENT_SECRET", ""), GithubClientID: getEnv("GITHUB_CLIENT_ID", ""), GithubClientSecret: getEnv("GITHUB_CLIENT_SECRET", ""), GoogleRedirectURL: getEnv("GOOGLE_REDIRECT_URL", "http://localhost:8080/api/v1/auth/google/callback"), GithubRedirectURL: getEnv("GITHUB_REDIRECT_URL", "http://localhost:8080/api/v1/auth/github/callback"), ClientCallbackURL: getEnv("CLIENT_CALLBACK_URL", ""), OAuthRedirectURL: getEnv("OAUTH_REDIRECT_URL", ""), RedisUrl: getEnv("REDIS_URL", ""), AccessTokenExpireMinutes: getEnvAsInt("ACCESS_TOKEN_EXPIRE_MINUTES", 120), // Varsayılan 120 dakika RefreshTokenExpireDays: getEnvAsInt("REFRESH_TOKEN_EXPIRE_DAYS", 30), // Varsayılan 30 gün // Avatar Varsayılanları AvatarHeight: getEnvAsInt("AVATAR_H", 0), // Varsayılan 0 (otomatik) AvatarWidth: getEnvAsInt("AVATAR_W", 800), // Varsayılan 800 AvatarQuality: getEnvAsInt("AVATAR_Q", 80), // Varsayılan 80 AvatarFormat: getEnv("AVATAR_F", "webp"), // Varsayılan webp AvatarMode: getEnv("AVATAR_B", "contain"), // Varsayılan contain (Fit) // Ana Sayfa Resim Varsayılanları HomeImageHeight: getEnvAsInt("HOME_IMAGE_H", 0), // Varsayılan 0 (otomatik) HomeImageWidth: getEnvAsInt("HOME_IMAGE_W", 800), // Varsayılan 800 HomeImageQuality: getEnvAsInt("HOME_IMAGE_Q", 80), // Varsayılan 80 HomeImageFormat: getEnv("HOME_IMAGE_F", "webp"), // Varsayılan webp HomeImageMode: getEnv("HOME_IMAGE_B", "contain"), // Varsayılan contain (Fit) // Hakkında Resim Varsayılanları AboutImageHeight: getEnvAsInt("ABOUTME_IMAGE_H", getEnvAsInt("ABOUT_IMAGE_H", 0)), AboutImageWidth: getEnvAsInt("ABOUTME_IMAGE_W", getEnvAsInt("ABOUT_IMAGE_W", 800)), AboutImageQuality: getEnvAsInt("ABOUTME_IMAGE_Q", getEnvAsInt("ABOUT_IMAGE_Q", 80)), AboutImageFormat: getEnv("ABOUTME_IMAGE_F", getEnv("ABOUT_IMAGE_F", "webp")), AboutImageMode: getEnv("ABOUTME_IMAGE_B", getEnv("ABOUT_IMAGE_B", "contain")), // Servis Resim Varsayılanları ServiceImageHeight: getEnvAsInt("SERVICE_IMAGE_H", 256), ServiceImageWidth: getEnvAsInt("SERVICE_IMAGE_W", 256), ServiceImageQuality: getEnvAsInt("SERVICE_IMAGE_Q", 90), ServiceImageFormat: getEnv("SERVICE_IMAGE_F", "png"), ServiceImageMode: getEnv("SERVICE_IMAGE_B", "cover"), // Gönderi Resim Varsayılanları PostImageHeight: getEnvAsInt("POST_IMAGE_H", 450), PostImageWidth: getEnvAsInt("POST_IMAGE_W", 700), PostImageQuality: getEnvAsInt("POST_IMAGE_Q", 90), PostImageFormat: getEnv("POST_IMAGE_F", "webp"), PostImageMode: getEnv("POST_IMAGE_B", "cover"), // Gönderi Kategori Resim Varsayılanları PostCategoryImageHeight: getEnvAsInt("POST_CATEGORY_IMAGE_H", 300), PostCategoryImageWidth: getEnvAsInt("POST_CATEGORY_IMAGE_W", 300), PostCategoryImageQuality: getEnvAsInt("POST_CATEGORY_IMAGE_Q", 85), PostCategoryImageFormat: getEnv("POST_CATEGORY_IMAGE_F", "png"), PostCategoryImageMode: getEnv("POST_CATEGORY_IMAGE_B", "cover"), // Site Logo Varsayılanları SettingsLogoHeight: getEnvAsInt("SETTINGS_LOGO_H", 54), SettingsLogoWidth: getEnvAsInt("SETTINGS_LOGO_W", 165), SettingsLogoQuality: getEnvAsInt("SETTINGS_LOGO_Q", 85), SettingsLogoFormat: getEnv("SETTINGS_LOGO_F", "png"), SettingsLogoMode: getEnv("SETTINGS_LOGO_B", "cover"), // Afiş Resim Varsayılanları BannerImageHeight: getEnvAsInt("BANNER_IMAGE_H", 700), BannerImageWidth: getEnvAsInt("BANNER_IMAGE_W", 1920), BannerImageQuality: getEnvAsInt("BANNER_IMAGE_Q", 85), BannerImageFormat: getEnv("BANNER_IMAGE_F", "webp"), BannerImageMode: getEnv("BANNER_IMAGE_B", "cover"), // Afiş Küçük Resim (Thumb) Varsayılanları BannerThumbHeight: getEnvAsInt("BANNER_THUMB_H", 48), BannerThumbWidth: getEnvAsInt("BANNER_THUMB_W", 48), BannerThumbQuality: getEnvAsInt("BANNER_THUMB_Q", 90), BannerThumbFormat: getEnv("BANNER_THUMB_F", "png"), BannerThumbMode: getEnv("BANNER_THUMB_B", "cover"), // E-posta Varsayılanları 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"), // Debug / Logging Debug: getEnvAsBool("SET_DEBUG", false), CorsDebug: getEnvAsBool("CORS_DEBUG", false), } } 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 } func getEnvAsBool(key string, fallback bool) bool { valueStr := strings.TrimSpace(getEnv(key, "")) if valueStr == "" { return fallback } value, err := strconv.ParseBool(valueStr) if err != nil { return fallback } return value }