diff options
author | stanley lieber <stanley.lieber@gmail.com> | 2013-02-04 16:40:05 -0600 |
---|---|---|
committer | stanley lieber <stanley.lieber@gmail.com> | 2013-02-04 16:40:05 -0600 |
commit | c877493fb00717de1a22860d88efb75ebf14ebec (patch) | |
tree | cb3cb0e47598e2880cdd20367925102856d41a5d /rc/bin/rc-httpd/handlers/dir-index | |
parent | 0b212ed5054cd08bbc14a12936c07bc1ff5890a2 (diff) |
add rc-httpd
Diffstat (limited to 'rc/bin/rc-httpd/handlers/dir-index')
-rwxr-xr-x | rc/bin/rc-httpd/handlers/dir-index | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/rc/bin/rc-httpd/handlers/dir-index b/rc/bin/rc-httpd/handlers/dir-index new file mode 100755 index 000000000..39452bfd7 --- /dev/null +++ b/rc/bin/rc-httpd/handlers/dir-index @@ -0,0 +1,111 @@ +#!/bin/rc +PATH_INFO=`{echo $PATH_INFO | urlencode -d} +full_path=$"FS_ROOT^$"PATH_INFO +full_path=$"full_path +if(! test -d $full_path){ + error 404 + exit +} +if(! test -r $full_path -x $full_path){ + error 503 + exit +} +do_log 200 +builtin cd $full_path +if(~ $"NOINDEXFILE ^ $"NOINDEX ''){ + ifile=index.htm* + if(! ~ $ifile(1) *'*'){ + PATH_INFO=$ifile(1) + FS_ROOT='' + exec serve-static + } +} +title=`{echo $SITE_TITLE | sed s,%s,^$"PATH_INFO^,} +title=$"title +lso=() +switch($2){ +case size + # ls has no option to sort by size + # could pipe it through sort, I suppose +case date + lso=-t +} +echo 'HTTP/1.1 200 OK'^$cr +emit_extra_headers +echo 'Content-type: text/html'^$cr +echo $cr +echo '<html> +<head> +<title>'^$title^'</title> +<style type="text/css"> + .size { + text-align: right; + padding-right: 4pt; + } + .day { + text-align: right; + padding-right: 3pt; + } + .datetime { + text-align: right; + } + .name { + text-align: right; + padding-left: 3pt; + } +</style> +</head> +<body>' +echo '<h1>'^$title^'</h1>' +if(! ~ $PATH_INFO /) + echo '<a href="../">Parent directory</a>' +echo '<table>' +ls -lQ $lso | awk ' +function urlencode(loc){ + # very minimal encoding, just enough for our static-file purposes + url=loc + gsub("%", "%25", url) # this one first! + gsub("\\$", "%24", url) + gsub("&", "%26", url) + gsub("\\+", "%2B", url) + gsub("\\?", "%3F", url) + gsub(" ", "%20", url) + gsub("\"", "%22", url) + gsub("#", "%23", url) + return url +} +function hrsize(size){ + if(size > 1073741824) return sprintf("%.1fGB", size/1073741824) + if(size > 10485760) return sprintf("%iMB", size/1048576) + if(size > 1048576) return sprintf("%.1fMB", size/1048576) + if(size > 10240) return sprintf("%iKB", size/1024) + if(size > 1024) return sprintf("%.1fKB", size/1024) + return sprintf("%iB", size) +} +/^-/ { + print "<tr>" + print "<td class=\"size\">"hrsize($6)"</td>" + print "<td class=\"month\">"$7"</td>" + print "<td class=\"day\">"$8"</td>" + print "<td class=\"datetime\">"$9"</td>" + $1="" ; $2="" ; $3="" ; $4="" ; $5="" ; $6="" ; $7="" ; $8="" ; $9="" + sub("^ *?", "") + print "<td><a class=\"file name\" href=\""urlencode($0)"\">"$0"</a></td>" + print "</tr>" + $0="" +} +/^d/ { + print "<tr>" + print "<td class=\"size\"> </td>" + print "<td class=\"month\">"$7"</td>" + print "<td class=\"day\">"$8"</td>" + print "<td class=\"datetime\">"$9"</td>" + $1="" ; $2="" ; $3="" ; $4="" ; $5="" ; $6="" ; $7="" ; $8="" ; $9="" + sub("^ *?", "") + print "<td><a class=\"dir name\" href=\""urlencode($0)"/\">"$0"/</a></td>" + print "</tr>" +}' +echo '</table> + +</body> +</html>' |