");
// first, see if we have something that wants to handle url outright
foreach (StaticRegex!char reg, string h; handlers) {
if (match(url, reg)) {
html(shell(dweb_root ~ "/bin/" ~ h ~ " " ~ url));
html_pop("
");
return;
}
}
// if that failed, see if we can handle the file
if (url == "" ? true : url[$-1] == '/') url ~= "index";
foreach (f; array(map!"a.name"(dirEntries(dirName(dweb_root ~ "/srv/" ~ url), SpanMode.shallow)))) {
if (isDir(f)) continue;
string name = baseName(f); name = name[0] == '@' ? name[1..$] : name;
if (stripExtension(name) == baseName(url)) {
foreach (StaticRegex!char reg, string h; handlers) {
if (match(name, reg)) {
html(shell(dweb_root ~ "/bin/" ~ h ~ " " ~ f));
html_pop("");
return;
}
}
}
}
if (baseName(url) != "index") not_found(url);
html_pop("");
}
void do_footer() {
html_push("\n");
}
bool evil(string s) {
foreach(char c; s) if (!isAlphaNum(c) && c != '/' && c != '-' && c != '_') return true;
return false;
}
void main(string[] args) {
init_handlers();
dweb_root = getcwd()[0..$-4]; // take out bin/
html("Content-type: text/html\n");
html("");
html_push("\n");
string url = getenv("REQUEST_URI")[url_root.length..$];
if (evil(url)) { html ("bad url."); return; }
string pagename = baseName(url);
if (pagename.length != 0) pagename = " - " ~ pagename;
pagename = site_title ~ pagename;
html_push("");
html("" ~ pagename ~ "");
html("");
html("");
html("");
html_pop("\n");
html_push("");
html_push("