diff options
| author | Maks Jopek <maks@jopek.eu> | 2026-07-11 00:48:14 +0200 |
|---|---|---|
| committer | Maks Jopek <maks@jopek.eu> | 2026-07-11 00:49:00 +0200 |
| commit | a51e2c24a927fea0af92677d8fba7015bd4e4ccd (patch) | |
| tree | 3fd60d5e476b0039d12e7ba70c0282b447f52447 /cgi-bin | |
| download | puszcza.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-x | cgi-bin/delete-file.py | 15 | ||||
| -rwxr-xr-x | cgi-bin/list-files.py | 9 | ||||
| -rwxr-xr-x | cgi-bin/upload.py | 23 |
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)) |
