1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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)
}
);
}
|