diff --git a/app.js b/app.js index 96c8351..d167ace 100644 --- a/app.js +++ b/app.js @@ -14,8 +14,7 @@ var app = express(); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); -// uncomment after placing your favicon in /public -//app.use(favicon(__dirname + '/public/favicon.ico')); +app.use(favicon(__dirname + '/public/favicon.ico')); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); @@ -25,6 +24,7 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/avatars', avatars); + // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..8a7dd2f Binary files /dev/null and b/public/favicon.ico differ diff --git a/routes/avatars.js b/routes/avatars.js index 73714a7..34b3d83 100644 --- a/routes/avatars.js +++ b/routes/avatars.js @@ -9,6 +9,10 @@ var valid_uuid = /^[0-9a-f]{32}$/; router.get('/:uuid/:size?', function(req, res) { var uuid = req.param('uuid'); var size = req.param('size') || 180; + // Add temporary restriction to prevent app from crashing + if (size <= 0) { + size = 180; + } console.log(uuid); if (valid_uuid.test(uuid)) { var filename = uuid + ".png"; diff --git a/skins.js b/skins.js index 1f27951..404d20d 100644 --- a/skins.js +++ b/skins.js @@ -10,78 +10,78 @@ var lwip = require('lwip'); */ function extract_face(inname, outname, callback) { - var outfile = fs.createWriteStream(outname); - lwip.open(inname, function(err, image) { - image.batch() - .crop(8, 8, 15, 15) - .writeFile(outname, function(err) { - callback(); - }); - }); + var outfile = fs.createWriteStream(outname); + lwip.open(inname, function(err, image) { + image.batch() + .crop(8, 8, 15, 15) + .writeFile(outname, function(err) { + callback(); + }); + }); } module.exports = { - get_profile: function(uuid, callback) { - https.get("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid, function(res) { - if (res.statusCode == "204") { - callback(null); - return null; - } - res.on('data', function(d) { - var profile = JSON.parse(d); - if (profile.error) { - console.error(profile.error); - callback(null); - } else { - callback(profile); - } - }); + get_profile: function(uuid, callback) { + https.get("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid, function(res) { + if (res.statusCode == "204") { + callback(null); + return null; + } + res.on('data', function(d) { + var profile = JSON.parse(d); + if (profile.error) { + console.error(profile.error); + callback(null); + } else { + callback(profile); + } + }); - }).on('error', function(e) { - console.error(e); - }); - }, + }).on('error', function(e) { + console.error(e); + }); + }, - skin_url: function(profile) { - var url = null; - if (profile && profile.properties) { - profile.properties.forEach(function(prop) { - if (prop.name == 'textures') { - var json = Buffer(prop.value, 'base64').toString(); - var props = JSON.parse(json); - url = props.textures.SKIN.url; - } - }); - } - return url; - }, + skin_url: function(profile) { + var url = null; + if (profile && profile.properties) { + profile.properties.forEach(function(prop) { + if (prop.name == 'textures') { + var json = Buffer(prop.value, 'base64').toString(); + var props = JSON.parse(json); + url = props.textures.SKIN.url; + } + }); + } + return url; + }, - skin_file: function(url, filename, callback) { - var tmpname = "skins/tmp/" + filename; - var outname = "skins/" + filename; - var tmpfile = fs.createWriteStream(tmpname); - http.get(url, function(res) { - res.on('data', function(data) { - tmpfile.write(data); - }).on('end', function() { - tmpfile.end(); - extract_face(tmpname, outname, function() { - fs.unlink(tmpname, function(err) { // unlink = delete - if (err) console.error(err); - }); - callback(); // outside unlink callback cause we don't have to wait until it's deleted - }); - }); - }); - }, + skin_file: function(url, filename, callback) { + var tmpname = "skins/tmp/" + filename; + var outname = "skins/" + filename; + var tmpfile = fs.createWriteStream(tmpname); + http.get(url, function(res) { + res.on('data', function(data) { + tmpfile.write(data); + }).on('end', function() { + tmpfile.end(); + extract_face(tmpname, outname, function() { + fs.unlink(tmpname, function(err) { // unlink = delete + if (err) console.error(err); + }); + callback(); // outside unlink callback cause we don't have to wait until it's deleted + }); + }); + }); + }, - resize_img: function(inname, size, callback) { - lwip.open("skins/" + inname, function(err, image) { - image.batch() - .resize(size, size, "nearest-neighbor") // nearest-neighbor doesn't blur - .toBuffer('png', function(err, buffer) { - callback(buffer); - }); - }); - } + resize_img: function(inname, size, callback) { + lwip.open("skins/" + inname, function(err, image) { + image.batch() + .resize(size, size, "nearest-neighbor") // nearest-neighbor doesn't blur + .toBuffer('png', function(err, buffer) { + callback(buffer); + }); + }); + } }; \ No newline at end of file