浏览代码

split pathname into array, URL decode, fix #65

jomo 10 年之前
父节点
当前提交
cbbfb73bea
共有 4 个文件被更改,包括 16 次插入10 次删除
  1. 1 1
      routes/avatars.js
  2. 2 2
      routes/renders.js
  3. 1 1
      routes/skins.js
  4. 12 6
      server.js

+ 1 - 1
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");

+ 2 - 2
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");

+ 1 - 1
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;
 

+ 12 - 6
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 {