commit e50cb03677a1044c9a527344b87f39cffa3e0dcf Author: admin Date: Fri May 9 15:04:19 2025 -0400 initial commit diff --git a/main b/main new file mode 100755 index 0000000..85f49f9 Binary files /dev/null and b/main differ diff --git a/main.d b/main.d new file mode 100644 index 0000000..62b5953 --- /dev/null +++ b/main.d @@ -0,0 +1,122 @@ +import arsd.cgi; +//import arsd.sqlite; +import std.file; +import std.conv; +import std.process; + +string host_port = ":9000"; +string allowed_host = ""; + + + string fileToString(string path){ + auto file = File(path, "r"); + string contents = ""; + while (!file.eof()) { + contents ~= file.readln(); + } + file.close(); + return contents; + } + string get_header(){ + return fileToString("public/header.html"); + } + string get_footer(){ + return fileToString("public/footer.html"); + } + bool run_script(string script_path){ + try{ + string script_command = "chmod +x " ~ script_path ~ " && bash -c "~ script_path; + writeln("calling::: " ~ script_command); + auto cont = executeShell(script_command); + if(cont.status != 0) { + writeln("failed to run script command"); + //return "Failed"; + return false; + } else { + writeln("script output " ~ cont.output); + return true; + } + } catch (Exception e) { + return false; + } + } + void handler(Cgi cgi) { + try{ + string host = cgi.host.replace(host_port, ""); + string path = cgi.pathInfo; + if(path == "/favicon.ico"){ + return; + } + if(cgi.remoteAddress ~= allowed_host.split(":"[0])){ // ignore the port. + cgi.write(" Connections are not allowed from: " ~ cgi.remoteAddress ~ ""); + return; + } + writeln("Trying to access: " ~host ~path); + string script_path = getcwd() ~"/" ~ host ~ "/" ~ "run.sh"; + writeln("script_path: " ~ script_path); + if(script_path.exists){ + writeln("script_path exists: Trying to access: " ~host); + //Not needed currently. auto fail_script = fileToString(script_path); + writeln("Running script: \r\n" ~ script_path); + auto result = run_script(script_path); + if(result){ + cgi.write(" successfully ran script."); + } else { + cgi.write(" Failed to run script."); + } + writeln("done with script"); + } else { + writeln("site path doesn't exist."); + cgi.write(" Hello " ~ cgi.remoteAddress ~ " The host: " ~ host ~ " is not configured."); + } + } catch (Exception e){ + writeln("ʕノ•ᴥ•ʔノ ︵ ┻━┻ Exception thrown: "~ e.toString()); + //throw o; + cgi.setResponseStatus("500 Internal Server Error"); + cgi.write("ʕノ•ᴥ•ʔノ ︵ ┻━┻ 500 Internal Server Error.", true); + } + } + + //mixin GenericMain!handler; + +void main(string[] args) { + //TODO: Fix this to load the acceptable host from an argument, or config file. + allowed_host = "127.0.0.1"; + + //TODO: Figure out a better way of setting defaults, this is pretty dumb. + string[] newargs; + writeln(to!string(args)); + args = []; + writeln(to!string(args)); + newargs ~= "./main"; + newargs ~= "--listen"; + newargs ~= "http://localhost" ~ host_port; + args = newargs; + writeln(to!string(args)); + // this is all the content of [cgiMainImpl] which you can also call + + // cgi.d embeds a few add on functions like real time event forwarders + // and session servers it can run in other processes. this spawns them, if needed. + if(tryAddonServers(args)) + return; + + // cgi.d allows you to easily simulate http requests from the command line, + // without actually starting a server. this function will do that. + if(trySimulatedRequest!(handler, Cgi)(args)) + return; + + RequestServer server; + // you can change the default port here if you like + // server.listeningPort = 9000; + + // then call this to let the command line args override your default + server.configureFromCommandLine(args); + + // here is where you could print out the listeningPort to the user if you wanted + + // and serve the request(s) according to the compile configuration + server.serve!(handler)(); + + // or you could explicitly choose a serve mode like this: + // server.serveEmbeddedHttp!requestHandler(); +} diff --git a/main.o b/main.o new file mode 100644 index 0000000..8ed2434 Binary files /dev/null and b/main.o differ diff --git a/test.local/run.sh b/test.local/run.sh new file mode 100755 index 0000000..9c68e61 --- /dev/null +++ b/test.local/run.sh @@ -0,0 +1 @@ +echo "Hello there!"