Skip to content

Commit

Permalink
Merge branch 'master' into paper-submission
Browse files Browse the repository at this point in the history
* master:
  use src/environments.js
  #26 Fix a error come from git rebase process
  #26 push Travis to build ...
  #26 load all the test's necessaire environment variables from system only
  #26 tidy up the code and package.json
  #26 lint and clean up the codes
  #26 refactoring the create Badge code to BadgeService, clean up the app.js (the creation is not working? )
  #26 use Habitat to load the enviroment variables in BadgeClient and Servicce, comment out the api.js test (config conflict with env.dist)
  #26 refactroing all the badges read endpoints + IT
  #26 3 endpoints works with IT
  #26 wip 2 endpoints worked with IT
  #26 wip
  • Loading branch information
abbycabs committed Jul 21, 2015
2 parents 7a40f0d + 34f3562 commit 35849d2
Show file tree
Hide file tree
Showing 8 changed files with 277 additions and 277 deletions.
19 changes: 19 additions & 0 deletions env.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copy this file to .env or just set these environment variables

# default port is 5000
export PORT=5000
export SESSION_SECRET=USE_SOMETHING_GOOD_LIKE_puUJjfE6QtUnYryb

# Badges
export BADGES_ENDPOINT=http://example.com
export BADGES_KEY=master
export BADGES_SECRET=test_secret
export BADGES_SYSTEM=badgekit

# ORCID Auth
export ORCID_AUTH_CLIENT_ID=test_client
export ORCID_AUTH_CLIENT_SECRET=0eafb938-020e-45a6-a148-3c222171d9d8
export ORCID_AUTH_SITE=http://example.com
export ORCID_AUTH_TOKEN_PATH=http://api.example.com/oauth/token
export ORCID_REDIRECT_URI=http://localhost:5000/orcid_auth_callback

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"jscs": "^1.13.1",
"js-beautify": "^1.5.5",
"jshint": "^2.7.0",
"mocha": "^2.2.5"
"mocha": "^2.2.5"
},
"engines": {
"node": "0.12.2"
Expand Down
271 changes: 42 additions & 229 deletions src/app.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,30 @@
module.exports = function () {
module.exports = function (badgerService) {
var env = require('./environments');

var express = require('express'),
helpers = require('./helpers'),
app = express(),
path = require('path'),
system = env.get('BADGES_SYSTEM'),
Client = require('badgekit-api-client');
path = require('path');

app.set('view engine', 'jade');
app.use(express.static(path.join(__dirname, '..', '/public')));

function returnBadges(getBadges, httpRequest, httpResponse) {
getBadges(function (error, badges) {
if (error !== null) {
console.log('Get error from return Badges ' + error);
httpResponse.send(error);
} else {
if (httpRequest.query.pretty) {
httpResponse.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(badges, null, 2)
});
} else {
httpResponse.json(badges);
}
}
});
}

// Set the client credentials and the OAuth2 server
var credentials = {
clientID: env.get('ORCID_AUTH_CLIENT_ID'),
Expand Down Expand Up @@ -67,289 +81,88 @@ module.exports = function () {
});
});

var auth = {
key: env.get('BADGES_KEY'),
secret: env.get('BADGES_SECRET')
};

var client = new Client(env.get('BADGES_ENDPOINT'), auth);
/* Get all badges from system */

app.get('/badges', function (request, response) {
var pretty = request.query.pretty;
client.getAllBadges({
system: system
}, function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(badges, null, 2)
});
} else {
response.send(badges);
}
});
returnBadges(badgerService.getAllBadges(), request, response);
});

// Get all badge instances of a certain badge
app.get('/badges/:badge', function (request, response) {
var pretty = request.query.pretty;
client.getBadgeInstances({
system: system,
badge: request.params.badge
}, function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
badges.forEach(function (entry) {
var orcid = helpers.ORCIDFromEmail(entry.email);
helpers.modEntry(entry, orcid);
});
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(badges, null, 2)
});
} else {
response.send(badges);
}
});
returnBadges(badgerService.getBadges(null, request.params.badge), request, response);
});

/* Get badges for a user */

// Get all badge instances earned by a user
app.get('/users/:orcid/badges', function (request, response) {
var pretty = request.query.pretty;
var orcid = request.params.orcid;
if (!orcid) {
response.status(400).end();
return;
}
client.getBadgeInstances({
system: system
}, {
email: helpers.emailFromORCID(orcid)
}, function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
badges.forEach(function (entry) {
helpers.modEntry(entry, orcid);
});
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(badges, null, 2)
});
} else {
response.send(badges);
}
});
returnBadges(badgerService.getBadges(orcid), request, response);
});

// Get all badge instances of a certain badge earned by a user
app.get('/users/:orcid/badges/:badge', function (request, response) {
var pretty = request.query.pretty;
// get all badge instances for the user. Is there a more efficient way to do this?
var orcid = request.params.orcid,
filtered;
var orcid = request.params.orcid;
if (!orcid) {
response.status(400).end();
return;
}
client.getBadgeInstances({
system: system
}, helpers.emailFromORCID(orcid), function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
// filter for the badge
if (badges) {
filtered = badges.filter(function (entry) {
return (entry.badge.slug === request.params.badge) ? helpers.modEntry(entry, orcid) : false;
});
}
if (filtered && filtered.length === 0) {
response.status(404).end();
} else {
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(filtered, null, 2)
});
} else {
response.send(filtered);
}
}
});
returnBadges(badgerService.getBadges(orcid, request.params.badge), request, response);
});

