58 lines
2.7 KiB
Go
Executable File
58 lines
2.7 KiB
Go
Executable File
// Package upstream 上游对接方管理:多商户(易支付 pid+key)独立加密存储
|
|
//
|
|
// 安全设计:
|
|
// - upstreams.db 仅管理后台 API 可读写,其他模块不得直接访问
|
|
// - 敏感字段(易支付密钥 key)AES-256-GCM 加密存储(复用 account 包的加密能力)
|
|
// - UpstreamPool 是内存中的唯一数据源,其他模块(epay 验签/回调签名)通过它获取解密后的密钥
|
|
// - 每个上游独立 pid + key:下单验签、回调签名均按 pid 路由,互不伪造
|
|
package upstream
|
|
|
|
import "time"
|
|
|
|
// UpstreamStatus 上游状态
|
|
type UpstreamStatus string
|
|
|
|
const (
|
|
StatusEnabled UpstreamStatus = "enabled" // 启用:可下单、可回调
|
|
StatusDisabled UpstreamStatus = "disabled" // 禁用:拒绝下单
|
|
)
|
|
|
|
// Upstream 上游对接方(内存中的完整表示,含解密后的密钥)
|
|
// upstreams.db 中存储的是加密版本,Admin API 解密后推送到 UpstreamPool
|
|
type Upstream struct {
|
|
ID int64 `json:"id"`
|
|
Name string `json:"name"` // 上游名称:"new-api"
|
|
Pid string `json:"pid"` // 易支付商户ID(验签/签名依据,唯一)
|
|
Key string `json:"-"` // 易支付密钥(仅内存,不落盘明文)
|
|
BaseURL string `json:"base_url"` // 对外服务地址(该上游配置用的地址)
|
|
NotifyDomains string `json:"notify_domains"` // 回调目标域名白名单(逗号分隔,可选)
|
|
Status UpstreamStatus `json:"status"` // enabled / disabled
|
|
Remark string `json:"remark,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// UpstreamEncrypted upstreams.db 中存储的加密版本
|
|
type UpstreamEncrypted struct {
|
|
ID int64 `json:"id"`
|
|
Name string `json:"name"`
|
|
Pid string `json:"pid"`
|
|
KeyEnc string `json:"key_enc"` // AES-256-GCM 加密后的 hex 密文
|
|
BaseURL string `json:"base_url"`
|
|
NotifyDomains string `json:"notify_domains"`
|
|
Status string `json:"status"`
|
|
Remark string `json:"remark,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// UpstreamLog 上游操作审计日志
|
|
type UpstreamLog struct {
|
|
ID int64 `json:"id"`
|
|
UpstreamID int64 `json:"upstream_id"`
|
|
Action string `json:"action"` // create / update / delete / enable / disable
|
|
Detail string `json:"detail"` // 操作详情
|
|
Operator string `json:"operator"` // 操作人
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|