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/upload.py | |
| 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/upload.py')
| -rwxr-xr-x | cgi-bin/upload.py | 23 |
1 files changed, 23 insertions, 0 deletions
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)) |
