initial commit

This commit is contained in:
gnat
2025-02-19 13:10:05 -08:00
parent 9d52ebbbb1
commit 8db4f2f84e
9 changed files with 657 additions and 0 deletions

56
serve.sh Executable file
View 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