# Python 3 server example from http.server import SimpleHTTPRequestHandler, BaseHTTPRequestHandler, HTTPServer import time import cgi import py7zr import base64 hostName = "0.0.0.0" serverPort = 9999 class enum: FAVICON = """ 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 """ _BASE = """ Slipper
{content}
""" GETPAGE = _BASE.format(content = """

Extract your 7z archives here



""") POSTPAGE = _BASE.format(content = """

Files extracted from {}: {}

""") ERRPAGE = _BASE.format(content = """""") ERR404 = _BASE.format(content = """""") class handle(SimpleHTTPRequestHandler): def _extract_archive(self, filename): archive = py7zr.SevenZipFile(filename, 'r') archive.extractall() return(archive.getnames()) def send_error(self, code, message=None): if code == 404: self.send_response(404) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(bytes(enum.ERR404, "utf-8")) else: self.send_response(418) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(bytes(enum.ERRPAGE, "utf-8")) def do_GET(self): # It is not possible to use wfile.write to output the html page # as the default server behaviour is to either serve an index file or # to show the directory listing. # # To prevent the server from showing the directory listing at the bottom of the # wfile.write content, we override the list_directory function. self.list_directory = lambda _:None try: if self.path == '/favicon.ico': self.send_response(200) self.send_header("Content-type", "image/x-icon") self.end_headers() self.wfile.write(bytes(base64.b64decode(enum.FAVICON))) if self.path == '/': self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(bytes(enum.GETPAGE, "utf-8")) return SimpleHTTPRequestHandler.do_GET(self) # If any exception is risen, returns a generic error page except Exception as e: self.send_response(500) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(bytes(enum.ERRPAGE, "utf-8")) def do_POST(self): try: form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type'], }) filename = form['file'].filename data = form['file'].file.read() fileloc = filename fp = open(fileloc, 'wb') fp.write(data) fp.close() filelist = self._extract_archive(fileloc) self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() div = "
" self.wfile.write(bytes(enum.POSTPAGE.format(fileloc, div + div.join(["{x}".format(x=x) for x in filelist])), "utf-8")) # If any exception is risen, returns a generic error page except Exception as e: self.send_response(500) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(bytes(enum.ERRPAGE, "utf-8")) if __name__ == "__main__": webServer = HTTPServer((hostName, serverPort), handle) print("Server started http://%s:%s" % (hostName, serverPort)) try: webServer.serve_forever() except KeyboardInterrupt: pass webServer.server_close() print("Server stopped.")