diff --git a/README.md b/README.md index 6bd773e..01f9601 100644 --- a/README.md +++ b/README.md @@ -23,3 +23,6 @@ An usable bash-httpserver with easy configuration and PHP. * `cd ~/simpsh-httpd` * `./start-socat.sh` 6. Have fun with simpsh-httpd! + + +Tip: You don't need to restart simpsh-httpd after update-/configchange! diff --git a/config.sh b/config.sh index d153786..29326ff 100644 --- a/config.sh +++ b/config.sh @@ -1,19 +1,22 @@ #! /bin/bash # Wo ist der Webroot (Hauptverzeichniss)? -export FILES="/var/www/html" +FILES="/var/www/html/" # Wie soll der Titel der Dateiliste sein, die aufgerufene URL ist in $URL enthalten. -export HTMLTITLE="Datei: $URL" +HTMLTITLE="Datei: $URL" # Wo soll das Fertige HTML-Dokument gespeichert werden? Die Variable $OUTFILEID muss enthalten sein! -export OUTFILE="/tmp/simpsh-html.${OUTFILEID}.html" +OUTFILE="/tmp/simpsh-html.${OUTFILEID}.html" # Welcher Content-Type soll bei einem Unbekannten Dateityp gesendet werden? -export DEFAULTCONTENTTYPE="text/html" +DEFAULTCONTENTTYPE="text/html" # Port zum lauschen (Falls start-socat.sh als startscript verwendet wird) -export PORT=8888 +PORT=8888 # Wie heisst die Webseite (URL des obersten Verzeichnis)? -export WEBSITE="http://localhost:$PORT" +WEBSITE="http://localhost:$PORT" + +# Statuscode-Seiten (Müssen txt-Dateien sein) +ERROR404="${FILES}/404.txt" diff --git a/filelist.sh b/filelist.sh index 872cbce..0063f3c 100644 --- a/filelist.sh +++ b/filelist.sh @@ -2,7 +2,7 @@ status="$URL" -# Statisches HTML +# Dynamisches HTML echo ' '"${HTMLTITLE}"' @@ -11,8 +11,6 @@ echo '

'"$status"'

Directory list:


..
' >> $OUTFILE - -# Erstelle Dateiliste im HTML-Format for i in $( ls "${FILE}" ); do echo ' '"${i}"'
' >> $OUTFILE done diff --git a/httpheaders.sh b/httpheaders.sh index 0a0021f..0a9ae03 100644 --- a/httpheaders.sh +++ b/httpheaders.sh @@ -1,5 +1,5 @@ #! /bin/bash -echo "$ANSWER" >> $OUTFILE +echo "$STATUS" >> $OUTFILE echo 'Date: '"$(date)" >> $OUTFILE echo 'Server: httpd' >> $OUTFILE echo 'Content-Type: '"$CONTENTTYPE" >> $OUTFILE diff --git a/init.sh b/init.sh index d8420da..6ad83b2 100644 --- a/init.sh +++ b/init.sh @@ -1,3 +1,4 @@ #! /bin/bash -export OUTFILEID="$RANDOM" +STATUS="HTTP/1.0 200 OK" +OUTFILEID="$RANDOM" diff --git a/main.sh b/main.sh index a9eba16..ae96e85 100644 --- a/main.sh +++ b/main.sh @@ -9,7 +9,7 @@ # Lese HTTP-Anfrage . ./readrequest.sh -# Eine kurze sicherheutsüberprüfung... +# Und vieles andere... . ./urlcheck.sh # Wenn das Dokument schon fertig ist, dann den folgenden Schritt überspringen diff --git a/readrequest.sh b/readrequest.sh index ad41f7f..ef28783 100644 --- a/readrequest.sh +++ b/readrequest.sh @@ -6,4 +6,6 @@ read header # Verarbeite den request URL="${header#GET }" URL="${URL% HTTP/*}" -export FILE="$FILES$URL" +FILE="$FILES$URL" +DECODED_FILE=$(printf '%b' "${FILE//%/\\x}") +FILE="$DECODED_FILE" diff --git a/sendfile.sh b/sendfile.sh index 79660af..16f8020 100644 --- a/sendfile.sh +++ b/sendfile.sh @@ -2,18 +2,15 @@ # Überprüfe: Muss eine Dateiliste ausgegeben werden? Ist es ein PHP-script? if [[ "$FILE" == *.php ]]; then - export ANSWER="HTTP/1.0 200 OK" - export CONTENTTYPE="text/html" + CONTENTTYPE="text/html" . ./httpheaders.sh php "$FILE" >> $OUTFILE elif [ -f "${FILE}" ]; then - export ANSWER="HTTP/1.0 200 OK" - export CONTENTTYPE="$DEFAULTCONTENTTYPE" + CONTENTTYPE="$DEFAULTCONTENTTYPE" . ./httpheaders.sh cat "${FILE}" >> ${OUTFILE} else - export ANSWER="HTTP/1.0 200 OK" - export CONTENTTYPE="text/html" + CONTENTTYPE="text/html" . ./httpheaders.sh . ./filelist.sh fi diff --git a/urlcheck.sh b/urlcheck.sh index 99f07d1..7e8bba3 100644 --- a/urlcheck.sh +++ b/urlcheck.sh @@ -2,29 +2,36 @@ # Blockiere Versuche, das restliche Dateisystem zu lesen if [[ "$URL" == *..* ]]; then - export URL='/' - export FILE="$FILES" + URL='/' + FILE="$FILES" fi # Verhindere "/"-bug if [ -d "$FILE" ]; then if [[ "$URL" != */ ]]; then - export ANSWER='HTTP/1.0 302 Moved permanently + STATUS='HTTP/1.0 302 Moved permanently Location: '"${WEBSITE}${URL}"'/' - export CONTENTTYPE="$DEFAULTCONTENTTYPE" + CONTENTTYPE="$DEFAULTCONTENTTYPE" . ./httpheaders.sh - export DONE=true + DONE=true fi fi -# Erkenne index.html +# Finde index.html if [ -f "${FILE}index.html" ]; then - export URL="${URL}index.html" - export FILE="${FILE}index.html" + URL="${URL}index.html" + FILE="${FILE}index.html" fi -# Erkenne index.php +# Finde index.php if [ -f "${FILE}index.php" ]; then - export URL="${URL}index.php" - export FILE="${FILE}index.php" + URL="${URL}index.php" + FILE="${FILE}index.php" +fi + +# Antworte 404 Not Found wenn Datei nicht existiert +if [ ! -e "$FILE" ]; then + STATUS='HTTP/1.0 404 Not Found' + CONTENTTYPE='text/plain' + FILE="$ERROR404" fi diff --git a/writehtml.sh b/writehtml.sh index 96e5072..642a7be 100644 --- a/writehtml.sh +++ b/writehtml.sh @@ -16,5 +16,5 @@ elif [ -f "${FILE}" ]; then else export CONTENTTYPE="text/html" . ./httpheaders.sh - . ./htmlfilelist.sh + . ./filelist.sh fi