diff --git a/routes/avatars.js b/routes/avatars.js index c597eba..2332593 100644 --- a/routes/avatars.js +++ b/routes/avatars.js @@ -15,7 +15,7 @@ var human_status = { // GET avatar request module.exports = function(req, res) { var start = new Date(); - var uuid = (req.url.pathname.split("/")[2] || "").split(".")[0]; + var uuid = (req.url.path_list[2] || "").split(".")[0]; var size = parseInt(req.url.query.size) || config.default_size; var def = req.url.query.default; var helm = req.url.query.hasOwnProperty("helm"); diff --git a/routes/renders.js b/routes/renders.js index 80ca4aa..e3a2b5e 100644 --- a/routes/renders.js +++ b/routes/renders.js @@ -20,7 +20,7 @@ var human_status = { // GET render request module.exports = function(req, res) { var start = new Date(); - var raw_type = (req.url.pathname.split("/")[2] || ""); + var raw_type = (req.url.path_list[2] || ""); // validate type if (raw_type != "body" && raw_type != "head") { @@ -33,7 +33,7 @@ module.exports = function(req, res) { } var body = raw_type == "body"; - var uuid = (req.url.pathname.split("/")[3] || "").split(".")[0]; + var uuid = (req.url.path_list[3] || "").split(".")[0]; var def = req.url.query.default; var scale = parseInt(req.url.query.scale) || config.default_scale; var helm = req.url.query.hasOwnProperty("helm"); diff --git a/routes/skins.js b/routes/skins.js index 0a09918..66bd0a5 100644 --- a/routes/skins.js +++ b/routes/skins.js @@ -8,7 +8,7 @@ var lwip = require("lwip"); // GET skin request module.exports = function(req, res) { var start = new Date(); - var uuid = (req.url.pathname.split("/")[2] || "").split(".")[0]; + var uuid = (req.url.path_list[2] || "").split(".")[0]; var def = req.url.query.default; var etag = null; diff --git a/server.js b/server.js index e470012..82e2c74 100644 --- a/server.js +++ b/server.js @@ -1,6 +1,7 @@ #!/usr/bin/env node -var config = require("./modules/config"); var logging = require("./modules/logging"); +var querystring = require("querystring"); +var config = require("./modules/config"); var clean = require("./modules/cleaner"); var http = require("http"); var mime = require("mime"); @@ -16,7 +17,7 @@ var routes = { }; function asset_request(req, res) { - var filename = __dirname + "/public/" + req.url.pathname; + var filename = __dirname + "/public/" + req.url.path_list.join("/"); fs.exists(filename, function(exists) { if (exists) { fs.readFile(filename, function(err, file_buffer) { @@ -41,16 +42,21 @@ function asset_request(req, res) { } function requestHandler(req, res) { - var querystring = url.parse(req.url).query; + var query = url.parse(req.url).query; var request = req; // we need to use url.parse and give the result to url.parse because nodejs - request.url = url.parse(req.url, querystring); + request.url = url.parse(req.url, query); request.url.query = request.url.query || {}; // remove trailing and double slashes + other junk - request.url.pathname = path.resolve(request.url.pathname); + var path_list = path.resolve(request.url.pathname).split("/"); + for (var i = 0; i < path_list.length; i++) { + // URL decode + path_list[i] = querystring.unescape(path_list[i]); + } + request.url.path_list = path_list; - var local_path = request.url.pathname.split("/")[1]; + var local_path = request.url.path_list[1]; console.log(request.method + " " + request.url.href); if (request.method == "GET" || request.method == "HEAD") { try {