f8051ea8c9
Co-authored-by: Copilot <copilot@github.com>
82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
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
|
|
GiteaRepoURL 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)
|
|
giteaRepoURL := getenvOrDefault("HUGS_PROXY_GITEA_REPO_URL", "https://gitea.gangary.cn/gary/Hugs-Proxy")
|
|
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,
|
|
GiteaRepoURL: giteaRepoURL,
|
|
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
|
|
}
|