different error for wrong json
This commit is contained in:
parent
b40508e224
commit
87aa4ed23d
|
@ -20,6 +20,8 @@ use thread;
|
|||
use time;
|
||||
|
||||
type notfound = !void;
|
||||
type badrequest = !void;
|
||||
type http_err = !(notfound | badrequest);
|
||||
|
||||
const usage: [_]getopt::help = [
|
||||
"HTTP server",
|
||||
|
@ -84,11 +86,12 @@ fn handle_req(arg: nullable *opaque) void = {
|
|||
|
||||
match (route_request(&buf, serv_req)) {
|
||||
case void => void;
|
||||
case badrequest => handle_badrequest(&buf, serv_req);
|
||||
case notfound => handle_notfound(&buf, serv_req);
|
||||
};
|
||||
};
|
||||
|
||||
fn route_request(buf: *io::stream, serv_req: *http::server_request) (void | notfound) = {
|
||||
fn route_request(buf: *io::stream, serv_req: *http::server_request) (void | http_err) = {
|
||||
let request = &serv_req.request;
|
||||
switch (request.method) {
|
||||
case "GET" =>
|
||||
|
@ -174,8 +177,7 @@ fn handle_file(buf: *io::stream, serv_req: *http::server_request) (void | notfou
|
|||
)!;
|
||||
};
|
||||
|
||||
export fn handle_notfound(buf: *io::stream, request: *http::server_request) void = {
|
||||
fmt::fprintfln(buf, "not found")!;
|
||||
fn handle_notfound(buf: *io::stream, request: *http::server_request) void = {
|
||||
http::response_write(
|
||||
request.socket,
|
||||
http::STATUS_NOT_FOUND,
|
||||
|
@ -184,7 +186,16 @@ export fn handle_notfound(buf: *io::stream, request: *http::server_request) void
|
|||
)!;
|
||||
};
|
||||
|
||||
export fn handle_cors(buf: *io::stream, serv_req: *http::server_request) void = {
|
||||
fn handle_badrequest(buf: *io::stream, request: *http::server_request) void = {
|
||||
http::response_write(
|
||||
request.socket,
|
||||
http::STATUS_BAD_REQUEST,
|
||||
buf,
|
||||
("Content-Type", "text/plain")
|
||||
)!;
|
||||
};
|
||||
|
||||
fn handle_cors(buf: *io::stream, serv_req: *http::server_request) void = {
|
||||
let request = serv_req.request;
|
||||
|
||||
if (request.target.path == "/v1/exec") {
|
||||
|
@ -209,7 +220,7 @@ export fn handle_cors(buf: *io::stream, serv_req: *http::server_request) void =
|
|||
)!;
|
||||
};
|
||||
|
||||
fn handle_exec(buf: *io::stream, serv_req: *http::server_request) (void | notfound) = {
|
||||
fn handle_exec(buf: *io::stream, serv_req: *http::server_request) (void | badrequest) = {
|
||||
let request = serv_req.request;
|
||||
|
||||
let payload = match (request.body) {
|
||||
|
@ -231,27 +242,27 @@ fn handle_exec(buf: *io::stream, serv_req: *http::server_request) (void | notfou
|
|||
|
||||
let payload = match (payload) {
|
||||
case let obj: json::object => yield obj;
|
||||
case => return notfound;
|
||||
case => return badrequest;
|
||||
};
|
||||
|
||||
let files = match (json::get(&payload, "files")) {
|
||||
case void => return notfound;
|
||||
case void => return badrequest;
|
||||
case let j: *json::value => yield j;
|
||||
};
|
||||
|
||||
let files = match (*files) {
|
||||
case let o: json::object => yield o;
|
||||
case => return notfound;
|
||||
case => return badrequest;
|
||||
};
|
||||
|
||||
let code = match (json::get(&files, "")) {
|
||||
case void => return notfound;
|
||||
case void => return badrequest;
|
||||
case let j: *json::value => yield j;
|
||||
};
|
||||
|
||||
let code = match (*code) {
|
||||
case let c: str => yield c;
|
||||
case => return notfound;
|
||||
case => return badrequest;
|
||||
};
|
||||
|
||||
let (stdout, stderr) = run_code(code);
|
||||
|
|
Loading…
Reference in a new issue