244 lines
8.6 KiB
Go
244 lines
8.6 KiB
Go
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
|
||
}
|