From 1b269aa5c990ded5aaae773a78daf5230d47a5e2 Mon Sep 17 00:00:00 2001 From: RblSb Date: Mon, 6 Apr 2020 05:32:18 +0300 Subject: Fix folder links for user folder --- build/server.js | 44 +++++++++++++++++++++++++++++++++++++------- src/server/HttpServer.hx | 23 +++++++++++++---------- 2 files changed, 50 insertions(+), 17 deletions(-) diff --git a/build/server.js b/build/server.js index 5077240..faf87c7 100644 --- a/build/server.js +++ b/build/server.js @@ -775,6 +775,24 @@ haxe_io_Path.extension = function(path) { } return s.ext; }; +haxe_io_Path.addTrailingSlash = function(path) { + if(path.length == 0) { + return "/"; + } + var c1 = path.lastIndexOf("/"); + var c2 = path.lastIndexOf("\\"); + if(c1 < c2) { + if(c2 != path.length - 1) { + return path + "\\"; + } else { + return path; + } + } else if(c1 != path.length - 1) { + return path + "/"; + } else { + return path; + } +}; haxe_io_Path.prototype = { toString: function() { return (this.dir == null ? "" : this.dir + (this.backslash ? "\\" : "/")) + this.file + (this.ext == null ? "" : "." + this.ext); @@ -952,8 +970,6 @@ server_HttpServer.serveFiles = function(req,res) { url = "/index.html"; } var filePath = server_HttpServer.dir + url; - var extension = haxe_io_Path.extension(filePath).toLowerCase(); - var contentType = server_HttpServer.getMimeType(extension); var tmp; if(req.connection.remoteAddress != req.connection.localAddress) { var _this = server_HttpServer.allowedLocalFiles; @@ -962,7 +978,7 @@ server_HttpServer.serveFiles = function(req,res) { tmp = true; } if(tmp) { - if(server_HttpServer.serveLocalFile(res,url,extension,contentType)) { + if(server_HttpServer.serveLocalFile(res,url)) { return; } } @@ -976,6 +992,9 @@ server_HttpServer.serveFiles = function(req,res) { var path = server_HttpServer.customDir + url; if(js_node_Fs.existsSync(path)) { filePath = path; + if(sys_FileSystem.isDirectory(filePath)) { + filePath = haxe_io_Path.addTrailingSlash(filePath) + "index.html"; + } } } js_node_Fs.readFile(filePath,function(err,data) { @@ -983,8 +1002,10 @@ server_HttpServer.serveFiles = function(req,res) { server_HttpServer.readFileError(err,res,filePath); return; } - res.setHeader("Content-Type",contentType); - if(extension == "html") { + var ext = haxe_io_Path.extension(filePath).toLowerCase(); + var tmp2 = server_HttpServer.getMimeType(ext); + res.setHeader("Content-Type",tmp2); + if(ext == "html") { data = server_HttpServer.localizeHtml(data.toString(),req.headers["accept-language"]); } res.end(data); @@ -1000,7 +1021,8 @@ server_HttpServer.readFileError = function(err,res,filePath) { res.end("Error getting the file: " + Std.string(err) + "."); } }; -server_HttpServer.serveLocalFile = function(res,filePath,ext,contentType) { +server_HttpServer.serveLocalFile = function(res,filePath) { + var ext = haxe_io_Path.extension(filePath).toLowerCase(); if(ext != "mp4" && ext != "mp3" && ext != "wav") { return false; } @@ -1018,7 +1040,8 @@ server_HttpServer.serveLocalFile = function(res,filePath,ext,contentType) { server_HttpServer.readFileError(err,res,filePath); return; } - res.setHeader("Content-Type",contentType); + var tmp = server_HttpServer.getMimeType(ext); + res.setHeader("Content-Type",tmp); res.end(data); return; }); @@ -1880,6 +1903,13 @@ sys_FileSystem.exists = function(path) { return false; } }; +sys_FileSystem.isDirectory = function(path) { + try { + return js_node_Fs.statSync(path).isDirectory(); + } catch( e ) { + return false; + } +}; sys_FileSystem.createDirectory = function(path) { try { js_node_Fs.mkdirSync(path); diff --git a/src/server/HttpServer.hx b/src/server/HttpServer.hx index a5b752b..ec6ddda 100644 --- a/src/server/HttpServer.hx +++ b/src/server/HttpServer.hx @@ -48,13 +48,9 @@ class HttpServer { if (url == "/") url = "/index.html"; var filePath = dir + url; - final extension = Path.extension(filePath).toLowerCase(); - final contentType = getMimeType(extension); - if (req.connection.remoteAddress == req.connection.localAddress || allowedLocalFiles[url]) { - final isExists = serveLocalFile(res, url, extension, contentType); - if (isExists) return; + if (serveLocalFile(res, url)) return; } if (!isChildOf(dir, filePath)) { @@ -66,7 +62,12 @@ class HttpServer { if (hasCustomRes) { final path = customDir + url; - if (Fs.existsSync(path)) filePath = path; + if (Fs.existsSync(path)) { + filePath = path; + if (FileSystem.isDirectory(filePath)) { + filePath = Path.addTrailingSlash(filePath) + "index.html"; + } + } } Fs.readFile(filePath, (err:Dynamic, data:Buffer) -> { @@ -74,8 +75,9 @@ class HttpServer { readFileError(err, res, filePath); return; } - res.setHeader("Content-Type", contentType); - if (extension == "html") { + final ext = Path.extension(filePath).toLowerCase(); + res.setHeader("Content-Type", getMimeType(ext)); + if (ext == "html") { // replace ${textId} to localized strings data = cast localizeHtml(data.toString(), req.headers["accept-language"]); } @@ -94,7 +96,8 @@ class HttpServer { } } - static function serveLocalFile(res:ServerResponse, filePath:String, ext:String, contentType:String):Bool { + static function serveLocalFile(res:ServerResponse, filePath:String):Bool { + final ext = Path.extension(filePath).toLowerCase(); if (ext != "mp4" && ext != "mp3" && ext != "wav") return false; if (!Fs.existsSync(filePath)) return false; allowedLocalFiles[filePath] = true; @@ -103,7 +106,7 @@ class HttpServer { readFileError(err, res, filePath); return; } - res.setHeader("Content-Type", contentType); + res.setHeader("Content-Type", getMimeType(ext)); res.end(data); }); return true; -- cgit v1.2.3