Tue, 11 Sep 2018 23:29:06 +0100
squishy: Add --with-server option to bundle server and deps
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 | } |