Skip to content

Commit 4db0b66

Browse files
committed
updated server, added support for github personal access tokens, updated deps
1 parent f8eea4f commit 4db0b66

6 files changed

Lines changed: 73 additions & 66 deletions

File tree

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ export GHUSER=[userName]
3939
export GHPASS=[userPassword]
4040
```
4141

42+
Alternatively, use a github [personal access token](https://github.com/settings/tokens)
43+
44+
```
45+
export GHTOKEN=[userToken]
46+
```
47+
4248
## Production
4349

4450
It is better to use PM2 to launch your instance in production. More info [here](https://www.digitalocean.com/community/articles/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps).

config/configuration.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ module.exports = {
5151
port: process.env.PORT || default_port,
5252
user: process.env.GHUSER,
5353
pass: process.env.GHPASS,
54+
token: process.env.GHTOKEN,
5455
crossOrigin: crossOrigin,
5556
dir: dir,
5657
errorLog: errorLog,

lib/server-adobe-github/github.js

Lines changed: 55 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,17 @@ function resetTemp(time) {
3737

3838
function doGithubCall(path, callback) {
3939
var options = {
40-
url: 'https://api.github.com'+path,
41-
headers: {
42-
'User-Agent': 'adobe.github.com'
43-
}
40+
url: 'https://api.github.com' + path,
41+
headers: {
42+
'User-Agent': 'adobe.github.com'
43+
}
4444
};
4545

46-
if (config.user && config.pass) {
46+
if(config.token) {
47+
options.headers.Authorization = `token ${config.token}`;
48+
}
49+
50+
if ((config.user && config.pass) && !config.token) {
4751
request(options, callback).auth(config.user, config.pass);
4852
} else {
4953
request(options, callback);
@@ -53,16 +57,16 @@ function doGithubCall(path, callback) {
5357
function getOrgInfos(org, callback) {
5458
var infosUrl = '/orgs/' + org.userName;
5559

56-
var reqInfos = doGithubCall(infosUrl, function(err, res, obj) {
60+
var reqInfos = doGithubCall(infosUrl, function (err, res, obj) {
5761
if (!err && res.statusCode == 200) {
5862
var info = JSON.parse(obj);
5963
org = updateOrg(info);
6064

6165
var reposUrl = '/users/' + org.userName + '/repos?sort=updated';
62-
var reqRepos = doGithubCall(reposUrl, function(err, res, obj) {
66+
var reqRepos = doGithubCall(reposUrl, function (err, res, obj) {
6367
if (!err && res.statusCode == 200) {
6468
var info = JSON.parse(obj);
65-
callback(null, info);
69+
callback(null, info);
6670
} else {
6771
config.errorLog(infosUrl, res, err);
6872
}
@@ -79,7 +83,7 @@ function getOrgFullName(orgName) {
7983
// Get real org name
8084
for (var i = 0; i < ghDatas.orgs.length; i++) {
8185
var org = ghDatas.orgs[i];
82-
if(org.userName.toLowerCase() === orgName.toLowerCase()) {
86+
if (org.userName.toLowerCase() === orgName.toLowerCase()) {
8387
orgFullName = org.name;
8488
return orgFullName;
8589
}
@@ -91,7 +95,7 @@ function getOrgFullName(orgName) {
9195
function updateOrg(obj) {
9296
for (var i = 0; i < ghDatas.orgs.length; i++) {
9397
var org = ghDatas.orgs[i];
94-
if(org.userName.toLowerCase() === obj.login.toLowerCase()) {
98+
if (org.userName.toLowerCase() === obj.login.toLowerCase()) {
9599
org.avatar_url = obj.avatar_url;
96100
org.blog = obj.blog;
97101
org.public_repos = obj.public_repos;
@@ -106,19 +110,19 @@ function updateOrg(obj) {
106110
function getReposLang(repo, callback) {
107111
var langUrl = repo.languages_url.substring(22);;
108112

109-
var req = doGithubCall(langUrl, function(err, res, obj) {
113+
var req = doGithubCall(langUrl, function (err, res, obj) {
110114
if (!err && res.statusCode == 200) {
111115
var info = JSON.parse(obj);
112116

113117
repo.languages = [];//info;
114118
repo.languagesTotal = 0;
115119
for (var key in info) {
116-
repo.languages.push( { name: key, value: info[key] } );
120+
repo.languages.push({ name: key, value: info[key] });
117121
repo.languagesTotal += info[key];
118-
addLanguageTotal( { name: key, value: info[key] } );
122+
addLanguageTotal({ name: key, value: info[key] });
119123
};
120124

121-
callback(null, repo);
125+
callback(null, repo);
122126
} else {
123127
config.errorLog(langUrl, res, err);
124128
}
@@ -127,10 +131,10 @@ function getReposLang(repo, callback) {
127131

128132
function addLanguageTotal(newLang) {
129133
// Get real org name
130-
for (var i=0; i < tempDatas.langs.length; i++) {
134+
for (var i = 0; i < tempDatas.langs.length; i++) {
131135
var lang = tempDatas.langs[i];
132136

133-
if(lang.name === newLang.name) {
137+
if (lang.name === newLang.name) {
134138
lang.value += newLang.value;
135139
return false;
136140
}
@@ -141,42 +145,42 @@ function addLanguageTotal(newLang) {
141145
}
142146

143147
function getAllRepos(orgs, callback) {
144-
async.map(orgs, getOrgInfos, function(err, result) {
148+
async.map(orgs, getOrgInfos, function (err, result) {
145149
// Callback when all answers has been recieved
146150

147151
// Put all the repos in tempDatas array
148-
result.forEach(function(orgRepos) {
149-
orgRepos.forEach(function(repo) {
150-
tempDatas.repos.push({
151-
"name": repo.name,
152-
"watchers_count": repo.watchers_count,
153-
"org": getOrgFullName(repo.owner.login),
154-
"languages": [ repo.language ],
155-
"description": repo.description,
156-
"size": repo.size,
157-
"pushed_at": repo.pushed_at,
158-
"html_url": repo.html_url,
159-
"languages_url": repo.languages_url,
160-
"homepage": repo.homepage
161-
});
162-
});
163-
});
164-
165-
async.map(tempDatas.repos, getReposLang, function(err, result) {
166-
callback();
167-
});
152+
result.forEach(function (orgRepos) {
153+
orgRepos.forEach(function (repo) {
154+
tempDatas.repos.push({
155+
"name": repo.name,
156+
"watchers_count": repo.watchers_count,
157+
"org": getOrgFullName(repo.owner.login),
158+
"languages": [repo.language],
159+
"description": repo.description,
160+
"size": repo.size,
161+
"pushed_at": repo.pushed_at,
162+
"html_url": repo.html_url,
163+
"languages_url": repo.languages_url,
164+
"homepage": repo.homepage
165+
});
166+
});
167+
});
168+
169+
async.map(tempDatas.repos, getReposLang, function (err, result) {
170+
callback();
171+
});
168172
});
169173
}
170174

171175
function getStats() {
172176
var bitesLangCode = 0;
173-
for(var i = 0; i < tempDatas.langs.length; i++) {
177+
for (var i = 0; i < tempDatas.langs.length; i++) {
174178
bitesLangCode += tempDatas.langs[i].value;
175179
}
176180
tempDatas.stats.bitesLangCode = bitesLangCode;
177181

178182
var bitesCode = 0;
179-
for(var i = 0; i < tempDatas.repos.length; i++) {
183+
for (var i = 0; i < tempDatas.repos.length; i++) {
180184
bitesCode += tempDatas.repos[i].size;
181185
}
182186
tempDatas.stats.bitesCode = bitesCode;
@@ -186,7 +190,7 @@ function refreshRepos(callback) {
186190
console.log('refresh_github, ,', (new Date()).toString());
187191
resetTemp(new Date());
188192

189-
orgController.getOrgs(function(orgs) {
193+
orgController.getOrgs(function (orgs) {
190194
tempDatas.orgs = orgs;
191195
ghDatas.orgs = orgs;
192196
getAllRepos(orgs, function () {
@@ -212,36 +216,36 @@ function getRepos(callback) {
212216
var toBeReloaded = (dateToReload < now);
213217

214218
if (toBeReloaded || !ghDatas.lastUpdate) {
215-
refreshRepos(function() {
216-
console.log('updated_man_github,last: ', ghDatas.lastUpdate.toString(),',', (new Date()).toString());
219+
refreshRepos(function () {
220+
console.log('updated_man_github,last: ', ghDatas.lastUpdate.toString(), ',', (new Date()).toString());
217221
});
218222
}
219223

220224
callback([ghDatas]);
221225
} else {
222-
callback([{"error":"Server not yet instantiated. Please reload in a few seconds."}])
226+
callback([{ "error": "Server not yet instantiated. Please reload in a few seconds." }])
223227
}
224228
}
225229

226230
//----------------------------------------------------------
227231
// Init
228232

229233
function startUpdateLoop() {
230-
setInterval(function() {
231-
refreshRepos(function() {
232-
console.log('updated_auto_github,last: ', ghDatas.lastUpdate.toString(),',', (new Date()).toString());
234+
setInterval(function () {
235+
refreshRepos(function () {
236+
console.log('updated_auto_github,last: ', ghDatas.lastUpdate.toString(), ',', (new Date()).toString());
233237
});
234238
}, 600000);
235239
}
236240

237241
try {
238-
refreshRepos(function() {
239-
console.log('started_github, First Init,', (new Date()).toString());
240-
startUpdateLoop();
242+
refreshRepos(function () {
243+
console.log('started_github, First Init,', (new Date()).toString());
244+
startUpdateLoop();
241245
});
242246
}
243-
catch(err) {
244-
console.error('error,', err.message, ' Call: ', err.syscall, ',', (new Date()).toString());
247+
catch (err) {
248+
console.error('error,', err.message, ' Call: ', err.syscall, ',', (new Date()).toString());
245249
};
246250

247251
module.exports = {

package.json

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "server-adobe-github",
3-
"version": "0.1.0",
3+
"version": "0.2.0",
44
"author": "Kim Chouard <kim.chouard@gmail.com>",
55
"scripts": {
66
"start": "node server.js",
@@ -9,24 +9,20 @@
99
"main": "./server",
1010
"repository": {
1111
"type": "git",
12-
"url": "https://github.com/kimchouard/server.adobe.github.com.git"
12+
"url": "https://github.com/adobe/server.adobe.github.com"
1313
},
1414
"dependencies": {
15-
"async": "0.2.x",
16-
"request": "2.26.x",
17-
"restify": "2.6.x",
18-
"newrelic": "1.x.x",
19-
"pm2": "0.7.x"
15+
"async": "^2.0.0",
16+
"request": "^2.26.x",
17+
"restify": "^8.x.x",
18+
"pm2": "3.4.1"
2019
},
2120
"devDependencies": {
2221
"mocha": "1.11.x",
2322
"should": "1.2.x",
24-
"supertest": "0.7.x",
25-
"jshint": "2.1.x",
26-
"grunt": "~0.4.2",
27-
"async": "~0.2.9"
23+
"supertest": "0.7.x"
2824
},
2925
"engines": {
30-
"node": ">=0.10"
26+
"node": ">=8.0"
3127
}
3228
}

server.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ console.log('action, details, time');
55
var config = require('./config/configuration.js');
66
if (config.env == 'production') {
77
console.log('started_nr, NewRelic, ');
8-
require('newrelic');
8+
//require('newrelic');
99
}
1010

1111
var controllers = require('./lib/server-adobe-github/controllers.js');
@@ -27,7 +27,7 @@ var server = module.exports.server = restify.createServer(config.server);
2727
server.use(config.crossOrigin);
2828

2929
server.get('/', controllers.rootController);
30-
server.opts('.*', function(req, res) { res.send(200); });
30+
server.opts('*', function(req, res) { res.send(200); });
3131

3232
try {
3333
server.listen(config.port, function() {

test/index_test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Copyright (c) 2013 Timo Behrmann. All rights reserved.
33
*/
44

5-
var server = require('../lib/server');
5+
var server = require('../server');
66
var should = require('should');
77

88
describe('test', function () {

0 commit comments

Comments
 (0)