Skip to content

Instantly share code, notes, and snippets.

@davious
Last active August 29, 2015 14:24
Show Gist options
  • Save davious/f6919ce4c0e32016d443 to your computer and use it in GitHub Desktop.
Save davious/f6919ce4c0e32016d443 to your computer and use it in GitHub Desktop.
Bake and Unbake Node app for Open Badges
var express = require('express');
var bakery = require('openbadges-bakery');
var request = require("request");
var http = require("http");
var Stream = require('stream').Transform;
var Q = require("q");
var app = express();
function getJson(url) {
var deferred = Q.defer();
request(url, function(err, res, body) {
deferred.resolve(JSON.parse(body));
});
return deferred.promise;
}
function getImage(url) {
var deferred = Q.defer();
http.request(url, function(response) {
var data = new Stream();
response.on('data', function(chunk) {
data.push(chunk);
});
response.on('end', function() {
var img = data.read();
deferred.resolve(img);
});
}).end();
return deferred.promise;
}
function bake(image, assertion) {
var deferred = Q.defer();
bakery.bake({
image: image,
assertion: assertion
}, function(err, data){
deferred.resolve(data);
});
return deferred.promise;
}
function unbake(image) {
var deferred = Q.defer();
bakery.extract(image, function(err, json){
deferred.resolve(json);
});
return deferred.promise;
}
app.get('/bake', function(req, res){
var response = res;
if(!req.query.assertion) {
res.status(500).send('please add ?assertion= to bake');
return ;
}
getJson(req.query.assertion).then(function(assertion) {
getJson(assertion.badge).then(function(badge) {
getImage(badge.image).then(function(img) {
bake(img, assertion).then(function(img) {
response.send(img);
});
});
})
});
});
app.get('/unbake', function(req, res){
var response = res;
if(!req.query.image) {
res.status(500).send('please add ?image= to unbake');
return ;
}
getImage(req.query.image).then(function(img) {
unbake(img).then(function(json) {
response.send(json);
});
});
});
app.listen(process.env.PORT || 80);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment