Skip to content

Commit 6fdd7cd

Browse files
committed
[Add] add users github tokens
1 parent 244ea5b commit 6fdd7cd

File tree

1 file changed

+34
-44
lines changed

1 file changed

+34
-44
lines changed

Diff for: src/theme/CodeBlock/index.js

+34-44
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@ function maybeStringifyChildren(children) {
1717
return Array.isArray(children) ? children.join("") : children;
1818
}
1919

20+
2021
export default function CodeBlock({ children: rawChildren, ...props }) {
2122
const [codes, setCodes] = useState([]); // 코드를 담을 상태
2223
const [names, setNames] = useState([]);
2324
const [members, setMembers] = useState([]);
2425

2526
const axios = require('axios');
2627

27-
const fetchMembers = async (org = "Code-Study", token = null) => {
28+
const fetchMembers = async (org = "Code-Study") => {
2829
try {
30+
const token = localStorage.getItem('githubToken');
2931
const options = token
3032
? {
3133
headers: { Authorization: `Bearer ${token}` },
@@ -40,63 +42,51 @@ export default function CodeBlock({ children: rawChildren, ...props }) {
4042
setMembers(members)
4143
return members;
4244
} catch (error) {
43-
console.error('Error fetching organization members:', error);
44-
}
45-
};
46-
47-
const getRepositoryContents = async (owner, repo, path = '') => {
48-
try {
49-
const response = await axios.get(`https://api.github.com/repos/${owner}/${repo}/contents/${path}`);
50-
return response.data;
51-
} catch (error) {
52-
console.error('Error fetching repository contents:', error);
53-
return [];
54-
}
55-
};
56-
57-
const getFilesRecursively = async (owner, repo, path = '') => {
58-
let files = [];
59-
const contents = await getRepositoryContents(owner, repo, path);
60-
61-
for (const content of contents) {
62-
if (content.type === 'file') {
63-
// 파일인 경우 목록에 추가
64-
files.push(content.path);
65-
} else if (content.type === 'dir') {
66-
// 폴더인 경우 재귀적으로 해당 폴더의 파일을 가져옴
67-
const subFiles = await getFilesRecursively(owner, repo, content.path);
68-
files = files.concat(subFiles);
45+
if (error.response && error.response.status === 403) {
46+
console.error('Error: 403 Forbidden. A token is required.');
47+
48+
const userToken = prompt('Access denied. Please provide a valid GitHub personal access token:');
49+
50+
if (userToken) {
51+
localStorage.setItem('githubToken', userToken);
52+
return await fetchMembers(org);
53+
} else {
54+
console.error('No token provided. Unable to access the file.');
55+
return null;
56+
}
57+
} else {
58+
console.error('Error fetching file content:', error);
59+
return null;
6960
}
70-
}
71-
return files;
61+
}
7262
};
7363

7464
const getRepositoryFileContent = async (owner, repo, path) => {
7565
try {
76-
const response = await axios.get(`https://api.github.com/repos/${owner}/${repo}/contents/${path}`);
66+
const token = localStorage.getItem('githubToken');
67+
const options = token
68+
? {
69+
headers: { Authorization: `Bearer ${token}` },
70+
params: { filter: 'all' },
71+
}
72+
: {};
73+
const response = await axios.get(`https://api.github.com/repos/${owner}/${repo}/contents/${path}`, options);
7774
const content = decodeURIComponent(escape(window.atob(response.data.content))); // 디코딩
7875
return content;
7976
} catch (error) {
80-
console.error('Error fetching file content:', error);
81-
return null;
77+
if (error.response && error.response.status === 403) {
78+
console.error('Error: 403 Forbidden. A token is required.');
79+
} else {
80+
console.error('Error fetching file content:', error);
81+
return null;
82+
}
8283
}
8384
};
8485

8586
const fetchCodes = async () => {
8687
try {
87-
// const pattern = /^[a-zA-Z]+-[a-zA-Z]+\/\d+\/\d+\/\d+$/;
88-
// const pattern = /^[a-zA-Z]+-[a-zA-Z]+\/[a-zA-Z]+-\d+\/\d+-[a-zA-Z]+-[a-zA-Z]+\/\d+$/;
89-
const pattern = /^(leet-code|novice-high)\/.+\/.+\/.+$/;
88+
const pattern = /^\d{4}-/;
9089
if ((pattern.test(props.metastring) === true) && (props.className === "language-python")) {
91-
const contents = await getFilesRecursively('Code-Study', 'Code', props.metastring);
92-
const codePromises = contents.map(element =>
93-
getRepositoryFileContent('Code-Study', 'Code', element)
94-
);
95-
const codeContents = await Promise.all(codePromises);
96-
setCodes(codeContents);
97-
//console.log(contents.map(elem => elem.split('/').pop().split('.')[0]));
98-
setNames(contents.map(elem => elem.split('/').pop().split('.')[0]));
99-
} else {
10090
const memberContents = await fetchMembers('Code-Study');
10191
const fileName = props.metastring+'/'+props.metastring+'.py'
10292
memberContents.map(async member => {

0 commit comments

Comments
 (0)