2 |
2 |
3 local server = require "net.server"; |
3 local server = require "net.server"; |
4 local http_server = require "net.http.server"; |
4 local http_server = require "net.http.server"; |
5 local http = require "net.http"; |
5 local http = require "net.http"; |
6 local json = require "util.json"; |
6 local json = require "util.json"; |
|
7 local time = require "socket".gettime; |
7 |
8 |
8 function handle_request() |
9 function handle_request() |
9 return "Hello world"; |
10 return "Hello world"; |
10 end |
11 end |
11 |
12 |
12 local function run(config, run_script) |
13 local function run(config, run_script) |
13 function handle_run_request(event) |
14 function handle_run_request(event) |
14 local data = json.decode(event.request.body); |
15 local request, response = event.request, event.response; |
15 if not data then |
16 |
16 return 400; |
17 local function log(type, data) |
|
18 local entry = { type = type, data = data, time = time() }; |
|
19 local chunk = json.encode(entry) .. "\r\n"; |
|
20 response.conn:write(("%x\r\n%s\r\n"):format(#chunk, chunk)); |
17 end |
21 end |
18 |
22 |
19 if not data.script then |
23 response.status_code = 201; |
20 return 400; |
24 response.headers.connection = "close"; |
|
25 response.headers.transfer_encoding = "chunked"; |
|
26 response.conn:send(table.concat(http_server.prepare_header(response))); |
|
27 |
|
28 local ok, ret = pcall(run_script, "web", event.request.body, log); |
|
29 |
|
30 if not ok then |
|
31 log("error", ret); |
21 end |
32 end |
22 |
33 |
23 local ok, ret = pcall(run_script, "web", data.script); |
34 response.conn:write("0\r\n\r\n"); |
|
35 response:done(); |
24 |
36 |
25 if not ok then |
37 return true; |
26 return json.encode({ error = true, message = ret }); |
|
27 end |
|
28 |
|
29 return json.encode(ret); |
|
30 end |
38 end |
31 |
39 |
32 http_server.add_host("localhost"); |
40 http_server.add_host("localhost"); |
33 http_server.set_default_host("localhost"); |
41 http_server.set_default_host("localhost"); |
34 http_server.add_handler("GET localhost/*", handle_request); |
42 http_server.add_handler("GET localhost/*", handle_request); |
37 verse.log("error", "HTTP error: %s", e.code); |
45 verse.log("error", "HTTP error: %s", e.code); |
38 end); |
46 end); |
39 --http_server.add_handler("GET localhost/stream/*", handle_stream_request); |
47 --http_server.add_handler("GET localhost/stream/*", handle_stream_request); |
40 http_server.listen_on(config.port or 8007); |
48 http_server.listen_on(config.port or 8007); |
41 verse.log("debug", "Ready") |
49 verse.log("debug", "Ready") |
42 verse.loop(); |
50 repeat until not verse.loop(); |
43 end |
51 end |
44 |
52 |
45 return { |
53 return { |
46 run = run; |
54 run = run; |
47 } |
55 } |