Files
lti-api/internal/config/config.go
T
2025-09-25 11:08:01 +07:00

112 lines
2.9 KiB
Go

package config
import (
"fmt"
"gitlab.com/mbugroup/lti-api.git/internal/utils"
"github.com/spf13/viper"
)
var (
IsProd bool
AppHost string
Version string
LogLevel string
AppPort int
DBHost string
DBUser string
DBPassword string
DBName string
DBPort int
JWTSecret string
JWTAccessExp int
JWTRefreshExp int
JWTResetPasswordExp int
JWTVerifyEmailExp int
PostgresDSN string
RedisURL string
Issuer string
SMTPHost string
SMTPPort int
SMTPUsername string
SMTPPassword string
EmailFrom string
GoogleClientID string
GoogleClientSecret string
RedirectURL string
)
func init() {
loadConfig()
// server configuration
IsProd = viper.GetString("APP_ENV") == "prod"
// AppHost = viper.GetString("APP_HOST")
// AppPort = viper.GetInt("APP_PORT")
AppHost = viper.GetString("APP_HOST")
if AppHost == "" {
AppHost = "0.0.0.0"
}
AppPort = viper.GetInt("APP_PORT")
if AppPort == 0 {
AppPort = 8080
}
Version = viper.GetString("VERSION")
LogLevel = viper.GetString("LOG_LEVEL")
// database configuration
DBHost = viper.GetString("DB_HOST")
DBUser = viper.GetString("DB_USER")
DBPassword = viper.GetString("DB_PASSWORD")
DBName = viper.GetString("DB_NAME")
DBPort = viper.GetInt("DB_PORT")
PostgresDSN = viper.GetString("POSTGRES_DSN")
if PostgresDSN == "" {
PostgresDSN = fmt.Sprintf(
"postgres://%s:%s@%s:%d/%s?sslmode=disable",
DBUser, DBPassword, DBHost, DBPort, DBName,
)
}
// jwt configuration
JWTSecret = viper.GetString("JWT_SECRET")
JWTAccessExp = viper.GetInt("JWT_ACCESS_EXP_MINUTES")
JWTRefreshExp = viper.GetInt("JWT_REFRESH_EXP_DAYS")
JWTResetPasswordExp = viper.GetInt("JWT_RESET_PASSWORD_EXP_MINUTES")
JWTVerifyEmailExp = viper.GetInt("JWT_VERIFY_EMAIL_EXP_MINUTES")
// Redis / OIDC
RedisURL = viper.GetString("REDIS_URL")
if RedisURL == "" {
RedisURL = "redis://redis:6379/0"
}
Issuer = viper.GetString("ISSUER")
if Issuer == "" {
// fallback ke SSO_ISSUER jika kamu sudah pakai itu sebelumnya
Issuer = viper.GetString("SSO_ISSUER")
}
// SMTP configuration
SMTPHost = viper.GetString("SMTP_HOST")
SMTPPort = viper.GetInt("SMTP_PORT")
SMTPUsername = viper.GetString("SMTP_USERNAME")
SMTPPassword = viper.GetString("SMTP_PASSWORD")
EmailFrom = viper.GetString("EMAIL_FROM")
// oauth2 configuration
GoogleClientID = viper.GetString("GOOGLE_CLIENT_ID")
GoogleClientSecret = viper.GetString("GOOGLE_CLIENT_SECRET")
RedirectURL = viper.GetString("REDIRECT_URL")
}
func loadConfig() {
viper.AutomaticEnv()
viper.SetConfigFile(".env")
if err := viper.ReadInConfig(); err == nil {
utils.Log.Info("Config file loaded from .env")
} else {
utils.Log.Warn("No .env file found, using environment variables only")
}
}