From 810dd36d3ce9b759ca9d3385d2a4315b5240ca04 Mon Sep 17 00:00:00 2001 From: Samuel Catalan Date: Tue, 2 Dec 2025 16:21:43 +1300 Subject: [PATCH 1/4] added virtual environment and IDE files to ignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 6c73723..dc6824d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ dist docs/_build/ htmlcov pip-wheel-metadata +.vscode +.venv \ No newline at end of file From 6c104fe4a0fdd860e9f5215c8950db021ca5af2b Mon Sep 17 00:00:00 2001 From: Samuel Catalan Date: Tue, 2 Dec 2025 16:22:00 +1300 Subject: [PATCH 2/4] added extra command line parameter --hide-server --- src/kubernetes_wsgi/__main__.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/kubernetes_wsgi/__main__.py b/src/kubernetes_wsgi/__main__.py index edeb432..4d666f9 100644 --- a/src/kubernetes_wsgi/__main__.py +++ b/src/kubernetes_wsgi/__main__.py @@ -60,6 +60,11 @@ def parse_args(argv: Sequence[Text]) -> Dict[str, Any]: default=20, help="Maximum number of threads to run", ) + parser.add_argument( + "--hide-server", + action="store_true", + help="Hides server version in HTTP header" + ) args = parser.parse_args(argv) return { "application": args.application, @@ -68,6 +73,7 @@ def parse_args(argv: Sequence[Text]) -> Dict[str, Any]: "health_check_path": args.health_check_path, "min_threads": args.min_threads, "max_threads": args.max_threads, + "hide_server": args.hide_server, } From 113fa602e46481ae6f3078b840ff70964e070734 Mon Sep 17 00:00:00 2001 From: Samuel Catalan Date: Tue, 2 Dec 2025 16:22:30 +1300 Subject: [PATCH 3/4] added function to KubernetesWSGISite to ignore server in header if needed --- src/kubernetes_wsgi/server.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/kubernetes_wsgi/server.py b/src/kubernetes_wsgi/server.py index f586875..77242f3 100644 --- a/src/kubernetes_wsgi/server.py +++ b/src/kubernetes_wsgi/server.py @@ -1,8 +1,8 @@ import logging + # This is a fake import, only used during type checking. from typing import TYPE_CHECKING, Callable - from prometheus_client import REGISTRY # type: ignore from prometheus_client.twisted import MetricsResource # type: ignore from twisted import logger # type: ignore @@ -12,12 +12,12 @@ from twisted.logger import STDLibLogObserver # type: ignore from twisted.python import threadpool # type: ignore from twisted.web.http import Request, proxiedLogFormatter # type: ignore +import twisted.web.http from twisted.web.server import Site # type: ignore from twisted.web.wsgi import WSGIResource # type: ignore from .metrics import TwistedThreadPoolCollector - if TYPE_CHECKING: from wsgiref.types import WSGIApplication @@ -28,7 +28,8 @@ class KubernetesWSGISite(Site): """Extension to Site to ignore heath checks for access logging.""" - def __init__(self, health_check_path: str, *args, **kwargs): + def __init__(self, health_check_path: str, hide_server: bool = False, *args, **kwargs): + self.hide_server = hide_server self.__health_check_path = health_check_path super().__init__(*args, **kwargs) @@ -36,6 +37,12 @@ def log(self, request): path = request.path.decode() if path != self.__health_check_path: return super().log(request) + + def getResourceFor(self, request): + if self.hide_server: + request.setHeader(b'server', b"") + + return super().getResourceFor(request) class MetricsSite(Site): @@ -53,6 +60,7 @@ def serve( health_check_path: str = "/healthz", min_threads: int = 5, max_threads: int = 20, + hide_server: bool = True, ): # Quiet the Twisted factory logging. Factory.noisy = False @@ -76,6 +84,7 @@ def serve( port, access_log_formatter, health_check_path, + hide_server, ) _listen_metrics(reactor, metrics_port) @@ -96,6 +105,7 @@ def _listen_wsgi( port: int, access_log_formatter: LogFormatter, health_check_path: str, + hide_server: bool, ) -> None: """Listen for the WSGI application.""" wsgi_resource = WSGIResource(reactor, pool, application) From 10f5136184bd31363b3d1e3096e2aef747e856b5 Mon Sep 17 00:00:00 2001 From: Samuel Catalan Date: Wed, 3 Dec 2025 09:09:41 +1300 Subject: [PATCH 4/4] removed unused import --- src/kubernetes_wsgi/server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/kubernetes_wsgi/server.py b/src/kubernetes_wsgi/server.py index 77242f3..6e9299d 100644 --- a/src/kubernetes_wsgi/server.py +++ b/src/kubernetes_wsgi/server.py @@ -12,7 +12,6 @@ from twisted.logger import STDLibLogObserver # type: ignore from twisted.python import threadpool # type: ignore from twisted.web.http import Request, proxiedLogFormatter # type: ignore -import twisted.web.http from twisted.web.server import Site # type: ignore from twisted.web.wsgi import WSGIResource # type: ignore