Last active
August 29, 2015 14:24
-
-
Save davious/f6919ce4c0e32016d443 to your computer and use it in GitHub Desktop.
Bake and Unbake Node app for Open Badges
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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