45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
type Config struct {
|
|
ListenAddr string
|
|
DatabaseURL string
|
|
AuthDBPath string
|
|
JWTSecret []byte
|
|
AdminUser string
|
|
AdminPass string
|
|
TushareAPIURL string
|
|
}
|
|
|
|
func Load() (*Config, error) {
|
|
cfg := &Config{
|
|
ListenAddr: getenv("LISTEN_ADDR", ":8080"),
|
|
DatabaseURL: os.Getenv("DATABASE_URL"),
|
|
AuthDBPath: getenv("AUTH_DB_PATH", "/app/auth/auth.db"),
|
|
AdminUser: strings.TrimSpace(os.Getenv("ADMIN_USER")),
|
|
AdminPass: os.Getenv("ADMIN_PASS"),
|
|
TushareAPIURL: getenv("TUSHARE_API_URL", "http://tushare:8000"),
|
|
}
|
|
if cfg.DatabaseURL == "" {
|
|
return nil, fmt.Errorf("DATABASE_URL 环境变量未设置")
|
|
}
|
|
secret := strings.TrimSpace(os.Getenv("JWT_SECRET"))
|
|
if len(secret) < 16 {
|
|
return nil, fmt.Errorf("JWT_SECRET 必须至少 16 个字符 (建议 openssl rand -hex 32)")
|
|
}
|
|
cfg.JWTSecret = []byte(secret)
|
|
return cfg, nil
|
|
}
|
|
|
|
func getenv(key, fallback string) string {
|
|
if v, ok := os.LookupEnv(key); ok && v != "" {
|
|
return v
|
|
}
|
|
return fallback
|
|
}
|