Files
goGin/config/config.go
Beyhan Oğur 2a5b661443 first commit
2026-04-26 21:46:42 +03:00

244 lines
8.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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ıı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
}