Author SHA1 Message Date
klemek 60e70ea0c0 fix: hide python version
Python Lint CI / ruff (push) Successful in 58s
Python Lint CI / ruff-format-check (push) Successful in 1m0s
Python Lint CI / ty (push) Successful in 1m0s
Docker CI / docker-build (push) Successful in 2m52s
Python Test CI / coverage (push) Successful in 2m30s
2026-05-26 10:58:16 +02:00
klemek 9cefd6657a feat: send HSTS header 2026-05-26 10:58:05 +02:00
+15 -3
View File
@@ -29,6 +29,10 @@ class BaseHandler(abc.ABC, http.server.BaseHTTPRequestHandler):
timeout = 10
protocol_version = "HTTP/1.1"
REQUEST_COUNT = 0
RESPONSE_HEADERS: typing.ClassVar = {
"Connection": "close",
"Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload",
}
@typing.override
def __init__(
@@ -48,6 +52,10 @@ class BaseHandler(abc.ABC, http.server.BaseHTTPRequestHandler):
with contextlib.suppress(Exception):
self.connection.close()
@typing.override
def version_string(self) -> str:
return self.server_version
@typing.override
def send_error(
self,
@@ -151,7 +159,7 @@ class BaseHandler(abc.ABC, http.server.BaseHTTPRequestHandler):
self.send_response(code, message)
self.send_header("Content-Type", f"{content_type}; charset=UTF-8")
self.send_header("Content-Length", str(len(encoded)))
self.send_header("Connection", "close")
self._send_basic_headers()
self.end_headers()
if self.command != http.HTTPMethod.HEAD:
self.wfile.write(encoded)
@@ -167,7 +175,7 @@ class BaseHandler(abc.ABC, http.server.BaseHTTPRequestHandler):
headers = {}
self.send_response(code, message)
self.send_header("Content-Length", "0")
self.send_header("Connection", "close")
self._send_basic_headers()
for header, value in headers.items():
self.send_header(header, value)
self.end_headers()
@@ -221,7 +229,7 @@ class BaseHandler(abc.ABC, http.server.BaseHTTPRequestHandler):
]:
self.send_header(header, value.replace(target_host, self.host))
self.send_header("Content-Length", str(out_size := len(response.content)))
self.send_header("Connection", "close")
self._send_basic_headers()
self.end_headers()
if out_size > 0 and self.command != http.HTTPMethod.HEAD:
self.wfile.write(response.content)
@@ -269,6 +277,10 @@ class BaseHandler(abc.ABC, http.server.BaseHTTPRequestHandler):
self.send_error(http.HTTPStatus.INTERNAL_SERVER_ERROR, str(e))
self.logger.exception("Internal Server Error")
def _send_basic_headers(self) -> None:
for header, value in self.RESPONSE_HEADERS.items():
self.send_header(header, value)
class RequestHandler(http.server.SimpleHTTPRequestHandler, BaseHandler):
protocol_version = "HTTP/1.1"