reinvent the wheel

This commit is contained in:
2025-07-23 01:37:37 +02:00
commit 414b8be261
6 changed files with 111 additions and 0 deletions
+15
View File
@@ -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.
+17
View File
@@ -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 %-->
+4
View File
@@ -0,0 +1,4 @@
I:index.htm
*.server_core_internal:/dev/null
*.html:./interpreter.server_core_internal
*.sh:/bin/sh
+7
View File
@@ -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>
+8
View File
@@ -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>"
+60
View File
@@ -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"