-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
126 lines (124 loc) · 4.56 KB
/
server.js
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
126
var http = require('http');
var mongodb = require('mongodb')
var fs = require('fs')
var qs = require('qs')
var url = require('url')
if(process.env.NODE_ENV == "local"){
var config = JSON.parse(fs.readFileSync('config.json.local'))
}else{
var config = JSON.parse(fs.readFileSync('config.json'))
}
var mongo_config = config.mongo
mongodb.connect(mongo_config, function(error, db){
http.createServer(function (request, res) {
var path = url.parse(request.url).pathname
var method = request.method.toLowerCase()
var params = qs.parse(url.parse(request.url).query)
var cookies = {}
if (request.headers.cookie) {
_ref = request.headers.cookie.split(';')
for (var _i = 0, _len = _ref.length; _i < _len; _i++) {
cookie = _ref[_i]
parts = cookie.split('=')
cookies[parts[0].trim()] = (parts[1] || '').trim()
}
}
var authenticated
if(config.password == unescape(cookies.password)){
authenticated = true
} else {
authenticated = false
}
var match
if(path == "/"){
path = "/index.html"
}
if(path == "/application"){
res.writeHead(200, {'Content-Type': 'application/json'})
res.end(JSON.stringify({environment: config.environment, authenticated: authenticated}))
} else if((match = path.match(/\/logs\/([a-f0-9]*)$/)) && method == "post" && authenticated){
var content = ""
request.addListener('data', function(chunk){
content += chunk;
});
request.addListener('end', function(){
var parsed = qs.parse(content)
db.collection('logs', function(error, collection){
collection.update({"_id": db.bson_serializer.ObjectID(match[1])}, {$set: {text: parsed.text}})
})
fs.unlink("index.html.cached")
res.writeHead(200, {'Content-Type': 'application/json'})
res.end()
});
} else if(path == "/logs" && method == "post" && authenticated){
var content = ""
request.addListener('data', function(chunk){
content += chunk;
});
request.addListener('end', function(){
var parsed = qs.parse(content)
db.collection('logs', function(error, collection){
collection.insert(parsed)
})
res.writeHead(200, {'Content-Type': 'application/json'})
res.end()
});
} else if(path == "/log"){
res.writeHead(200, {'Content-Type': 'application/json'})
db.collection('logs', function(error, collection){
collection.find({"_id": db.bson_serializer.ObjectID(params.id)}, {}).toArray(function(err, items){
res.end(JSON.stringify(items[0]))
})
})
} else if(path == "/logs"){
res.writeHead(200, {'Content-Type': 'application/json'})
db.collection('logs', function(error, collection){
collection.find({}, {limit: 3, sort: {_id: -1}}).toArray(function(err, items){
res.end(JSON.stringify({authenticated: authenticated, items:items}))
})
})
} else if(path == "/cache" && method == "post"){
var content = ""
request.addListener('data', function(chunk){
content += chunk;
});
request.addListener('end', function(){
var parsed = qs.parse(content)
fs.open(parsed.file + '.cached', 'w+', 0666, function(err, fd){
if(parsed.file.match(/.html$/)){
var buffer = new Buffer("<html><head><script type='text/javascript'>var cached = true;</script>" +
fs.readFileSync('head.html') +
"</head><body>" + parsed.body + "</body></html>")
} else {
var buffer = new Buffer(parsed.body)
}
fs.write(fd, buffer, 0, buffer.length)
})
res.writeHead(200, {'Content-Type': 'application/json'})
res.end()
});
} else {
if(!path.match('config.json')){
fs.stat("." + path + '.cached', function(err, stats){
if(err || authenticated){
fs.stat("." + path, function(err, stats){
res.writeHead(200, {'Content-Type': 'text/html'})
fs.readFile("." + path, function(err, data){
if(path.match(/.html$/)){
res.end("<html><head>" + fs.readFileSync('head.html') + "</head><body>" + data + "</body>")
} else {
res.end(data)
}
})
})
} else {
res.writeHead(200, {'Content-Type': 'text/html'})
fs.readFile("." + path + '.cached', function(err, data){
res.end(data)
})
}
})
}
}
}).listen(10336)
});