summaryrefslogtreecommitdiffstats
path: root/cgi-bin
diff options
context:
space:
mode:
authorMaks Jopek <maks@jopek.eu>2026-07-11 00:48:14 +0200
committerMaks Jopek <maks@jopek.eu>2026-07-11 00:49:00 +0200
commita51e2c24a927fea0af92677d8fba7015bd4e4ccd (patch)
tree3fd60d5e476b0039d12e7ba70c0282b447f52447 /cgi-bin
downloadpuszcza.jopek.eu-a51e2c24a927fea0af92677d8fba7015bd4e4ccd.tar.gz
puszcza.jopek.eu-a51e2c24a927fea0af92677d8fba7015bd4e4ccd.tar.zst
puszcza.jopek.eu-a51e2c24a927fea0af92677d8fba7015bd4e4ccd.zip
Initial commit
Diffstat (limited to 'cgi-bin')
-rwxr-xr-xcgi-bin/delete-file.py15
-rwxr-xr-xcgi-bin/list-files.py9
-rwxr-xr-xcgi-bin/upload.py23
3 files changed, 47 insertions, 0 deletions
diff --git a/cgi-bin/delete-file.py b/cgi-bin/delete-file.py
new file mode 100755
index 0000000..cdb6588
--- /dev/null
+++ b/cgi-bin/delete-file.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+import os
+from urllib.parse import parse_qs
+
+print("Content-Type: application/json; charset=utf-8")
+print("")
+
+query = parse_qs(os.environ.get('QUERY_STRING', ''))
+if "filename" in query:
+ filename = query["filename"][0]
+ if "/" in filename:
+ exit()
+ os.remove("uploads/" + filename)
+
+print('{"ok": true}')
diff --git a/cgi-bin/list-files.py b/cgi-bin/list-files.py
new file mode 100755
index 0000000..15d6391
--- /dev/null
+++ b/cgi-bin/list-files.py
@@ -0,0 +1,9 @@
+#!/usr/bin/env python
+import json, os
+
+print("Content-Type: application/json; charset=utf-8")
+print("")
+
+dir_list = os.listdir("uploads")
+
+print(json.dumps(dir_list))
diff --git a/cgi-bin/upload.py b/cgi-bin/upload.py
new file mode 100755
index 0000000..f137cc7
--- /dev/null
+++ b/cgi-bin/upload.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+import sys, os
+from email.parser import BytesParser
+from email.policy import default
+
+print("Content-Type: text/html; charset=utf-8")
+print("")
+
+CONTENT_LENGTH = os.environ.get("CONTENT_LENGTH")
+CONTENT_TYPE = os.environ.get("CONTENT_TYPE")
+if CONTENT_TYPE is None or CONTENT_LENGTH is None:
+ exit()
+
+length = int(CONTENT_LENGTH)
+raw = b"Content-Type: " + CONTENT_TYPE.encode() + b"\r\n\r\n" + sys.stdin.buffer.read(length)
+msg = BytesParser(policy=default).parsebytes(raw)
+
+for part in msg.iter_parts():
+ name = part.get_filename()
+ if name is None:
+ continue
+ with open(os.path.join("uploads", os.path.basename(name)), "wb") as f:
+ f.write(part.get_payload(decode=True))