Files
xk-hy-transit-go/internal/config/config.go
2026-05-22 17:23:02 +08:00

96 lines
4.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package config 从环境变量或 .env 加载配置main 启动时 godotenv.Load
//
// 与主流程的关系:
// - XK_API_* / XkAPICallbackPath → 步骤 ①②④⑤ 调云端 xk-api
// - HY_* → 步骤 ③ 监管报文 AES 加密与 HMAC 签名
// - FORWARD_BASE_URL → 步骤 ③ 内网 xk-hy-forward-go 入口(监管 JSON + PDF 上传双通道)
// - FILE_UPLOAD_VIA_FORWARD → true 时 PDF 上传走 forward不直连政务云 28211
// - MYSQL_DSN → 本机 hy_sync_job / hy_push_* 审计表
// - CRON_EXPR / SCHEDULE_TIME → serve 子命令定时
// - ANCHOR_OFFSET_DAYS → 未传 --date 时的默认锚定日(通常=昨日)
package config
import (
"os"
"strconv"
"strings"
)
// Config 监管中转运行所需的全部配置项。
type Config struct {
XkAPIBaseURL string // 云端根地址,如 https://api.xiaokang88.com
XkAPIToken string // 对应云端 HY_TRANSIT_API_TOKENHeader: X-Hy-Transit-Token
HyAppKey string // 监管平台 AppKey加密上报
HyAppSecret string // 监管平台 Secret签名
HyAesKey string // 监管平台 AES 密钥body 加密)
ForwardBaseURL string // xk-hy-forward-go 地址,如 http://192.168.1.10:8080
ForwardSharedSecret string // 与 forward-go FORWARD_SHARED_SECRET 一致Header X-Forward-Token
FileUploadViaForward bool // truePDF 上传经 forward /mng/file/auth/upload不直连政务云
MySQLDSN string // 本机中转库 DSNhy_transit_schema.sql
AnchorOffsetDays int // 锚定日 = 今天 - N 天,默认 1
XkAPICallbackPath string // 批量回调路径,默认 /api/hy/transit/batch/callback
CronExpr string // serve 用,默认 0 22 * * *
ScheduleTime string // HH:MM仅当未设 CRON_EXPR 时转为 cron
ChromePath string // 可选Chrome/Edge 路径,未设则自动探测
FileUploadInsecureSkipVerify bool // 文件上传 HTTPS 跳过证书校验(政务网)
LogWebAddr string // Web 控制台监听,默认 127.0.0.1:8765
LogWebAllowTest bool // 是否允许 Web 触发测试 sync
}
// Load 读取环境变量;未设置时使用默认值。
func Load() Config {
return Config{
XkAPIBaseURL: env("XK_API_BASE_URL", "https://api.xiaokang88.com"),
XkAPIToken: env("XK_API_TOKEN", ""),
HyAppKey: env("HY_APP_KEY", ""),
HyAppSecret: env("HY_APP_SECRET", ""),
HyAesKey: env("HY_AES_KEY", ""),
ForwardBaseURL: strings.TrimRight(env("FORWARD_BASE_URL", "http://127.0.0.1:8080"), "/"),
ForwardSharedSecret: env("FORWARD_SHARED_SECRET", ""),
FileUploadViaForward: envBool("FILE_UPLOAD_VIA_FORWARD", true),
MySQLDSN: env("MYSQL_DSN", "root:password@tcp(127.0.0.1:3306)/xk_hy_transit?parseTime=true&charset=utf8mb4"),
AnchorOffsetDays: envInt("ANCHOR_OFFSET_DAYS", 1),
XkAPICallbackPath: env("XK_API_CALLBACK_PATH", "/api/hy/transit/batch/callback"),
CronExpr: env("CRON_EXPR", "*/2 * * * *"),
ScheduleTime: env("SCHEDULE_TIME", ""),
ChromePath: env("CHROME_PATH", ""),
FileUploadInsecureSkipVerify: envBool("FILE_UPLOAD_INSECURE_SKIP_VERIFY", true),
LogWebAddr: env("LOG_WEB_ADDR", ":8765"),
LogWebAllowTest: envBool("LOG_WEB_ALLOW_TEST", true),
}
}
func envBool(key string, def bool) bool {
v := strings.TrimSpace(strings.ToLower(os.Getenv(key)))
if v == "" {
return def
}
switch v {
case "1", "true", "yes", "on":
return true
case "0", "false", "no", "off":
return false
default:
return def
}
}
func env(key, def string) string {
if v := strings.TrimSpace(os.Getenv(key)); v != "" {
return v
}
return def
}
func envInt(key string, def int) int {
v := strings.TrimSpace(os.Getenv(key))
if v == "" {
return def
}
n, err := strconv.Atoi(v)
if err != nil {
return def
}
return n
}