Skip to content

Commit a9ad934

Browse files
committed
rebase and changes
Signed-off-by: Vedansh Saini <[email protected]>
1 parent e3cee1a commit a9ad934

File tree

4 files changed

+64
-4
lines changed

4 files changed

+64
-4
lines changed

src/popup.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ <h6 class="text-base font-semibold">Scrum Report</h6>
112112
<div id="settingsSection" class="tab-content hidden">
113113

114114
<div class="">
115+
<div>
116+
<h4>Your Github Token</h4>
117+
<input id="githubToken" type="text" class="w-full border-2 border-gray-200 bg-gray-200 rounded-xl text-gray-800 p-2 my-2" placeholder="Required for making authenticated requests">
118+
</div>
115119
<p class="text-sm font-medium">Enter cache TTL <span class="text-sm text-gray-800 font-normal">(in minutes)</span>
116120
<span class="tooltip-container">
117121
<i class="fa fa-question-circle question-icon"></i>

src/scripts/main.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
let enableToggleElement = document.getElementById('enable');
22
let githubUsernameElement = document.getElementById('githubUsername');
3+
let githubTokenElement = document.getElementById('githubToken');
34
let cacheInputElement = document.getElementById('cacheInput');
45
let projectNameElement = document.getElementById('projectName');
56
let lastWeekContributionElement = document.getElementById('lastWeekContribution');
@@ -23,11 +24,15 @@ function handleBodyOnLoad() {
2324
'lastWeekContribution',
2425
'yesterdayContribution',
2526
'cacheInput',
27+
'githubToken',
2628
],
2729
(items) => {
2830
if (items.githubUsername) {
2931
githubUsernameElement.value = items.githubUsername;
3032
}
33+
if (items.githubToken) {
34+
githubTokenElement.value = items.githubToken;
35+
}
3136
if (items.projectName) {
3237
projectNameElement.value = items.projectName;
3338
}
@@ -206,6 +211,10 @@ function handleGithubUsernameChange() {
206211
let value = githubUsernameElement.value;
207212
chrome.storage.local.set({ githubUsername: value });
208213
}
214+
function handleGithubTokenChange() {
215+
let value = githubTokenElement.value;
216+
chrome.storage.local.set({ githubToken: value });
217+
}
209218
function handleProjectNameChange() {
210219
let value = projectNameElement.value;
211220
chrome.storage.local.set({ projectName: value });
@@ -235,6 +244,7 @@ function handleUserReasonChange() {
235244
}
236245
enableToggleElement.addEventListener('change', handleEnableChange);
237246
githubUsernameElement.addEventListener('keyup', handleGithubUsernameChange);
247+
githubTokenElement.addEventListener('keyup', handleGithubTokenChange);
238248
cacheInputElement.addEventListener('keyup', handleCacheInputChange);
239249
projectNameElement.addEventListener('keyup', handleProjectNameChange);
240250
startingDateElement.addEventListener('change', handleStartingDateChange);

src/scripts/popup.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ document.addEventListener('DOMContentLoaded', function() {
8080
'showOpenLabel',
8181
'scrumReport',
8282
'githubUsername',
83+
'githubToken',
8384
'projectName',
8485
'settingsToggle',
8586
];

src/scripts/scrumHelper.js

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ function allIncluded(outputTarget = 'email') {
1010
let startingDate = '';
1111
let endingDate = '';
1212
let githubUsername = '';
13+
let githubToken = '';
1314
let projectName = '';
1415
let lastWeekArray = [];
1516
let nextWeekArray = [];
@@ -40,6 +41,7 @@ function allIncluded(outputTarget = 'email') {
4041
chrome.storage.local.get(
4142
[
4243
'githubUsername',
44+
'githubToken',
4345
'projectName',
4446
'enableToggle',
4547
'startingDate',
@@ -100,6 +102,9 @@ function allIncluded(outputTarget = 'email') {
100102
if (items.projectName) {
101103
projectName = items.projectName;
102104
}
105+
if(items.githubToken){
106+
githubToken = items.githubToken;
107+
}
103108
if (items.cacheInput) {
104109
cacheInput = items.cacheInput;
105110
}
@@ -334,6 +339,18 @@ function allIncluded(outputTarget = 'email') {
334339
githubCache.fetching = true;
335340
githubCache.cacheKey = cacheKey;
336341

342+
const headers = {
343+
'Accept' : 'application/vnd.github.v3+json',
344+
};
345+
346+
if(githubToken) {
347+
log('Making authenticated requests.');
348+
headers['Authorization'] = `token ${githubToken}`;
349+
350+
} else {
351+
log('Making public requests');
352+
}
353+
337354
let issueUrl = `https://api.github.com/search/issues?q=author%3A${githubUsername}+org%3Afossasia+created%3A${startingDate}..${endingDate}&per_page=100`;
338355
let prUrl = `https://api.github.com/search/issues?q=commenter%3A${githubUsername}+org%3Afossasia+updated%3A${startingDate}..${endingDate}&per_page=100`;
339356
let userUrl = `https://api.github.com/users/${githubUsername}`;
@@ -343,11 +360,17 @@ function allIncluded(outputTarget = 'email') {
343360
await new Promise(res => setTimeout(res, 500));
344361

345362
const [issuesRes, prRes, userRes ] = await Promise.all([
346-
fetch(issueUrl),
347-
fetch(prUrl),
348-
fetch(userUrl),
363+
fetch(issueUrl, { headers }),
364+
fetch(prUrl, { headers }),
365+
fetch(userUrl, { headers }),
349366
]);
350367

368+
if (issuesRes.status === 401 || prRes.status === 401 || userRes.status === 401 ||
369+
issuesRes.status === 403 || prRes.status === 403 || userRes.status === 403) {
370+
showInvalidTokenMessage();
371+
return;
372+
}
373+
351374
if(!issuesRes.ok) throw new Error(`Error fetching Github issues: ${issuesRes.status} ${issuesRes.statusText}`);
352375
if(!prRes.ok) throw new Error(`Error fetching Github PR review data: ${prRes.status} ${prRes.statusText}`);
353376
if(!userRes.ok) throw new Error(`Error fetching Github userdata: ${userRes.status} ${userRes.statusText}`);
@@ -372,6 +395,14 @@ function allIncluded(outputTarget = 'email') {
372395
githubCache.queue.forEach(({ reject }) => reject(err));
373396
githubCache.queue = [];
374397
githubCache.fetching = false;
398+
399+
if(outputTarget === 'popup') {
400+
const generateBtn = document.getElementById('generateReport');
401+
if(generateBtn) {
402+
generateBtn.innerHTML = '<i class="fa fa-refresh"></i> Generate Report';
403+
generateBtn.disabled = false;
404+
}
405+
}
375406
throw err;
376407
} finally {
377408
githubCache.fetching = false;
@@ -399,7 +430,21 @@ function allIncluded(outputTarget = 'email') {
399430
}
400431
verifyCacheStatus();
401432

402-
433+
function showInvalidTokenMessage() {
434+
if(outputTarget === 'popup') {
435+
const reportDiv = document.getElementById('scrumReport');
436+
if(reportDiv){
437+
reportDiv.innerHTML = '<div class="error-message" style="color: #dc2626; font-weight: bold; padding: 10px;">Invalid or expired GitHub token. Please check your token in the settings and try again.</div>';
438+
const generateBtn = document.getElementById('generateReport');
439+
if (generateBtn) {
440+
generateBtn.innerHTML = '<i class="fa fa-refresh"></i> Generate Report';
441+
generateBtn.disabled = false;
442+
}
443+
} else {
444+
alert('Invalid or expired GitHub token. Please check your token in the extension popup and try again.');
445+
}
446+
}
447+
}
403448

404449
function processGithubData(data) {
405450
log('Processing Github data');

0 commit comments

Comments
 (0)