]> git.plutz.net Git - cookieproxy/commitdiff
cookieproxy master
authorPaul Hänsch <paul@plutz.net>
Sun, 2 Nov 2025 00:28:25 +0000 (01:28 +0100)
committerPaul Hänsch <paul@plutz.net>
Sun, 2 Nov 2025 00:28:25 +0000 (01:28 +0100)
proxy.sh [new file with mode: 0755]

diff --git a/proxy.sh b/proxy.sh
new file mode 100755 (executable)
index 0000000..e4f2ecd
--- /dev/null
+++ b/proxy.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+. ${0%/*}/cgilite/cgilite.sh
+# . ${_EXEC}/cgilite/session.sh
+
+proxydest=''
+checkid(){ { [ $# -gt 0 ] && printf %s "$*" || cat; } | grep -m 1 -xE '[0-9a-zA-Z:=]{16}'; }
+
+for arg in "$@"; do case $arg in
+  http://*/*) proxydest="$arg"
+  ;;
+esac; done
+
+authkey="$(GET akey |checkid)"
+
+if [ "${authkey}" ]; then
+  SET_COOKIE session authkey="$authkey"
+  REDIRECT "$PATH_INFO"
+fi
+
+authkey="$(COOKIE authkey |checkid)"
+
+if ! grep -qxF "$authkey" "$_DATA/authkeys"; then
+  debug 404
+  cat <<-404page
+       Status: 404 Forbidden$CR
+       Content-Type: text/plain$CR
+       $CR
+       No authkey provided$CR
+       404page
+  exit 0
+fi
+
+proxy_location='' proxy_port='' proxy_domain=''
+
+proxy_location="${proxydest#*://}" proxy_location="/${proxy_location#*/}"
+proxy_port="${proxydest#*://}" proxy_port="${proxy_port%%/*}" proxy_port="${proxy_port##*:}"
+[ "${proxy_port}" -gt 0 -a "${proxy_port}" -lt 65536 ] 2>/dev/null || proxy_port=80
+proxy_domain="${proxydest#*://}" proxy_domain="${proxy_domain%%/*}" proxy_domain="${proxy_domain%:*}"
+
+proxy_headers=$(printf '%s\n' "$cgilite_headers" |sed '/^Host:/d; s;^Connection: keep-alive;Connection: close;; s;$;\r;')
+
+{ head -c -1 | nc "${proxy_domain}" "${proxy_port}" | sed '1s;^HTTP/1.1 ;Status: ;'; }<<-endnc
+       ${REQUEST_METHOD} ${proxy_location%/}/${PATH_INFO#/} ${SERVER_PROTOCOL}$CR
+       Host: ${proxy_domain}:${proxy_port}$CR
+       ${proxy_headers}
+       $(if [ $REQUEST_METHOD = POST -a ${CONTENT_LENGTH:-0} -gt 0 -a "${CONTENT_TYPE}" = "application/x-www-form-urlencoded" ]; then
+         printf %s "${cgilite_post}"
+       elif [ ${CONTENT_LENGTH:-0} -gt 0 ]; then
+         debug Content-Non-POST
+         cat
+       fi)
+       endnc