Upload githubService.js
Browse files
backend/src/services/githubService.js
CHANGED
@@ -9,11 +9,58 @@ class GitHubService {
|
|
9 |
this.repositories = GITHUB_CONFIG.repositories;
|
10 |
this.useMemoryStorage = !this.token; // 如果没有token,使用内存存储
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
if (!this.token) {
|
13 |
console.warn('GitHub token not configured, using memory storage for development');
|
14 |
}
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
// 获取仓库信息
|
18 |
parseRepoUrl(repoUrl) {
|
19 |
const match = repoUrl.match(/github\.com\/([^\/]+)\/([^\/]+)/);
|
|
|
9 |
this.repositories = GITHUB_CONFIG.repositories;
|
10 |
this.useMemoryStorage = !this.token; // 如果没有token,使用内存存储
|
11 |
|
12 |
+
console.log('=== GitHub Service Configuration ===');
|
13 |
+
console.log('Token configured:', !!this.token);
|
14 |
+
console.log('Token preview:', this.token ? `${this.token.substring(0, 8)}...` : 'Not set');
|
15 |
+
console.log('Repositories:', this.repositories);
|
16 |
+
console.log('Using memory storage:', this.useMemoryStorage);
|
17 |
+
|
18 |
if (!this.token) {
|
19 |
console.warn('GitHub token not configured, using memory storage for development');
|
20 |
}
|
21 |
}
|
22 |
|
23 |
+
// 验证GitHub连接
|
24 |
+
async validateConnection() {
|
25 |
+
if (this.useMemoryStorage) {
|
26 |
+
return { valid: false, reason: 'No GitHub token configured' };
|
27 |
+
}
|
28 |
+
|
29 |
+
try {
|
30 |
+
// 测试GitHub API连接
|
31 |
+
const response = await axios.get(`${this.apiUrl}/user`, {
|
32 |
+
headers: {
|
33 |
+
'Authorization': `token ${this.token}`,
|
34 |
+
'Accept': 'application/vnd.github.v3+json'
|
35 |
+
}
|
36 |
+
});
|
37 |
+
|
38 |
+
console.log('GitHub API connection successful:', response.data.login);
|
39 |
+
|
40 |
+
// 测试仓库访问
|
41 |
+
const repoResults = [];
|
42 |
+
for (const repoUrl of this.repositories) {
|
43 |
+
try {
|
44 |
+
const { owner, repo } = this.parseRepoUrl(repoUrl);
|
45 |
+
const repoResponse = await axios.get(`${this.apiUrl}/repos/${owner}/${repo}`, {
|
46 |
+
headers: {
|
47 |
+
'Authorization': `token ${this.token}`,
|
48 |
+
'Accept': 'application/vnd.github.v3+json'
|
49 |
+
}
|
50 |
+
});
|
51 |
+
repoResults.push({ url: repoUrl, accessible: true, name: repoResponse.data.full_name });
|
52 |
+
} catch (error) {
|
53 |
+
repoResults.push({ url: repoUrl, accessible: false, error: error.message });
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
return { valid: true, user: response.data.login, repositories: repoResults };
|
58 |
+
} catch (error) {
|
59 |
+
console.error('GitHub connection validation failed:', error.message);
|
60 |
+
return { valid: false, reason: error.message };
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
// 获取仓库信息
|
65 |
parseRepoUrl(repoUrl) {
|
66 |
const match = repoUrl.match(/github\.com\/([^\/]+)\/([^\/]+)/);
|