scansion/serve.lua

Tue, 11 Sep 2018 23:27:23 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Tue, 11 Sep 2018 23:27:23 +0100
changeset 137
091212cef52a
child 156
807dc9c0f140
permissions
-rw-r--r--

main, scansion.serve: Add mode that serves /run API for executing scripts

137
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 local verse = require "verse";
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local server = require "net.server";
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local http_server = require "net.http.server";
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 local http = require "net.http";
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 local json = require "util.json";
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 function handle_request()
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 return "Hello world";
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 end
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 local function run(config, run_script)
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 function handle_run_request(event)
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 local data = json.decode(event.request.body);
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 if not data then
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 return 400;
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 end
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 if not data.script then
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 return 400;
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 end
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 local ok, ret = pcall(run_script, "web", data.script);
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 if not ok then
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 return json.encode({ error = true, message = ret });
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 end
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 return json.encode(ret);
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 end
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 http_server.add_host("localhost");
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 http_server.set_default_host("localhost");
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 http_server.add_handler("GET localhost/*", handle_request);
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 http_server.add_handler("POST localhost/run", handle_run_request);
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 http_server.add_handler("http-error", function (e)
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 verse.log("error", "HTTP error: %s", e.code);
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 end);
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 --http_server.add_handler("GET localhost/stream/*", handle_stream_request);
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 http_server.listen_on(config.port or 8007);
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 verse.log("debug", "Ready")
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 verse.loop();
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 end
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 return {
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 run = run;
091212cef52a main, scansion.serve: Add mode that serves /run API for executing scripts
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 }

mercurial