-#!/bin/zsh
+#!/bin/sh
# Copyright 2016 - 2018 Paul Hänsch
#
# You should have received a copy of the GNU Affero General Public License
# along with cgilite. If not, see <http://www.gnu.org/licenses/>.
+[ -n "$include_fileserve" ] && return 0
+include_fileserve="$0"
+
file_type(){
case ${1##*.} in
html|html) printf 'text/html';;
}
FILE(){
- unset range file_size file_date http_date cachedate
+ local file file_size file_date http_date cachedate range
file="$1"
if ! [ -f "$file" ]; then
- printf 'Status: 404 Not Found\r\n\r\n'
+ printf 'Content-Length: 0\r\nStatus: 404 Not Found\r\n\r\n'
exit 0
elif ! [ -r "$file" ]; then
- printf 'Status: 403 Forbidden\r\n\r\n'
+ printf 'Content-Length: 0\r\nStatus: 403 Forbidden\r\n\r\n'
exit 0
fi
s;^[^ ]+ (...) ([0-9]) (..:..:..) ([0-9]{4})$;\4-\1-\2 \3;;
s;Jan;01;; s;Feb;02;; s;Mar;03;; s;Apr;04;; s;May;05;; s;Jun;06;;
s;Jul;07;; s;Aug;08;; s;Sep;09;; s;Oct;10;; s;Nov;11;; s;Dec;12;;' \
- | xargs -0 date +%s -ud 2>&-
+ | xargs -r0 date +%s -ud 2>&-
)"
range="$(HEADER Range |sed -nr 's;^bytes=([0-9]+-[0-9]*|-[0-9]+)$;\1;p;q;')"
if [ "$file_date" -lt "$cachedate" ] 2>&-; then
printf '%s: %s\r\n' \
Status '304 Not Modified' \
+ Content-Length 0 \
Last-Modified "$http_date"
printf '\r\n'
[ "$REQUEST_METHOD" != HEAD ] \
&& tail -c+$((${range%-*} + 1)) "$file" \
- | head -c "$((${range#*-} - ${range%-*} + 1))"
+ | head -c "$((${range#*-} - ${range%-*} + 1))"
elif [ "${range%-*}" -gt "${range#*-}" ]; then
printf '%s: %s\r\n' \
Status "216 Range Not Satisfiable" \
+ Content-Length 0 \
Content-Range \*/${file_size}
printf '\r\n'
fi