feat: add SproutWorkCollect apps

This commit is contained in:
2026-03-13 17:14:37 +08:00
parent 189baa3d59
commit 46afd3149f
54 changed files with 28126 additions and 4 deletions

View File

@@ -0,0 +1,79 @@
package config
import (
"os"
"path/filepath"
"strconv"
)
// Config holds all runtime configuration resolved from environment variables.
type Config struct {
Port int
AdminToken string
WorksDir string
ConfigDir string
Debug bool
}
// Load reads environment variables and returns a fully-populated Config.
//
// Directory resolution priority:
// 1. SPROUTWORKCOLLECT_WORKS_DIR / SPROUTWORKCOLLECT_CONFIG_DIR (per-dir override)
// 2. SPROUTWORKCOLLECT_DATA_DIR / DATA_DIR (data root, works/ and config/ appended)
// 3. ./data/works and ./data/config (relative to current working directory)
func Load() *Config {
cfg := &Config{
Port: 5000,
// Do not commit real admin tokens; override via ADMIN_TOKEN / SPROUTWORKCOLLECT_ADMIN_TOKEN.
AdminToken: "change-me",
}
if v := os.Getenv("PORT"); v != "" {
if p, err := strconv.Atoi(v); err == nil {
cfg.Port = p
}
}
if v := firstEnv("SPROUTWORKCOLLECT_ADMIN_TOKEN", "ADMIN_TOKEN"); v != "" {
cfg.AdminToken = v
}
dbg := os.Getenv("GIN_DEBUG")
cfg.Debug = dbg == "1" || dbg == "true"
dataDir := firstEnv("SPROUTWORKCOLLECT_DATA_DIR", "DATA_DIR")
worksDir := firstEnv("SPROUTWORKCOLLECT_WORKS_DIR", "WORKS_DIR")
if worksDir == "" {
if dataDir != "" {
worksDir = filepath.Join(dataDir, "works")
} else {
wd, _ := os.Getwd()
worksDir = filepath.Join(wd, "data", "works")
}
}
configDir := firstEnv("SPROUTWORKCOLLECT_CONFIG_DIR", "CONFIG_DIR")
if configDir == "" {
if dataDir != "" {
configDir = filepath.Join(dataDir, "config")
} else {
wd, _ := os.Getwd()
configDir = filepath.Join(wd, "data", "config")
}
}
cfg.WorksDir = filepath.Clean(worksDir)
cfg.ConfigDir = filepath.Clean(configDir)
return cfg
}
func firstEnv(keys ...string) string {
for _, k := range keys {
if v := os.Getenv(k); v != "" {
return v
}
}
return ""
}