NAM-APJATEL-BACKEND/config/config.go

131 lines
2.7 KiB
Go

package config
import (
"errors"
"os"
"strconv"
"time"
"github.com/joho/godotenv"
)
type DbConfig struct {
DBUser string
DBPass string
DBHost string
DBPort string
DBName string
}
type AuthConfig struct {
UserAuthEnabled bool
JWTSecret string
TokenExpiry time.Duration
}
type LoginConfig struct {
LoginAPI string
AuthMeAPI string
LogoutAPI string
SkipSSLVerification bool
}
type TokenConfig struct {
PassiveAssetIssuer string
JwtSignatureKey []byte
}
type ApiConfig struct {
ApiPort string
}
type TokenApi struct {
TokenApiKey string
}
type Config struct {
DbConfig
TokenConfig
TokenApi
ApiConfig
LoginConfig
AuthConfig
}
func (c *Config) readConfig() error {
if err := godotenv.Load(); err != nil {
return errors.New("failed to load environment variables")
}
c.DbConfig = DbConfig{
DBHost: os.Getenv("DB_HOST"),
DBPort: os.Getenv("DB_PORT"),
DBName: os.Getenv("DB_NAME"),
DBUser: os.Getenv("DB_USER"),
DBPass: os.Getenv("DB_PASSWORD"),
}
c.ApiConfig = ApiConfig{
ApiPort: os.Getenv("API_PORT"),
}
c.TokenConfig = TokenConfig{
PassiveAssetIssuer: os.Getenv("PASSIVE_ASSET_ISSUER"),
JwtSignatureKey: []byte(os.Getenv("TOKEN_KEY")),
}
c.TokenApi = TokenApi{
TokenApiKey: os.Getenv("TOKEN_API_KEY"),
}
skipSSL, err := strconv.ParseBool(os.Getenv("SKIP_SSL_VERIFICATION"))
if err != nil {
return errors.New("failed to read SKIP_SSL_VERIFICATION environment variable")
}
c.LoginConfig = LoginConfig{
LoginAPI: os.Getenv("API_LOGIN_URL"),
AuthMeAPI: os.Getenv("API_ME_URL"),
LogoutAPI: os.Getenv("API_LOGOUT_URL"),
SkipSSLVerification: skipSSL,
}
userAuthEnabled := true // Default to true for security
if authEnabledStr := os.Getenv("USER_AUTH_ENABLED"); authEnabledStr != "" {
var err error
userAuthEnabled, err = strconv.ParseBool(authEnabledStr)
if err != nil {
return errors.New("invalid USER_AUTH_ENABLED value, must be true or false")
}
}
// Parse token expiry (default to 24 hours)
tokenExpiry := 24 * time.Hour
if expiryStr := os.Getenv("JWT_TOKEN_EXPIRY_HOURS"); expiryStr != "" {
if hours, err := strconv.Atoi(expiryStr); err == nil {
tokenExpiry = time.Duration(hours) * time.Hour
}
}
c.AuthConfig = AuthConfig{
UserAuthEnabled: userAuthEnabled,
JWTSecret: os.Getenv("JWT_SECRET"),
TokenExpiry: tokenExpiry,
}
if c.ApiConfig.ApiPort == "" {
return errors.New("failed to read environment variables")
}
return nil
}
func NewConfig() (*Config, error) {
config := &Config{}
err := config.readConfig()
if err != nil {
return nil, err
}
return config, nil
}