Path: blob/master/webhooks/webhook_reader.py
1072 views
import cgi1import json2import os3import urllib.parse4from http.server import BaseHTTPRequestHandler, HTTPServer5from json.decoder import JSONDecodeError67upload_to = "uploads"8910class GetHandler(BaseHTTPRequestHandler):11def do_GET(self):12self.send_response(200)13self.end_headers()14self.wfile.write(b"Send a POST request instead.")15return1617def do_POST(self):18self.send_response(200)19self.send_header("Content-type", "text/html")20self.end_headers()21ctype, pdict = cgi.parse_header(self.headers["Content-Type"])22if ctype == "multipart/form-data":23form = cgi.FieldStorage(24fp=self.rfile,25headers=self.headers,26environ={27"REQUEST_METHOD": "POST",28"CONTENT_TYPE": self.headers["Content-Type"],29},30)31# Get webhook content32json_data = form.getvalue("json")33# Get webhook file34if "upload" in form:35filename = form["upload"].filename36buffer = form["upload"].file.read()37if not os.path.exists(upload_to):38try:39os.makedirs(upload_to)40except OSError:41print("Error creating directory:", upload_to)4243with open(f"./{upload_to}/{filename}", "wb") as fp:44print(f"Saving image to {filename}")45fp.write(buffer)4647else:48raw_data = self.rfile.read(int(self.headers["content-length"])).decode(49"utf-8"50)51if raw_data.startswith("json="):52raw_data = raw_data[5:]53try:54decoded_data = urllib.parse.unquote(raw_data)55decoded_data = decoded_data.replace("+", " ")56json_data = json.loads(decoded_data)57except JSONDecodeError:58json_data = {}59print(json_data)60self.wfile.write(b"OK")616263if __name__ == "__main__":64server = HTTPServer(("", 8001), GetHandler)65print("Starting server, use <Ctrl-C> to stop")66server.serve_forever()676869