diff --git a/cc-tweaked/host.ts b/cc-tweaked/host.ts index 4f146ca..18e659e 100755 --- a/cc-tweaked/host.ts +++ b/cc-tweaked/host.ts @@ -1,38 +1,30 @@ #!/bin/env -S deno run --allow-read --allow-net async function main() { - const [program_path] = Deno.args; - if (program_path === undefined) fail_with("Usage: host.ts "); const port = 1728; - const server = Deno.listen({ port }); - console.log("listening on port", port); - for await (const connection of server) handle(connection, program_path); + const server = Deno.serve({ port }, (request) => handle(request)); + await server.finished; } -async function handle(connection: Deno.TcpConn, program_path: string) { - console.log("serving"); - const file = await try_else( - () => Deno.open(program_path, { read: true }), - () => fail_with("Program at", program_path, "does not exists"), - ); - await try_(() => file.readable.pipeTo(connection.writable)); +async function handle(request: Request) { + const script = await open_requested_script(request); + if (script instanceof Response) return script; + console.log("Serving", script.path); + return new Response(script.content.readable); } -function fail_with(...message: string[]) { - console.error(...message); - return Deno.exit(1); -} - -async function try_else(operation: () => T | Promise, on_error: (error: unknown) => T | Promise) { +async function open_requested_script(request: Request) { + const requested_path = new URL(request.url).pathname.slice(1); + const invalid = () => new Response("Invalid script.", { status: 400 }); + if (requested_path.includes("/")) return invalid(); + if (requested_path.includes(".")) return invalid(); try { - return await operation(); - } catch (error) { - return await on_error(error); + const path = "./scripts/" + requested_path + ".lua"; + const content = await Deno.open(path, { read: true }); + return { path, content }; + } catch (_) { + return new Response("Unknown script.", { status: 400 }); } } -async function try_(operation: () => T | Promise) { - return await try_else(operation, () => null); -} - if (import.meta.main) await main(); diff --git a/cc-tweaked/scripts/cat.lua b/cc-tweaked/scripts/cat.lua index d92e5af..b3e0820 100644 --- a/cc-tweaked/scripts/cat.lua +++ b/cc-tweaked/scripts/cat.lua @@ -1,8 +1,17 @@ -local arg1, arg2, arg3 = ... +local path = ... local function main() - print("arg1", arg1, "arg2", arg2, "arg3", arg3) - local file = fs.open() + if path == nil then + print("Usage: cat ") + return + end + local file = fs.open(path, "r") + if file == nil then + print("No such file:", path) + return + end + local content = file.readAll() + print(content) end main()