/* Get badges for a paper */

// THIS DOES NOT WORK!!
// Get all badge instances for a paper.
app.get('/papers/:doi1/:doi2/badges', function (request, response) {
var pretty = request.query.pretty;
if (!request.params.doi1 || !request.params.doi2) {
response.status(400).end();
return;
}
var evidenceUrl = helpers.urlFromDOI(request.params.doi1 + '/' + request.params.doi2),
filtered;
// get all badge instances for the user. Is there a more efficient way to do this?
client.getBadgeInstances({
system: system
}, function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
// filter for the badge
if (badges) {
filtered = badges.filter(function (entry) {
var orcid = helpers.ORCIDFromEmail(entry.email);
return (entry.evidenceUrl === evidenceUrl) ? helpers.modEntry(entry, orcid) : false;
});
}
if (filtered && filtered.length === 0) {
response.status(404).end();
} else {
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(filtered, null, 2)
});
} else {
response.send(filtered);
}
}
});
returnBadges(badgerService.getBadges(null, null, {
'_1': request.params.doi1,
'_2': request.params.doi2
}), request, response);
});

// Get all badge instances of a certain badge for a paper. NOTE: inefficiently filters for doi afterwards
app.get('/papers/:doi1/:doi2/badges/:badge', function (request, response) {
var pretty = request.query.pretty;
if (!request.params.doi1 || !request.params.doi2) {
response.status(400).end();
return;
}
var evidenceUrl = helpers.urlFromDOI(request.params.doi1 + '/' + request.params.doi2),
filtered;
// get all badge instances for the user. Is there a more efficient way to do this?
client.getBadgeInstances({
system: system,
badge: request.params.badge
}, function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
// filter for the badge
if (badges) {
filtered = badges.filter(function (entry) {
var orcid = helpers.ORCIDFromEmail(entry.email);
return (entry.evidenceUrl === evidenceUrl) ? helpers.modEntry(entry, orcid) : false;
});
}
if (filtered && filtered.length === 0) {
response.status(404).end();
} else {
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(filtered, null, 2)
});
} else {
response.send(filtered);
}
}
});
returnBadges(badgerService.getBadges(null, request.params.badge, {
'_1': request.params.doi1,
'_2': request.params.doi2
}), request, response);
});

// Get all badge instances earned by a user for a paper.
app.get('/papers/:doi1/:doi2/:badges/:orcid/badges', function (request, response) {
var pretty = request.query.pretty;
if (!request.params.doi1 || !request.params.doi2 || !request.params.orcid) {
response.status(400).end();
return;
}
var orcid = request.params.orcid,
evidenceUrl = helpers.urlFromDOI(request.params.doi1 + '/' + request.params.doi2),
filtered;
// get all badge instances for the user. Is there a more efficient way to do this?
client.getBadgeInstances({
system: system
}, helpers.emailFromORCID(orcid), function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
// filter for the badge
if (badges) {
filtered = badges.filter(function (entry) {
return (entry.evidenceUrl === evidenceUrl) ? helpers.modEntry(entry, orcid) : false;
});
}
if (filtered && filtered.length === 0) {
response.status(404).end();
} else {
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(filtered, null, 2)
});
} else {
response.send(filtered);
}
}
});
returnBadges(badgerService.getBadges(request.params.orcid, null, {
'_1': request.params.doi1,
'_2': request.params.doi2
}), request, response);
});

// Get all badge instances of a certain badge earned by a user for a paper.
app.get('/papers/:doi1/:doi2/users/:orcid/badges/:badge', function (request, response) {
var pretty = request.query.pretty;
if (!request.params.doi1 || !request.params.doi2 || !request.params.orcid) {
if (!request.params.doi1 || !request.params.doi2 || !request.params.orcid || !request.params.badge) {
response.status(400).end();
return;
}
var orcid = request.params.orcid,
evidenceUrl = helpers.urlFromDOI(request.params.doi1 + '/' + request.params.doi2),
filtered;
// get all badge instances for the user. Is there a more efficient way to do this?
client.getBadgeInstances({
system: system
}, helpers.emailFromORCID(orcid), function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
// filter for the doi & badge
if (badges) {
filtered = badges.filter(function (entry) {
return ((entry.evidenceUrl === evidenceUrl) && (entry.badge.slug === request.params.badge)) ?
helpers.modEntry(entry, orcid) : false;
});
}
if (filtered && filtered.length === 0) {
response.status(404).end();
} else {
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(filtered, null, 2)
});
} else {
response.send(filtered);
}
}
});
returnBadges(badgerService.getBadges(request.params.orcid, request.params.badge, {
'_1': request.params.doi1,
'_2': request.params.doi2
}), request, response);
});

// Publisher submits a new paper
Expand Down
10 changes: 10 additions & 0 deletions src/badgeClient.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
var ApiClient = require('badgekit-api-client');

module.exports = function (config) {
var auth = {
key: config.get('BADGES_KEY'),
secret: config.get('BADGES_SECRET')
};

return new ApiClient(config.get('BADGES_ENDPOINT'), auth);
};
Loading

0 comments on commit 35849d2

Please sign in to comment.