Skip to content

Commit 6018bc8

Browse files
committed
add route to grant badges
1 parent 2b87f24 commit 6018bc8

File tree

5 files changed

+66
-0
lines changed

5 files changed

+66
-0
lines changed

.env

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,7 @@ APP_ORIGIN=http://localhost:3000
77

88
# time in seconds
99
SHARE_EXPIRES_IN=2592000
10+
11+
BADGES_ENDPOINT=https://api.v2.mybadges.org
12+
BADGES_USERNAME=badges_username
13+
BADGES_PASSWORD=badges_password

api.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,15 @@ var galleryRouter = require('./routes/gallery/index');
4040
var projectRouter = require('./routes/project/index');
4141
var userRouter = require('./routes/user/index');
4242
var uploadRouter = require('./routes/upload/index');
43+
var badgeRouter = require('./routes/badge/index');
4344

4445
api.use('/tutorial', tutorialRouter);
4546
api.use('/share', shareRouter);
4647
api.use('/gallery', galleryRouter);
4748
api.use('/project', projectRouter);
4849
api.use('/user', userRouter);
4950
api.use('/upload', uploadRouter);
51+
api.use('/badge', badgeRouter);
5052

5153
// catch 404 and forward to error handler
5254
api.use(function(req, res, next) {

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"docs": "apidoc -i . -e \"docs\" \"(node_modules)\" -o docs"
99
},
1010
"dependencies": {
11+
"@geobadges/badgr-api-client": "^0.12.0",
1112
"chalk": "^4.1.0",
1213
"cookie-parser": "~1.4.4",
1314
"cors": "^2.8.5",
@@ -25,5 +26,8 @@
2526
"request": "^2.88.2",
2627
"uuid": "^8.3.2",
2728
"uuidv4": "^6.2.12"
29+
},
30+
"devDependencies": {
31+
"nodemon": "^2.0.15"
2832
}
2933
}

routes/badge/grantBadge.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// jshint esversion: 8
2+
// jshint node: true
3+
"use strict";
4+
5+
const API = require("@geobadges/badgr-api-client");
6+
7+
const badgesClient = new API({
8+
endpoint: process.env.BADGES_ENDPOINT,
9+
username: process.env.BADGES_USERNAME,
10+
password: process.env.BADGES_PASSWORD,
11+
});
12+
13+
const grantBadge = async function (req, res) {
14+
try {
15+
const email = req.user?.email || req.body.email;
16+
const { badgeClassEntityId, createNotification, issuerEntityId } = req.body;
17+
18+
if (!email) {
19+
return res.status(400).send({
20+
message: "email missing",
21+
});
22+
}
23+
24+
const status = await badgesClient.grant({
25+
badgeClassEntityId,
26+
createNotification,
27+
email,
28+
issuerEntityId,
29+
});
30+
31+
if (!status) {
32+
throw new Error("Could not grant badge");
33+
}
34+
35+
res.status(200).send({
36+
message: "Badge granted successfully.",
37+
});
38+
} catch (err) {
39+
console.log(err);
40+
return res.status(500).send(err);
41+
}
42+
};
43+
44+
module.exports = {
45+
grantBadge,
46+
};

routes/badge/index.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// jshint esversion: 8
2+
// jshint node: true
3+
"use strict";
4+
5+
var express = require("express");
6+
var BadgeRouter = express.Router();
7+
8+
BadgeRouter.route("/grant").post(require("./grantBadge").grantBadge);
9+
10+
module.exports = BadgeRouter;

0 commit comments

Comments
 (0)