From c7c22e3db1c826bcfb2bc66651ec480aae0d4ae0 Mon Sep 17 00:00:00 2001 From: yo mama Date: Sat, 4 Apr 2015 01:00:59 -0700 Subject: first --- server/http/http.js | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 server/http/http.js (limited to 'server/http') diff --git a/server/http/http.js b/server/http/http.js new file mode 100644 index 0000000..1fa985d --- /dev/null +++ b/server/http/http.js @@ -0,0 +1,125 @@ +var http = require('http'), + url = require('url'), + path = require('path'), + fs = require('fs'), + Config = require('../../config/http.js'), + conf = new Config(); + +http.createServer( + requestRecieved +).listen(conf.port); + +function serveFile(filename,exists,response) { + if(!exists) { + serve( + response, + '404 MIA', + 404 + ); + return; + } + + var contentType = path.extname(filename).slice(1); + + //Only serve specified file types + if(!conf.contentType){ + serve( + response, + '415 File type not supported', + 415 + ); + return; + } + + //Deny restricted file types + if(!conf.contentType[contentType]){ + serve( + response, + '415 File type not supported', + 415 + ); + return; + } + + //Do not allow access to Dirs or restricted file types + if ( + fs.statSync(filename).isDirectory() || + conf.restrictedType[contentType] + ){ + serve( + response, + '403 Access Denied', + 403 + ); + return; + } + + fs.readFile( + filename, + 'binary', + function(err, file) { + if(err) { + serve( + response, + '500 '+err, + 500 + ); + return; + } + + var headers = { + 'Content-Type' : conf.contentType[contentType] + } + serve( + response, + file, + 200, + headers, + 'binary' + ); + return; + } + ); +} + +function serve(response,body,status,headers,encoding){ + //defaults to 200 + if(!status) + status=200; + + //defaults to text/plain + if(!headers) + headers={ + 'Content-type':'text/plain' + } + + //defaults to utf8 + if(!encoding) + encoding='utf8'; + + response.writeHead( + status, + headers + ); + response.write(body,encoding); + response.end(); + return; +} + +function requestRecieved(request,response){ + var uri = url.parse(request.url).pathname; + if (uri=='/') + uri='/'+conf.server.index; + + var filename = path.join( + conf.rootDIR, + uri + ); + + fs.exists( + filename, + function(exists){ + serveFile(filename,exists,response) + } + ); +} \ No newline at end of file -- cgit v1.2.3-70-g09d2