summaryrefslogtreecommitdiff
path: root/cgi-bin
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2019-02-17 10:44:06 +0000
committerDaniel Silverstone <dsilvers@digital-scurf.org>2019-02-17 10:44:11 +0000
commit2b2a8da3a2fb2a56422baf1d6588fc46852c8b5c (patch)
tree7436efffef09650093067e701b1b9d1bb956f1f5 /cgi-bin
parent04f1d255d72466724468a876cfff46f73f560a9c (diff)
downloadnetsurf-test-2b2a8da3a2fb2a56422baf1d6588fc46852c8b5c.tar.gz
netsurf-test-2b2a8da3a2fb2a56422baf1d6588fc46852c8b5c.tar.bz2
Initial env.cgi
Diffstat (limited to 'cgi-bin')
-rwxr-xr-xcgi-bin/env.cgi65
1 files changed, 65 insertions, 0 deletions
diff --git a/cgi-bin/env.cgi b/cgi-bin/env.cgi
new file mode 100755
index 0000000..ffd6785
--- /dev/null
+++ b/cgi-bin/env.cgi
@@ -0,0 +1,65 @@
+#!/usr/bin/python3
+
+import cgi
+import cgitb
+import os
+import sys
+import io
+
+cgitb.enable()
+
+print("Content-Type: text/plain")
+print("")
+
+permitted_env = set([
+ "DOCUMENT_ROOT",
+ "QUERY_STRING",
+ "GATEWAY_INTERFACE",
+])
+
+permitted_prefix = [
+ "HTTP",
+ "REQUEST_",
+ "SERVER_",
+ "REMOTE_",
+ "SCRIPT_",
+ "PATH_",
+ "AUTH_",
+ "CONTENT_",
+]
+
+for k in sorted(os.environ.keys()):
+ if k in permitted_env or any((k.startswith(p) for p in permitted_prefix)):
+ print("ENV:{}:{}".format(k, os.environ[k]))
+
+if "QUERY_STRING" in os.environ:
+ qs = cgi.parse_qs(os.getenv("QUERY_STRING"))
+ for k, vs in qs.items():
+ for i, v in enumerate(vs):
+ if len(vs) > 1:
+ idx = "[{}]".format(i)
+ else:
+ idx = ""
+ print("QS:{}{}:{}".format(k, idx, v))
+
+stdin_content = sys.stdin.buffer.read()
+
+print("STDIN:START")
+sys.stdout.flush()
+sys.stdout.buffer.write(stdin_content)
+print("STDIN:END")
+
+valid_post_types = [
+ "application/x-www-form-urlencoded",
+ "multipart/form-data",
+]
+
+if os.environ.get("CONTENT_TYPE", "") in valid_post_types:
+ stdin_io = io.BytesIO(stdin_content)
+ fields = cgi.parse(stdin_io)
+ for k in sorted(fields.keys()):
+ print("POST:{}:{}".format(k, fields[k]))
+
+print("END")
+
+