feat: sync current progress (P0 hardening + P1 observability + deploy docs/systemd)

This commit is contained in:
OpenClaw Agent
2026-02-28 23:51:23 +08:00
commit d17296d794
96 changed files with 6358 additions and 0 deletions

70
internal/config/config.go Normal file
View File

@@ -0,0 +1,70 @@
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
}