From 0c5beddebe8c224753020fe732e768894d5329db Mon Sep 17 00:00:00 2001 From: kyx236 Date: Sun, 1 Feb 2026 07:18:38 +0800 Subject: [PATCH] feat: Add API endpoint for team registration execution. --- backend/internal/api/team_reg_exec.go | 67 +++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 9 deletions(-) diff --git a/backend/internal/api/team_reg_exec.go b/backend/internal/api/team_reg_exec.go index e5b5367..c251aaa 100644 --- a/backend/internal/api/team_reg_exec.go +++ b/backend/internal/api/team_reg_exec.go @@ -415,6 +415,24 @@ func readOutput(reader io.Reader, workDir string, config TeamRegConfig) { if trimmed != "" { addTeamRegLog(trimmed) + // 检测输出文件名(例如:结果已保存到: accounts-2-20260201-071558.json) + if strings.Contains(trimmed, "结果已保存到") || strings.Contains(trimmed, "accounts-") && strings.Contains(trimmed, ".json") { + // 尝试提取文件名 + if idx := strings.Index(trimmed, "accounts-"); idx >= 0 { + endIdx := strings.Index(trimmed[idx:], ".json") + if endIdx > 0 { + fileName := trimmed[idx : idx+endIdx+5] // 包含 .json + // 构建完整路径 + fullPath := filepath.Join(workDir, fileName) + if _, err := os.Stat(fullPath); err == nil { + teamRegState.mu.Lock() + teamRegState.OutputFile = fullPath + teamRegState.mu.Unlock() + } + } + } + } + // 检测 403 错误 if strings.Contains(trimmed, "403") { if check403AndStop() { @@ -539,17 +557,47 @@ func findTeamRegExecutable() string { } // findLatestOutputFile 查找最新的输出文件 -func findLatestOutputFile(dir string) string { - pattern := filepath.Join(dir, "accounts-*.json") - matches, err := filepath.Glob(pattern) - if err != nil || len(matches) == 0 { +func findLatestOutputFile(primaryDir string) string { + // 搜索多个可能的目录 + cwd, _ := os.Getwd() + searchDirs := []string{ + primaryDir, + cwd, + "/app", + "/app/data", + filepath.Join(cwd, "data"), + ".", + } + + var allMatches []string + for _, dir := range searchDirs { + pattern := filepath.Join(dir, "accounts-*.json") + matches, err := filepath.Glob(pattern) + if err == nil && len(matches) > 0 { + allMatches = append(allMatches, matches...) + } + } + + if len(allMatches) == 0 { + addTeamRegLog(fmt.Sprintf("[调试] 未找到 accounts-*.json,搜索目录: %v", searchDirs)) return "" } + // 去重 + uniqueMatches := make(map[string]bool) + var finalMatches []string + for _, m := range allMatches { + absPath, _ := filepath.Abs(m) + if !uniqueMatches[absPath] { + uniqueMatches[absPath] = true + finalMatches = append(finalMatches, absPath) + } + } + // 按修改时间排序,取最新的 - sort.Slice(matches, func(i, j int) bool { - fi, _ := os.Stat(matches[i]) - fj, _ := os.Stat(matches[j]) + sort.Slice(finalMatches, func(i, j int) bool { + fi, _ := os.Stat(finalMatches[i]) + fj, _ := os.Stat(finalMatches[j]) if fi == nil || fj == nil { return false } @@ -557,15 +605,16 @@ func findLatestOutputFile(dir string) string { }) // 确保是最近创建的文件(5分钟内) - fi, err := os.Stat(matches[0]) + fi, err := os.Stat(finalMatches[0]) if err != nil { return "" } if time.Since(fi.ModTime()) > 5*time.Minute { + addTeamRegLog(fmt.Sprintf("[调试] 找到文件但太旧: %s (修改于 %v 前)", finalMatches[0], time.Since(fi.ModTime()))) return "" } - return matches[0] + return finalMatches[0] } // TeamRegAccount team-reg 输出的账号格式