96 lines
2.1 KiB
Go
96 lines
2.1 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strconv"
|
|
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
type Config struct {
|
|
AppEnv string
|
|
AppPort string
|
|
AppBaseURL string
|
|
|
|
DBHost string
|
|
DBPort string
|
|
DBUser string
|
|
DBPassword string
|
|
DBName string
|
|
DBSSLMode string
|
|
|
|
JWTSecret string
|
|
JWTExpiresHours int
|
|
JWTRefreshSecret string
|
|
JWTRefreshExpiresHours int
|
|
|
|
GoogleClientID string
|
|
|
|
RateLimitRequestsPerSecond float64
|
|
RateLimitBurst int
|
|
}
|
|
|
|
var Cfg *Config
|
|
|
|
func Load() *Config {
|
|
if err := godotenv.Load(); err != nil {
|
|
log.Println("info: file .env tidak ditemukan, menggunakan environment variable sistem")
|
|
}
|
|
|
|
expiresHours, err := strconv.Atoi(getEnv("JWT_EXPIRES_HOURS", "1"))
|
|
if err != nil {
|
|
expiresHours = 1
|
|
}
|
|
|
|
refreshExpiresHours, err := strconv.Atoi(getEnv("JWT_REFRESH_EXPIRES_HOURS", "168"))
|
|
if err != nil {
|
|
refreshExpiresHours = 168
|
|
}
|
|
|
|
rateLimitRPS, err := strconv.ParseFloat(getEnv("RATE_LIMIT_RPS", "5"), 64)
|
|
if err != nil {
|
|
rateLimitRPS = 5
|
|
}
|
|
|
|
rateLimitBurst, err := strconv.Atoi(getEnv("RATE_LIMIT_BURST", "10"))
|
|
if err != nil {
|
|
rateLimitBurst = 10
|
|
}
|
|
|
|
appPort := getEnv("APP_PORT", "8080")
|
|
defaultBaseURL := fmt.Sprintf("http://localhost:%s", appPort)
|
|
|
|
Cfg = &Config{
|
|
AppEnv: getEnv("APP_ENV", "development"),
|
|
AppPort: appPort,
|
|
AppBaseURL: getEnv("APP_BASE_URL", defaultBaseURL),
|
|
|
|
DBHost: getEnv("DB_HOST", "localhost"),
|
|
DBPort: getEnv("DB_PORT", "5432"),
|
|
DBUser: getEnv("DB_USER", "postgres"),
|
|
DBPassword: getEnv("DB_PASSWORD", "root"),
|
|
DBName: getEnv("DB_NAME", "cardverse"),
|
|
DBSSLMode: getEnv("DB_SSLMODE", "disable"),
|
|
|
|
JWTSecret: getEnv("JWT_SECRET", "secret"),
|
|
JWTExpiresHours: expiresHours,
|
|
JWTRefreshSecret: getEnv("JWT_REFRESH_SECRET", "refresh_secret"),
|
|
JWTRefreshExpiresHours: refreshExpiresHours,
|
|
|
|
GoogleClientID: getEnv("GOOGLE_CLIENT_ID", ""),
|
|
|
|
RateLimitRequestsPerSecond: rateLimitRPS,
|
|
RateLimitBurst: rateLimitBurst,
|
|
}
|
|
|
|
return Cfg
|
|
}
|
|
|
|
func getEnv(key, fallback string) string {
|
|
if value, ok := os.LookupEnv(key); ok && value != "" {
|
|
return value
|
|
}
|
|
return fallback
|
|
} |