feat: add Codex API authentication module with TLS fingerprinting and PoW solving, and introduce team processing API.

This commit is contained in:
2026-02-03 07:48:06 +08:00
parent a4aed8890f
commit 33289b633d
2 changed files with 13 additions and 7 deletions

View File

@@ -593,7 +593,13 @@ func processSingleTeam(idx int, req TeamProcessRequest) (result TeamProcessResul
s2aSem <- struct{}{} s2aSem <- struct{}{}
defer func() { <-s2aSem }() defer func() { <-s2aSem }()
logger.Status(fmt.Sprintf("%s 入库中... | 邮箱: %s", memberLogPrefix, memberEmail), memberEmail, "team") // 解析代理
proxyToUse := database.Instance.ResolveProxy(req.Proxy)
proxyDisplay := "无代理"
if proxyToUse != "" {
proxyDisplay = getProxyDisplay(proxyToUse)
}
logger.Status(fmt.Sprintf("%s 入库中... | 邮箱: %s | 代理: %s", memberLogPrefix, memberEmail, proxyDisplay), memberEmail, "team")
var s2aSuccess bool var s2aSuccess bool
var lastError string var lastError string
@@ -633,12 +639,8 @@ func processSingleTeam(idx int, req TeamProcessRequest) (result TeamProcessResul
// 根据配置选择授权方式 // 根据配置选择授权方式
var code string var code string
if config.Global.AuthMethod == "api" { if config.Global.AuthMethod == "api" {
proxyToUse := database.Instance.ResolveProxy(req.Proxy)
if proxyToUse != req.Proxy && proxyToUse != "" {
logger.Info(fmt.Sprintf("%s 使用解析代理: %s", memberLogPrefix, getProxyDisplay(proxyToUse)), memberEmail, "team")
}
code, err = auth.CompleteWithCodexAPI(memberEmail, memberPassword, teamID, s2aResp.Data.AuthURL, s2aResp.Data.SessionID, proxyToUse, authLogger) code, err = auth.CompleteWithCodexAPI(memberEmail, memberPassword, teamID, s2aResp.Data.AuthURL, s2aResp.Data.SessionID, proxyToUse, authLogger)
if proxyToUse != req.Proxy && proxyToUse != "" { if proxyToUse != "" {
database.Instance.UpdateCodexProxyStats(proxyToUse, err == nil) database.Instance.UpdateCodexProxyStats(proxyToUse, err == nil)
} }
} else { } else {

View File

@@ -622,7 +622,11 @@ func min(a, b int) int {
// authURL 和 sessionID 由 S2A 生成 // authURL 和 sessionID 由 S2A 生成
func CompleteWithCodexAPI(email, password, workspaceID, authURL, sessionID, proxy string, logger *AuthLogger) (string, error) { func CompleteWithCodexAPI(email, password, workspaceID, authURL, sessionID, proxy string, logger *AuthLogger) (string, error) {
if logger != nil { if logger != nil {
logger.LogStep(StepBrowserStart, "使用 CodexAuth API 模式...") if proxy != "" {
logger.LogStep(StepBrowserStart, "使用 CodexAuth API 模式 (代理: %s)", proxy)
} else {
logger.LogStep(StepBrowserStart, "使用 CodexAuth API 模式 (无代理)")
}
} }
auth, err := NewCodexAPIAuth(email, password, workspaceID, authURL, sessionID, proxy, logger) auth, err := NewCodexAPIAuth(email, password, workspaceID, authURL, sessionID, proxy, logger)