@@ -0,0 +1,78 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultHost = "127.0.0.1"
|
||||
defaultPort = "2005"
|
||||
defaultDBPath = "./hugs_proxy.db"
|
||||
defaultTokenTTLString = "30d"
|
||||
defaultBusyTimeoutMilli = 5000
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Host string
|
||||
Port string
|
||||
DBPath string
|
||||
DefaultTokenTTL time.Duration
|
||||
BusyTimeoutMS int
|
||||
}
|
||||
|
||||
func Load() Config {
|
||||
host := getenvOrDefault("HUGS_PROXY_HOST", defaultHost)
|
||||
port := getenvOrDefault("HUGS_PROXY_PORT", defaultPort)
|
||||
dbPath := getenvOrDefault("HUGS_PROXY_DB_PATH", defaultDBPath)
|
||||
ttlRaw := getenvOrDefault("HUGS_PROXY_DEFAULT_TOKEN_TTL", defaultTokenTTLString)
|
||||
busyTimeout := getenvIntOrDefault("HUGS_PROXY_DB_BUSY_TIMEOUT_MS", defaultBusyTimeoutMilli)
|
||||
|
||||
ttl, err := ParseExpiryDuration(ttlRaw)
|
||||
if err != nil {
|
||||
ttl, _ = ParseExpiryDuration(defaultTokenTTLString)
|
||||
}
|
||||
|
||||
return Config{
|
||||
Host: host,
|
||||
Port: port,
|
||||
DBPath: dbPath,
|
||||
DefaultTokenTTL: ttl,
|
||||
BusyTimeoutMS: busyTimeout,
|
||||
}
|
||||
}
|
||||
|
||||
func ParseExpiryDuration(s string) (time.Duration, error) {
|
||||
s = strings.TrimSpace(strings.ToLower(s))
|
||||
if strings.HasSuffix(s, "d") {
|
||||
daysPart := strings.TrimSuffix(s, "d")
|
||||
days, err := strconv.Atoi(daysPart)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return time.Duration(days) * 24 * time.Hour, nil
|
||||
}
|
||||
return time.ParseDuration(s)
|
||||
}
|
||||
|
||||
func getenvOrDefault(key string, fallback string) string {
|
||||
v := strings.TrimSpace(os.Getenv(key))
|
||||
if v == "" {
|
||||
return fallback
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
func getenvIntOrDefault(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
|
||||
}
|
||||
Reference in New Issue
Block a user