#!/bin/bash
dynamic_request () {
export QUERY_STRING="$query"
echo -e "HTTP/1.1 200 OK\r"
"$filename"
echo -e "\r"
exit 0
}
static_request() {
echo -e "HTTP/1.1 200 OK\r"
echo -e "Content-Type: `/usr/bin/file -bi \"$filename\"`\r"
echo -e "\r"
cat "$filename"
echo -e "\r"
}
dir_list() {
echo -e "HTTP/1.1 200 OK\r"
echo -e "Content-Type: text/html\r"
echo -e "\r"
echo -e "
Index of $url
\r"
echo -e "
"
echo -e "Details Name\r"
echo -e "
"
( cd "$filename"
for f in `ls`; do
desc=`ls -lah "$f"`
desc=${desc% '$f'}
href="${url%/}/$f"
echo -e "$desc
"$f"\r"
echo -e "
"
done
)
echo -e "\r"
echo -e "\r"
echo -e "
Powered by Bourne-Again Shell webserver\r"
}
404_page () {
echo -e "HTTP/1.1 404 Not Found\r"
echo -e "Content-Type: text/html\r"
echo -e "\r"
echo -e "404 Not Found
\r"
echo -e "The requested resource was not found\r"
echo -e "
Powered by Bourne-Again Shell webserver\r"
}
base=/var/www
read request
while /bin/true; do
read header
[ "$header" == $'\r' ] && break;
done
url="${request#GET }"
url="${url% HTTP/*}"
query="${url#*\?}"
url="${url%%\?*}"
filename="$base$url"
if [ "$query" != "$url" -a -x "$filename" ]; then
dynamic_request;
fi
if [ -f "$filename" ]; then
if [ -x "$filename" ]; then
dynamic_request;
fi
static_request;
else
if [ -d "$filename" ]; then
if [ -f "$filename/index.html" ]; then
filename="${filename}/index.html"
if [ -x "$filename" ]; then
dynamic_request;
fi
static_request;
else
dir_list;
fi
else
404_page;
fi
fi