57 lines
1.8 KiB
Python
Executable File
57 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import json
|
|
import os, sys
|
|
from urllib import parse
|
|
import multipart # https://github.com/andrew-d/python-multipart (`apt install python3-multipart`)
|
|
|
|
|
|
def get_request_params():
|
|
oforms = {}
|
|
ofiles = {}
|
|
if "REQUEST_URI" in os.environ:
|
|
qforms = parse.parse_qs(parse.urlsplit(os.environ["REQUEST_URI"]).query)
|
|
for name, values in qforms.items():
|
|
oforms[name] = values[0]
|
|
if "HTTP_CONTENT_TYPE" in os.environ:
|
|
ctype = os.environ["HTTP_CONTENT_TYPE"]
|
|
if ctype == "application/x-www-form-urlencoded":
|
|
qforms = parse.parse_qs(parse.urlsplit(sys.stdin.read()).query)
|
|
for name, values in qforms.items():
|
|
oforms[name] = values[0]
|
|
elif ctype.startswith("multipart/"):
|
|
def on_field(field):
|
|
oforms[field.field_name] = field.value
|
|
def on_file(file):
|
|
ofiles[field.field_name] = field.value
|
|
multipart.parse_form(headers={"Content-Type": ctype}, input_stream=sys.stdin.buffer, on_field=on_field, on_file=on_file)
|
|
return oforms, ofiles
|
|
|
|
|
|
forms, files = get_request_params()
|
|
|
|
jenc = json.JSONEncoder()
|
|
|
|
def get_var(name: str, def_val: str = ""):
|
|
if name in os.environ:
|
|
return os.environ[name]
|
|
return def_val
|
|
|
|
def get_json_var(name: str, def_val: str = ""):
|
|
var = get_var(name, def_val=def_val)
|
|
return jenc.encode(var)
|
|
|
|
|
|
name = forms['name'] if 'name' in forms else None
|
|
|
|
print("Content-Type: application/json\n")
|
|
if name:
|
|
print(f"""{{ "{name}" : {get_json_var(name, '')}}}""")
|
|
else:
|
|
print(f"""{{ "https" : {get_json_var('HTTPS', '')},
|
|
"host" : {get_json_var('SERVER_NAME', '')},
|
|
"protocol" : {get_json_var('SERVER_PROTOCOL', '')},
|
|
"ssl_protocol" : {get_json_var('SSL_PROTOCOL', '')},
|
|
"ssl_cipher" : {get_json_var('SSL_CIPHER', '')}
|
|
}}""")
|
|
|