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 |