71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type Config struct {
|
|
HTTPAddr string
|
|
DBPath string
|
|
JWTSecret string
|
|
AccessTTLMinutes int
|
|
RefreshTTLHours int
|
|
DefaultUsername string
|
|
DefaultPassword string
|
|
DefaultTimezone string
|
|
AppEnv string
|
|
}
|
|
|
|
func Load() Config {
|
|
addr := getenv("HTTP_ADDR", ":9530")
|
|
dbPath := getenv("DB_PATH", "./data/asset-tracker.db")
|
|
jwtSecret := getenv("JWT_SECRET", "change_me_in_production")
|
|
defaultUsername := getenv("DEFAULT_USERNAME", "admin")
|
|
defaultPassword := getenv("DEFAULT_PASSWORD", "admin123")
|
|
defaultTimezone := getenv("DEFAULT_TIMEZONE", "Asia/Shanghai")
|
|
appEnv := strings.ToLower(strings.TrimSpace(getenv("APP_ENV", "dev")))
|
|
|
|
accessTTL := getenvInt("ACCESS_TTL_MINUTES", 30)
|
|
if accessTTL < 5 {
|
|
accessTTL = 5
|
|
}
|
|
refreshTTL := getenvInt("REFRESH_TTL_HOURS", 168)
|
|
if refreshTTL < 1 {
|
|
refreshTTL = 1
|
|
}
|
|
|
|
return Config{
|
|
HTTPAddr: addr,
|
|
DBPath: dbPath,
|
|
JWTSecret: jwtSecret,
|
|
AccessTTLMinutes: accessTTL,
|
|
RefreshTTLHours: refreshTTL,
|
|
DefaultUsername: defaultUsername,
|
|
DefaultPassword: defaultPassword,
|
|
DefaultTimezone: defaultTimezone,
|
|
AppEnv: appEnv,
|
|
}
|
|
}
|
|
|
|
func getenv(key, fallback string) string {
|
|
v := strings.TrimSpace(os.Getenv(key))
|
|
if v == "" {
|
|
return fallback
|
|
}
|
|
return v
|
|
}
|
|
|
|
func getenvInt(key string, fallback int) int {
|
|
v := strings.TrimSpace(os.Getenv(key))
|
|
if v == "" {
|
|
return fallback
|
|
}
|
|
n, err := strconv.Atoi(v)
|
|
if err != nil {
|
|
return fallback
|
|
}
|
|
return n
|
|
}
|