diff options
-rw-r--r-- | fb.html | 5 | ||||
-rwxr-xr-x | hybrid.cgi | 48 |
2 files changed, 51 insertions, 2 deletions
diff --git a/fb.html b/fb.html new file mode 100644 index 0000000..d7b4d71 --- /dev/null +++ b/fb.html @@ -0,0 +1,5 @@ +<pre> +<form method="POST" action="/hybrid/fb" enctype="multipart/form-data"> +<input type="file" name="file" /> +<input type="submit" value="Submit"> +</form> diff --git a/hybrid.cgi b/hybrid.cgi index 6a7f487..2eb8d88 100755 --- a/hybrid.cgi +++ b/hybrid.cgi @@ -2,12 +2,16 @@ import sys import os +import cgi +import cgitb +cgitb.enable() CONTENT_LENGTH = os.environ["CONTENT_LENGTH"] CONTENT_TYPE = os.environ["CONTENT_TYPE"] DOCUMENT_ROOT = os.environ["DOCUMENT_ROOT"] PATH_INFO = os.environ["PATH_INFO"] DOCUMENT_URI = os.environ["DOCUMENT_URI"] +REQUEST_METHOD = os.environ["REQUEST_METHOD"] # FCGI_ROLE = os.environ["FCGI_ROLE"] # GATEWAY_INTERFACE = os.environ["GATEWAY_INTERFACE"] @@ -30,7 +34,6 @@ DOCUMENT_URI = os.environ["DOCUMENT_URI"] # REMOTE_ADDR = os.environ["REMOTE_ADDR"] # REMOTE_PORT = os.environ["REMOTE_PORT"] # REMOTE_USER = os.environ["REMOTE_USER"] -# REQUEST_METHOD = os.environ["REQUEST_METHOD"] # REQUEST_SCHEME = os.environ["REQUEST_SCHEME"] # REQUEST_URI = os.environ["REQUEST_URI"] # SCRIPT_FILENAME = os.environ["SCRIPT_FILENAME"] @@ -41,10 +44,51 @@ DOCUMENT_URI = os.environ["DOCUMENT_URI"] # SERVER_PROTOCOL = os.environ["SERVER_PROTOCOL"] # SERVER_SOFTWARE = os.environ["SERVER_SOFTWARE"] + +def fbw() -> None: + if not REQUEST_METHOD == "POST": + sys.stdout.write("Content-Type: text/plain\r\n") + sys.stdout.write("Status: 400\r\n") + sys.stdout.write("\r\n") + sys.stdout.write("This endpoint does not support any method other than POST.") + exit(0) + + form = cgi.FieldStorage() + try: + file = form["file"] + except KeyError: + sys.stdout.write("Status: 400\r\n") + sys.stdout.write("Content-Type: text/plain\r\n") + sys.stdout.write("\r\n") + sys.stdout.write("You haven't provided me a file.") + exit(0) + if not file.filename: + sys.stdout.write("Status: 400\r\n") + sys.stdout.write("Content-Type: text/plain\r\n") + sys.stdout.write("\r\n") + sys.stdout.write("File doesn't have a filename... that's strange.") + exit(0) + if int(CONTENT_LENGTH) >= 50000: + sys.stdout.write("Status: 413\r\n") + sys.stdout.write("Content-Type: text/plain\r\n") + sys.stdout.write("\r\n") + sys.stdout.write("Too large!") + exit(0) + sys.stdout.write("Status: 200\r\n") + sys.stdout.write("Content-Type: text/plain\r\n") + sys.stdout.write("\r\n") + fn = os.path.basename(file.filename) + open(os.path.join("fb", fn), 'wb').write(file.file.read()) + sys.stdout.write("Done.") + exit(0) + + if PATH_INFO == "/hybrid/": sys.stdout.write("Content-Type: text/plain\r\n") sys.stdout.write("\r\n") - print("Root") + print("Okay... so?") +elif PATH_INFO == "/hybrid/fb": + fbw() else: sys.stdout.write("Content-Type: text/plain\r\n") sys.stdout.write("Status: 404\r\n") |