Files
stapler/src/server.py
T
2026-04-12 17:32:09 +02:00

50 lines
1.5 KiB
Python

import contextlib
import http.server
import logging
import pathlib
import typing
from . import handler, project, registry
if typing.TYPE_CHECKING:
from . import params
class StaplerServer:
def __init__(self, params: params.Parameters) -> None:
self.logger = logging.getLogger(self.__class__.__name__)
self.params = params
self.registry = registry.Registry(params)
self.server = http.server.ThreadingHTTPServer(
(params.bind, params.port),
self.request_handler,
)
def request_handler(self, *args: typing.Any) -> http.server.BaseHTTPRequestHandler:
return handler.RequestHandler(*args, params=self.params, registry=self.registry)
def __init_certbot_www(self) -> None:
certbot_www_path = pathlib.Path(self.params.certbot_www)
if not certbot_www_path.exists():
certbot_www_path.mkdir(parents=True)
def __startup(self) -> None:
self.logger.info("Starting up...")
self.registry.load_pages()
self.__init_certbot_www()
def start(self) -> None:
self.logger.info("Version %s", project.get_version())
self.__startup()
self.logger.info(
"Listening on %s:%d...",
self.server.server_address[0],
self.server.server_port,
)
self.logger.info(
"Server up and ready on http://%s",
self.params.host,
)
with contextlib.suppress(KeyboardInterrupt):
self.server.serve_forever()