128 lines
4.1 KiB
Go
128 lines
4.1 KiB
Go
package configs
|
||
|
||
import (
|
||
"os"
|
||
"strconv"
|
||
"strings"
|
||
|
||
"github.com/joho/godotenv"
|
||
"go.uber.org/zap"
|
||
)
|
||
|
||
type Config struct {
|
||
Env string // örn. development, production
|
||
Port string
|
||
DBUrl string
|
||
DBPGUrl string
|
||
JWTSecret string
|
||
AppURL string // örn. https://api.example.com - e-posta doğrulama linkleri için kullanılır
|
||
ImageAPIURL string // Harici resim işleme servisi
|
||
ImageAPIKey string
|
||
ImageAPIEmail string
|
||
ImageAPIPassword string
|
||
GoogleClientID string
|
||
GoogleClientSecret string
|
||
GithubClientID string
|
||
GithubClientSecret string
|
||
GoogleRedirectURL string
|
||
GithubRedirectURL string
|
||
ClientCallbackURL string
|
||
OAuthRedirectURL string
|
||
RedisUrl string
|
||
AccessTokenExpireMinutes int
|
||
RefreshTokenExpireDays int
|
||
// E-posta Ayarları
|
||
EmailHost string
|
||
EmailPort string
|
||
EmailHostUser string
|
||
EmailHostPassword string
|
||
EmailFrom string
|
||
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 {
|
||
// Logger henüz hazır olmayabilir; varsa kullan
|
||
if Logger != nil {
|
||
Logger.Warn("Uyarı: .env dosyası yüklenirken hata oluştu, sistem ortam değişkenleriyle devam ediliyor", zapFieldsForEnvError(err)...)
|
||
}
|
||
}
|
||
|
||
AppConfig = &Config{
|
||
Env: getEnv("APP_ENV", "development"),
|
||
Port: getEnv("PORT", "8080"),
|
||
DBUrl: getEnv("DB_URL", ""),
|
||
DBPGUrl: getEnv("DB_URL_PG", ""),
|
||
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", ""),
|
||
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
|
||
|
||
// 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"),
|
||
CorsDebug: getEnvAsBool("CORS_DEBUG", false),
|
||
ImageAPIURL: getEnv("IMAGE_API_URL", "https://v2.beyhano.com.tr"),
|
||
ImageAPIKey: getEnv("IMAGE_API_KEY", ""),
|
||
ImageAPIEmail: getEnv("IMAGE_API_EMAIL", ""),
|
||
ImageAPIPassword: getEnv("IMAGE_API_PASSWORD", ""),
|
||
}
|
||
}
|
||
|
||
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
|
||
}
|
||
|
||
func zapFieldsForEnvError(err error) []zap.Field {
|
||
return []zap.Field{
|
||
zap.String("error", err.Error()),
|
||
}
|
||
}
|