client: Windows 客户端(WinUI3 壳 + agent-core;调试用 Electron 壳存档);localserver token 改为常数时间比较
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user