initial commit
This commit is contained in:
@@ -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("<html> Connections are not allowed from: " ~ cgi.remoteAddress ~ "</html>");
|
||||||
|
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("<html> successfully ran script.</html>");
|
||||||
|
} else {
|
||||||
|
cgi.write("<html> Failed to run script.</html>");
|
||||||
|
}
|
||||||
|
writeln("done with script");
|
||||||
|
} else {
|
||||||
|
writeln("site path doesn't exist.");
|
||||||
|
cgi.write("<html> Hello " ~ cgi.remoteAddress ~ " The host: " ~ host ~ " is not configured.</html>");
|
||||||
|
}
|
||||||
|
} 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();
|
||||||
|
}
|
||||||
Executable
+1
@@ -0,0 +1 @@
|
|||||||
|
echo "Hello there!"
|
||||||
Reference in New Issue
Block a user