summaryrefslogtreecommitdiff
path: root/rc/bin/rc-httpd/handlers/serve-static
blob: 119665ee35102e38696b329fd19ca6555b813bd8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/rc
full_path=`{echo $"FS_ROOT^$"PATH_INFO | urlencode -d}
full_path=$"full_path
if(~ $full_path */)
	error 503
if(test -d $full_path){
	redirect perm $"location^'/' \
		'URL not quite right, and browser did not accept redirect.'
	exit
}
if(! test -e $full_path){
	error 404
	exit
}
if(! test -r $full_path){
	error 503
	exit
}
do_log 200
switch($full_path){
case *.html *.htm
        type=text/html
case *.css
        type=text/css
case *.txt *.md
        type=text/plain
case *.jpg *.jpeg
        type=image/jpeg
case *.gif
        type=image/gif
case *.png
        type=image/png
case *
        type=`{file -m $full_path}
}
if(~ $type text/*)
	type=$type^'; charset=utf-8'
max_age=3600	# 1 hour
echo 'HTTP/1.1 200 OK'^$cr
emit_extra_headers
echo 'Content-type: '^$type^$cr
echo 'Content-length: '^`{ls -l $full_path | awk '{print $6}'}^$cr
echo 'Cache-control: max-age='^$max_age^$cr
echo $cr
exec cat $full_path