diff options
| author | yo mama <pepper@scannerjammer.com> | 2015-04-04 01:00:59 -0700 |
|---|---|---|
| committer | yo mama <pepper@scannerjammer.com> | 2015-04-04 01:00:59 -0700 |
| commit | c7c22e3db1c826bcfb2bc66651ec480aae0d4ae0 (patch) | |
| tree | 8546df448afef40d3814d2581f4dacff7cebb87f /server/http/http.js | |
Diffstat (limited to 'server/http/http.js')
| -rw-r--r-- | server/http/http.js | 125 |
1 files changed, 125 insertions, 0 deletions
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 |
