client: Windows 客户端(WinUI3 壳 + agent-core;调试用 Electron 壳存档);localserver token 改为常数时间比较

This commit is contained in:
Qiufeng
2026-08-20 20:38:21 +08:00
parent 33b7d57498
commit 9abf7f8213
60 changed files with 10025 additions and 0 deletions
+87
View File
@@ -0,0 +1,87 @@
package exec
import (
"context"
"sync"
"everypublish/shared/proto"
)
// Task 执行任务(由 task.push 转换而来)
type Task struct {
TaskID string
Platform string
AccountID string
AccountName string
Title string
Content string
Tags []string
MaterialURLs []string
ScheduleAt int64
Priority int
}
// Result 执行结果(回传 task.result)
type Result struct {
TaskID string
Status string
PublishedURL string
Receipts []string
Error string
}
// Executor 平台执行器(每个平台一个实现;D10 起接入真实平台)
type Executor interface {
Platform() string
Execute(ctx context.Context, task Task) Result
}
// ChallengeSolver 能自动完成挑战的平台执行器(扫码/验证码)。
// onQR:平台生成二维码时回调(把 qrToken/qrUrl 推给壳展示,可为 nil)。
type ChallengeSolver interface {
SolveChallenge(ctx context.Context, ch proto.Challenge, onQR func(qrToken, qrURL string)) (solved bool, value string)
}
// Registry 执行器注册表(并发安全)
type Registry struct {
mu sync.RWMutex
m map[string]Executor
fallback Executor
}
// NewRegistry 创建注册表
func NewRegistry() *Registry {
return &Registry{m: make(map[string]Executor)}
}
// Register 注册平台执行器
func (r *Registry) Register(e Executor) {
r.mu.Lock()
defer r.mu.Unlock()
r.m[e.Platform()] = e
}
// SetFallback 注册兜底执行器(未接入平台用)
func (r *Registry) SetFallback(e Executor) {
r.mu.Lock()
defer r.mu.Unlock()
r.fallback = e
}
// Get 取执行器(无匹配返回 nil)
func (r *Registry) Get(platform string) Executor {
r.mu.RLock()
defer r.mu.RUnlock()
if e, ok := r.m[platform]; ok {
return e
}
return r.fallback
}
// Solve 取挑战解决器(nil 表示不支持自动解决)
func (r *Registry) Solve(platform string) ChallengeSolver {
if s, ok := r.Get(platform).(ChallengeSolver); ok {
return s
}
return nil
}