37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Serve a fixture directory over HTTPS with request logging."""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import http.server
|
|
import ssl
|
|
from pathlib import Path
|
|
|
|
|
|
class RequestHandler(http.server.SimpleHTTPRequestHandler):
|
|
def log_message(self, format: str, *args) -> None:
|
|
print("%s %s" % (self.log_date_time_string(), format % args), flush=True)
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--directory", type=Path, required=True)
|
|
parser.add_argument("--certfile", type=Path, required=True)
|
|
parser.add_argument("--keyfile", type=Path, required=True)
|
|
parser.add_argument("--host", default="0.0.0.0")
|
|
parser.add_argument("--port", type=int, default=18443)
|
|
args = parser.parse_args()
|
|
handler = lambda *handler_args, directory=str(args.directory): RequestHandler(
|
|
*handler_args, directory=directory
|
|
)
|
|
server = http.server.ThreadingHTTPServer((args.host, args.port), handler)
|
|
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
|
context.load_cert_chain(certfile=args.certfile, keyfile=args.keyfile)
|
|
server.socket = context.wrap_socket(server.socket, server_side=True)
|
|
print(f"https fixture server listening on {args.host}:{args.port} root={args.directory}", flush=True)
|
|
server.serve_forever()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|