-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathserver.js
75 lines (59 loc) · 1.61 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
// INPUT
//eval?name=XXX&file=XXX&js=XXX
// OUTPUT
// { success: true, result: "" }
// { success: false, exception: "" }
var sys = require("sys");
var fu = require("./fu");
var url = require("url")
Config = {
port: "1234",
domain: "127.0.0.1"
}
function require_absolute(path) {
var folders = path.split("/")
var module_path = folders.pop()
require.paths.unshift(folders.join("/"))
mod = require(module_path)
require.paths.shift()
return mod
}
var Contexts = {};
function loadContext(name, file) {
if(file) {
sys.puts("Loading context for name: " + name + ", and file: " + file + "")
file = file.replace(".js", "")
Contexts[name] = require_absolute(file)
} else {
Contexts[name] = require("./blank_context");
}
return Contexts[name]
}
function getContext(name, file) {
return Contexts[name] || loadContext(name, file)
}
fu.listen(Config.port, Config.domain)
fu.get("/eval", function (req, res) {
var result = { success:false}
try {
var params = url.parse(req.url, true).query
var context = getContext(params["name"] || "", params["file"])
var js = params["js"]
sys.puts("received JS: " + js)
with(context) {
result["result"] = eval(js)
if(result["result"] == undefined)
result["result"] = null
result["success"] = true
}
} catch(ex) {
var lines = (ex.stack || "").split("\n")
for(var i in lines)
sys.p(lines[i])
sys.puts(ex.toString())
//.toString()
result["exception"] = ex.toString()
}
sys.puts("Returning:" + JSON.stringify(result))
res.simpleJSON(200, result);
});