initial commit
This commit is contained in:
56
serve.sh
Executable file
56
serve.sh
Executable file
@ -0,0 +1,56 @@
|
||||
#!/bin/bash
|
||||
|
||||
source status_codes.sh
|
||||
|
||||
declare -A request_headers
|
||||
declare -A response_headers
|
||||
|
||||
write_response_headers() {
|
||||
local status=$1
|
||||
echo -ne "HTTP/1.1 ${status} ${status_code[${status}]}\r\n"
|
||||
for header in "${!response_headers[@]}"; do
|
||||
echo -ne "${header}: ${response_headers["${header}"]}\r\n"
|
||||
done
|
||||
echo -ne "\r\n"
|
||||
}
|
||||
|
||||
IFS=' ' read -r method route version;
|
||||
|
||||
echo $method $route >/dev/stderr
|
||||
if [ "${method}" != 'GET' ]; then
|
||||
write_response_headers 405
|
||||
./error-page.sh 405
|
||||
fi
|
||||
|
||||
IFS=$'\n'
|
||||
while read -r line; do
|
||||
[[ "$line" == $'\r' ]] && break
|
||||
header=${line%%:*}
|
||||
value=${line#:*}
|
||||
request_headers["${header}"]="${value}"
|
||||
done
|
||||
|
||||
for header in "${!request_headers[@]}"; do
|
||||
echo "${header} -> ${request_headers["${header}"]}" >/dev/stderr
|
||||
done
|
||||
|
||||
if [[ "${route}" == "/" ]]; then
|
||||
response_headers["Content-Type"]="text/html"
|
||||
write_response_headers 200
|
||||
echo "$(www/index.sh)";
|
||||
fi
|
||||
|
||||
if [[ -f "www${route}" ]]; then
|
||||
if [[ "www${route}" == *.sh ]]; then
|
||||
write_response_headers 200
|
||||
echo "$(www"${route}")"
|
||||
else
|
||||
write_response_headers 200
|
||||
cat "www${route}"
|
||||
fi
|
||||
else
|
||||
if [[ "${route}" != "/" ]]; then
|
||||
write_response_headers 404
|
||||
./error-page.sh 404
|
||||
fi
|
||||
fi
|
Reference in New Issue
Block a user