package main import ( "context" "encoding/json" "fmt" "os" "strings" "time" "updata_hfb/internal/hfb" ) const sampleText = `上号方式:QQ扫码 哈夫币纯币:156 段位:铂金 等级:60 保险格数:9 每日消耗:10 体力:7 负重:7 AWM子弹数量:80 6头数量:13 6甲数量:12 皮肤:暗星 绝密KD:0.2 押金:350 号主在线时间:11:00 至 00:00 封禁记录:无 常用地区:海南 回收比例:1:47.0 回收租金:332 联系电话:15203616450` type App struct { ctx context.Context } type DefaultSettings struct { Server string `json:"server"` Uploader string `json:"uploader"` Secret string `json:"secret"` Timeout string `json:"timeout"` SourceChannel string `json:"sourceChannel"` } type UploadForm struct { Server string `json:"server"` Uploader string `json:"uploader"` Secret string `json:"secret"` Timeout string `json:"timeout"` SourceChannel string `json:"sourceChannel"` Data string `json:"data"` } func NewApp() *App { return &App{} } func (a *App) startup(ctx context.Context) { a.ctx = ctx } func (a *App) DefaultSettings() DefaultSettings { return DefaultSettings{ Server: envDefault("HFB_SERVER", "http://127.0.0.1:8080"), Uploader: strings.TrimSpace(os.Getenv("HFB_UPLOADER_NAME")), Secret: strings.TrimSpace(os.Getenv("HFB_UPLOAD_SECRET")), Timeout: "15s", SourceChannel: strings.TrimSpace(os.Getenv("HFB_SOURCE_CHANNEL")), } } func (a *App) SampleText() string { return sampleText } func (a *App) Preview(form UploadForm) (string, error) { req, err := buildUploadRequest(form) if err != nil { return "", err } out, err := hfb.MarshalPretty(req) if err != nil { return "", fmt.Errorf("生成 JSON 失败:%w", err) } return string(out), nil } func (a *App) Upload(form UploadForm) (string, error) { timeout, err := parseTimeout(form.Timeout) if err != nil { return "", err } req, err := buildUploadRequest(form) if err != nil { return "", err } ctx := a.ctx if ctx == nil { ctx = context.Background() } ctx, cancel := context.WithTimeout(ctx, timeout) defer cancel() resp, err := hfb.Client{ Server: strings.TrimSpace(form.Server), Secret: strings.TrimSpace(form.Secret), Timeout: timeout, }.Upload(ctx, req) if err != nil { return "", err } return formatDisplayJSON(resp), nil } func buildUploadRequest(form UploadForm) (hfb.ExternalUploadRequest, error) { if strings.TrimSpace(form.Data) == "" { return hfb.ExternalUploadRequest{}, fmt.Errorf("账号数据不能为空") } parsed, err := hfb.ParseUploadText(form.Data) if err != nil { return hfb.ExternalUploadRequest{}, err } uploaderName := strings.TrimSpace(form.Uploader) if uploaderName == "" { uploaderName = parsed.UploaderName } if uploaderName == "" { return hfb.ExternalUploadRequest{}, fmt.Errorf("缺少上传人名称:请展开“连接配置”填写上传人,或在文本中增加“上传人:姓名”") } sourceChannel := strings.TrimSpace(form.SourceChannel) if sourceChannel == "" { return hfb.ExternalUploadRequest{}, fmt.Errorf("请选择订单来源渠道") } return hfb.NewExternalUploadRequest(uploaderName, sourceChannel, parsed.Account, time.Now()), nil } func parseTimeout(raw string) (time.Duration, error) { raw = strings.TrimSpace(raw) if raw == "" { raw = "15s" } timeout, err := time.ParseDuration(raw) if err != nil || timeout <= 0 { return 0, fmt.Errorf("请求超时时间不正确:%s", raw) } return timeout, nil } func formatDisplayJSON(text string) string { text = strings.TrimSpace(text) if text == "" { return "服务器未返回内容" } var payload any if err := json.Unmarshal([]byte(text), &payload); err != nil { return text } pretty, err := json.MarshalIndent(payload, "", " ") if err != nil { return text } return string(pretty) } func envDefault(key string, fallback string) string { value := strings.TrimSpace(os.Getenv(key)) if value == "" { return fallback } return value }