Skip to content

Instantly share code, notes, and snippets.

@Loknar
Created August 31, 2016 17:01
Show Gist options
  • Save Loknar/5cb8c1d07020e2eada3f3dfaa11856a2 to your computer and use it in GitHub Desktop.
Save Loknar/5cb8c1d07020e2eada3f3dfaa11856a2 to your computer and use it in GitHub Desktop.
/**
* A simple script for easily serving a folder containing static website.
* It's shamelessly snatched from https://gist.github.com/ryanflorence/701407
* and might be vurnerable to directory traversal attack, yet I've not been
* able to make such an attack work.
*
* TODO: maybe fix ugly repetitiveness?
**/
var http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs"),
port = process.argv[2] || 8888;
var has404file = false,
file404 = path.join(process.cwd(), "/404.html");
fs.exists(file404, function(exists) {
if(exists) {
console.log("Found 404.html file, will be served on 404 ..");
has404file = true;
}
});
http.createServer(function(request, response) {
var uri = url.parse(request.url).pathname
, filename = path.join(process.cwd(), uri);
fs.exists(filename, function(exists) {
if(!exists) {
if(has404file) {
fs.readFile(file404, "binary", function(err, filerino) {
if(err) {
response.writeHead(500, {"Content-Type": "text/plain"});
response.write(err + "\n");
response.end();
return;
}
response.writeHead(404);
response.write(filerino, "binary");
response.end();
});
}
else {
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not Found\n");
response.end();
}
return;
}
if (fs.statSync(filename).isDirectory()) filename += '/index.html';
fs.exists(filename, function(indexFileExists) {
if(!indexFileExists) {
if(has404file) {
fs.readFile(file404, "binary", function(err, filerino) {
if(err) {
response.writeHead(500, {"Content-Type": "text/plain"});
response.write(err + "\n");
response.end();
return;
}
response.writeHead(404);
response.write(filerino, "binary");
response.end();
});
}
else {
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not Found\n");
response.end();
}
return;
}
fs.readFile(filename, "binary", function(err, file) {
if(err) {
response.writeHead(500, {"Content-Type": "text/plain"});
response.write(err + "\n");
response.end();
return;
}
response.writeHead(200);
response.write(file, "binary");
response.end();
});
});
});
}).listen(parseInt(port, 10));
console.log("Static file server running at");
console.log(" => http://localhost:" + port + "/");
console.log("CTRL + C to shutdown");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment