slitaz-dev-tools annotate taztpd/taztpd @ rev 309

Remove ashism ==
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Feb 26 08:23:49 2019 +0100 (2019-02-26)
parents 116c7b18fea2
children
rev   line source
pankso@63 1 #!/bin/sh
pankso@63 2 #
pankso@63 3 # TazTPD - The SliTaz micro HTTP Web Server all in SHell script
pankso@63 4 #
pankso@63 5 # (C) 2011 SliTaz GNU/Linux - GNU gpl v2
pankso@63 6 #
pankso@63 7 # AUTHOR: Christophe Lincoln
pankso@63 8 #
pankso@63 9
paul@167 10 # Personal configuration overwrites system wide config.
pankso@63 11 [ -f "/etc/slitaz/taztpd.conf" ] && . /etc/slitaz/taztpd.conf
pankso@63 12 [ -f "taztpd.conf" ] && . taztpd.conf
pankso@63 13
pankso@63 14 # Web Server functions
pankso@63 15
pankso@63 16 # Output standardized header for valid requests
pankso@63 17 http_header() {
pankso@63 18 cat << EOT
pankso@63 19 HTTP/1.1 200 OK
pankso@63 20 EOT
pankso@63 21 }
pankso@63 22
pankso@63 23 html_header() {
pankso@63 24 cat << EOT
pankso@63 25 Content-Type: text/html
pankso@63 26
pankso@63 27 EOT
pankso@63 28 }
pankso@63 29
pankso@63 30 text_header() {
pankso@63 31 cat << EOT
pankso@63 32 Content-Type: text/plain
pankso@63 33
pankso@63 34 EOT
pankso@63 35 }
pankso@63 36
pankso@63 37 # List all files in a directory
pankso@63 38 directory_listing() {
pankso@63 39 cat << EOT
pankso@63 40 <!DOCTYPE html>
pankso@63 41 <html xmlns="http://www.w3.org/1999/xhtml">
pankso@63 42 <head>
pankso@63 43 <title>Index of $url</title>
pankso@63 44 <meta charset="utf-8" />
pankso@63 45 `css_style`
pankso@63 46 </head>
pankso@63 47 EOT
pankso@63 48 echo -e "<h1>$PAGE_HEADING $url</h1>"
pankso@63 49 echo "<ul>"
pankso@63 50 if [ "$url" != "/" ]; then
pankso@63 51 echo " <li><a href=\"../\">$PARENT_DIR/</a></li>"
pankso@63 52 fi
pankso@63 53 (cd ${SERVER_ROOT}$url && ls -p | while read line
pankso@63 54 do
pankso@63 55 echo " <li><a href=\"$line\">$line</a></li>"
pankso@63 56 done)
pankso@63 57 echo -e "</ul>"
pankso@63 58 taztpd_footer
pankso@63 59 echo -e "</body>\n</html>"
pankso@63 60 }
pankso@63 61
pankso@63 62 # Handled by an external CSS file
pankso@63 63 css_style() {
pankso@63 64 echo '<style type="text/css">'
pankso@63 65 cat $SERVER_CSS
pankso@63 66 echo '</style>'
pankso@63 67 }
pankso@63 68
pankso@63 69 taztpd_footer() {
pankso@63 70 echo "<div id=\"footer\">$SERVER_NAME</div>"
pankso@63 71 }
pankso@63 72
pankso@63 73 # Handle file type by extension
pankso@63 74 handle_filetype() {
pankso@63 75 case $file in
pankso@63 76 # Check for HTML first for fast anser (most requests)
pankso@63 77 *.html|*.htm) type="text/html";;
pankso@63 78 *.css) type="text/css" ;;
pankso@63 79 *.xml) type="text/xml" ;;
pankso@63 80 *.jpg|*.jpeg) type="image/jpeg" ;;
pankso@63 81 *.png) type="image/png" ;;
pankso@63 82 *.tar.gz) "application/x-tgz" ;;
pankso@63 83 *.tazpkg) "application/x-tazpkg" ;;
pankso@63 84 *)
pankso@63 85 # Default to plain text document
pankso@63 86 type=text/plain ;;
pankso@63 87 esac
pankso@63 88 cat << EOT
pankso@63 89 Content-Type: $type
pankso@63 90
pankso@63 91 EOT
pankso@63 92 }
pankso@63 93
pankso@63 94 # Server main function
pankso@63 95 read_request() {
pankso@63 96 # Record the HTTP request
pankso@63 97 read request
pankso@63 98 while /bin/true; do
pankso@63 99 read header
pascal@309 100 [ "$header" = $'\r' ] && break;
pankso@63 101 done
pankso@63 102 # Extract URL from the request string
pankso@63 103 url="${request#GET }"
pankso@63 104 url="${url% HTTP/*}"
pankso@63 105 query="${url#*\?}"
pankso@63 106 url="${url%%\?*}"
pankso@63 107 # Handle CGI scripts
pankso@63 108 if [ "$query" != "$url" -a -x "$file" ]; then
pankso@63 109 export QUERY_STRING="$query"
pankso@63 110 http_header
pankso@63 111 exec "$file"
pankso@63 112 echo -e "\r"
pankso@63 113 exit 0
pankso@63 114 fi
pankso@63 115 # Locate the wanted file
pankso@63 116 file="${SERVER_ROOT}$url"
pankso@63 117 # First try to display requested page
pankso@63 118 if [ -f "$file" ]; then
pankso@63 119 http_header
pankso@63 120 handle_filetype
pankso@63 121 cat "$file"
pankso@63 122 echo -e "\r" && exit 0
pankso@63 123 fi
pankso@63 124 # Requested URL may be a directory
pankso@63 125 if [ -d "$file" ]; then
pankso@63 126 http_header
pankso@63 127 if [ -f "$file/index.html" ]; then
pankso@63 128 file=$file/index.html
pankso@63 129 echo -e "Content-Type: text/html\r"
pankso@63 130 echo -e "\r"
pankso@63 131 cat "$file"
pankso@63 132 echo -e "\r" && exit 0
pankso@63 133 fi
pankso@63 134 html_header
pankso@63 135 directory_listing
pankso@63 136 echo -e "\r"
pankso@63 137 # 404 error
pankso@63 138 else
pankso@63 139 cat << EOT
pankso@63 140 HTTP/1.1 404 Not Found
pankso@63 141 Content-Type: text/html
pankso@63 142
pankso@63 143 <!DOCTYPE html>
pankso@63 144 <html xmlns="http://www.w3.org/1999/xhtml">
pankso@63 145 <head>
pankso@63 146 <title>404 Not Found</title>
pankso@63 147 <meta charset="utf-8" />
pankso@63 148 `css_style`
pankso@63 149 </head>
pankso@63 150 <body>
pankso@63 151 <h1>404 Not Found</h1>
pankso@63 152 <p>$NOT_FOUND</p>
pankso@63 153 `taztpd_footer`
pankso@63 154 </body>
pankso@63 155 </html>
pankso@63 156 EOT
pankso@63 157 echo -e "\r"
pankso@63 158 fi
pankso@63 159 }
pankso@63 160
pankso@63 161 # Web Server commands
pankso@63 162
pankso@63 163 case $1 in
pankso@63 164 status|-s)
pankso@63 165 echo ""
pankso@63 166 ps | grep taztpd
pankso@63 167 echo "" ;;
pankso@63 168 dev|-d)
pankso@63 169 # Devel mode by keeping the hand
pankso@63 170 echo "Starting Web Server on port: $SERVER_PORT (dev mode)"
pankso@63 171 while true
pankso@63 172 do
slaxemulator@64 173 nc -l -p $SERVER_PORT -e /usr/bin/taztpd
pankso@63 174 done ;;
pankso@63 175 nc|-n)
pankso@63 176 # Use nc to listen on a port and execute TazTPD on a request
pankso@63 177 echo "Starting Web Server on port: $SERVER_PORT"
pankso@63 178 (while true
pankso@63 179 do
slaxemulator@64 180 nc -l -p $SERVER_PORT -e /usr/bin/taztpd
pankso@63 181 done) & ;;
pankso@63 182 usage|*help|-u|*-h)
pankso@63 183 # Display a short usage
pankso@63 184 echo "Usage: `basename $0` [status|dev|nc]" ;;
pankso@63 185 *)
pankso@63 186 read_request ;;
pankso@63 187 esac
pankso@63 188 exit 0