reinvent the wheel
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
# Busybox HTTPD SH Server
|
||||||
|
|
||||||
|
A simple HTML templating SH solution that runs with just `httpd` and `sh` from `busybox`.
|
||||||
|
|
||||||
|
*(Note: Alpine Linux now splits Busybox into multiple packages: apk add busybox-extras)*
|
||||||
|
|
||||||
|
## Quickstart
|
||||||
|
|
||||||
|
Run the command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
busybox httpd -vv -fp 8080
|
||||||
|
```
|
||||||
|
|
||||||
|
And then open `http://localhost:8080` in your browser.
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<!--% cgi_env_vars="SERVER_SOFTWARE SERVER_NAME GATEWAY_INTERFACE SERVER_PROTOCOL SERVER_PORT REQUEST_METHOD PATH_INFO PATH_TRANSLATED SCRIPT_NAME QUERY_STRING REMOTE_HOST REMOTE_ADDR AUTH_TYPE REMOTE_USER REMOTE_IDENT CONTENT_TYPE CONTENT_LENGTH HTTP_ACCEPT HTTP_USER_AGENT" %-->
|
||||||
|
<h1>CGI running on <!--%= hostname %--></h1>
|
||||||
|
<h2><!--%= uname -a %--></h2>
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
<!--% for var in $(echo "$cgi_env_vars"); do %-->
|
||||||
|
<li><!--%= $var %-->: <!--% eval "echo -n \"\$$var\"" %--></li>
|
||||||
|
<!--% done %-->
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<!--% if [ "$QUERY_STRING" = "dump" ]; then %-->
|
||||||
|
<a href="<!--%= $SCRIPT_NAME %-->">Hide env dump</a>
|
||||||
|
<pre><!--% echo -n "$(env | sort)" %--></pre>
|
||||||
|
<!--% else %-->
|
||||||
|
<a href="<!--%= $SCRIPT_NAME %-->?dump">Show env dump</a>
|
||||||
|
<!--% fi %-->
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
I:index.htm
|
||||||
|
*.server_core_internal:/dev/null
|
||||||
|
*.html:./interpreter.server_core_internal
|
||||||
|
*.sh:/bin/sh
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="refresh" content="0; url=./index.sh">
|
||||||
|
<style>html, body { background: black; }</style>
|
||||||
|
</head>
|
||||||
|
<body></body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
echo "Content-Type: text/html"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "<h1>Busybox HTTPD SH Server</h1>"
|
||||||
|
echo "<p>For total control, scripts like this (/index.sh) can be written.</p>"
|
||||||
|
echo "<p>A demo of a more template-like page is at <a href="cgiinfo.html">cgiinfo.html</a></p>"
|
||||||
Executable
+60
@@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
server_core_internal_file="${1:-index.html}"
|
||||||
|
|
||||||
|
echo "Content-Type: text/html"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
server_core_internal_built_script=""
|
||||||
|
server_core_internal_unit_separator="$(printf '\x1F')"
|
||||||
|
server_core_internal_i=1
|
||||||
|
while IFS= read -r server_core_internal_line; do
|
||||||
|
server_core_internal_line=$(echo "$server_core_internal_line" | sed -E 's/<!--%=[ ]*\$([^ ]*)[ ]*%-->/<!--% echo -n "\$\1" %-->/g; s/<!--%=[ ]*(.*[^ ])[ ]*%-->/<!--% echo -n "$(\1)" %-->/g')
|
||||||
|
if [ -n "$(echo "$server_core_internal_line" | grep '^<!--%')" ]; then
|
||||||
|
if [ "$(expr "$server_core_internal_i" % 2)" -eq 0 ]; then
|
||||||
|
server_core_internal_i=$(expr "$server_core_internal_i" + 1)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
server_core_internal_parts=$(echo "$server_core_internal_line" | sed "s/<\!--%[ ]*/$server_core_internal_unit_separator/g; s/[ ]*%-->/$server_core_internal_unit_separator/g")
|
||||||
|
server_core_internal_need_newline=0
|
||||||
|
|
||||||
|
if [ -z "$(echo "$server_core_internal_parts" | grep "$server_core_internal_unit_separator")" ]; then
|
||||||
|
server_core_internal_need_newline=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
OLD_IFS="$IFS"
|
||||||
|
IFS="$server_core_internal_unit_separator"
|
||||||
|
for server_core_internal_part in $server_core_internal_parts; do
|
||||||
|
if [ "$(expr "$server_core_internal_i" % 2)" -eq 0 ]; then
|
||||||
|
server_core_internal_built_script=$(printf '%s\n%s\n' "$server_core_internal_built_script" "$server_core_internal_part")
|
||||||
|
server_core_internal_need_newline=0
|
||||||
|
else
|
||||||
|
if [ -n "$(echo "$server_core_internal_part" | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//')" ]; then
|
||||||
|
server_core_internal_built_script=$(printf '%s\n%s\n' "$server_core_internal_built_script" "printf '%s' '$server_core_internal_part'")
|
||||||
|
if [ "$server_core_internal_need_newline" -eq 0 ]; then
|
||||||
|
server_core_internal_need_newline=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
server_core_internal_i=$(expr "$server_core_internal_i" + 1)
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$(echo "$server_core_internal_line" | grep '%-->$')" ]; then
|
||||||
|
server_core_internal_i=$(expr "$server_core_internal_i" + 1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$(echo "$server_core_internal_line" | grep '<!--%$')" ]; then
|
||||||
|
server_core_internal_i=$(expr "$server_core_internal_i" + 1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$server_core_internal_need_newline" -eq 1 ]; then
|
||||||
|
server_core_internal_built_script=$(printf '%s\n%s\n' "$server_core_internal_built_script" "printf '%s\n' ''")
|
||||||
|
fi
|
||||||
|
|
||||||
|
server_core_internal_i=$(expr "$server_core_internal_i" + 1)
|
||||||
|
IFS="$OLD_IFS"
|
||||||
|
done < "$server_core_internal_file"
|
||||||
|
|
||||||
|
eval "$server_core_internal_built_script"
|
||||||
Reference in New Issue
Block a user