PyWebBrowser/tests/server.py

45 lines
1.3 KiB
Python
Raw Permalink Normal View History

import ssl
from multiprocessing import Process
from http import HTTPStatus
from http.server import HTTPServer
from http.server import BaseHTTPRequestHandler
class Handler(BaseHTTPRequestHandler):
def log_message(self, format, *args):
pass
def send_text(self, content: str):
self.wfile.write(content.encode("utf8"))
def do_GET(self):
if self.path == "/":
self.send_response(HTTPStatus.OK)
self.end_headers()
self.send_text("test")
def get_ssl_context(cert_file, key_file):
context = ssl.SSLContext(ssl.PROTOCOL_TLS)
context.load_cert_chain(cert_file, key_file)
context.set_ciphers("@SECLEVEL=1:ALL")
return context
def _start_http_server(port: int, use_tls: bool = False):
with HTTPServer(("127.0.0.1", port), Handler) as httpd:
if use_tls:
context = get_ssl_context("tests/cert.pem", "tests/key.pem")
httpd.socket = context.wrap_socket(httpd.socket, server_side=True)
httpd.serve_forever()
def create_http_server_process(port: int = 80):
server_process = Process(target=_start_http_server, kwargs={"port": port, "use_tls": False})
return server_process
def create_https_server_process(port: int = 443):
server_process = Process(target=_start_http_server, kwargs={"port": port, "use_tls": True})
return server_process