From 23514e8b37d840a2d3b69c306d73559a6d79a829 Mon Sep 17 00:00:00 2001 From: Goffi Date: Sat, 18 Mar 2023 20:12:38 +0100 Subject: [PATCH] component AP gateway (http): add verbose log when signature verification fails on POST request --- .../plugin_comp_ap_gateway/http_server.py | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/sat/plugins/plugin_comp_ap_gateway/http_server.py b/sat/plugins/plugin_comp_ap_gateway/http_server.py index 6ca81af3..29cd62dd 100644 --- a/sat/plugins/plugin_comp_ap_gateway/http_server.py +++ b/sat/plugins/plugin_comp_ap_gateway/http_server.py @@ -932,6 +932,27 @@ class HTTPAPGServer(web_resource.Resource): } } + def _get_to_log( + self, + request: "HTTPRequest", + data: Optional[dict] = None, + ) -> List[str]: + """Get base data to logs in verbose mode""" + from pprint import pformat + to_log = [ + "", + f"<<< got {request.method.decode()} request - {request.uri.decode()}" + ] + if data is not None: + to_log.append(pformat(data)) + if self.apg.verbose>=3: + headers = "\n".join( + f" {k.decode()}: {v.decode()}" + for k,v in request.getAllHeaders().items() + ) + to_log.append(f" headers:\n{headers}") + return to_log + async def APRequest( self, request: "HTTPRequest", @@ -939,19 +960,7 @@ class HTTPAPGServer(web_resource.Resource): signing_actor: Optional[str] = None ) -> None: if self.apg.verbose: - from pprint import pformat - to_log = [ - "", - f"<<< got {request.method.decode()} request - {request.uri.decode()}" - ] - if data is not None: - to_log.append(pformat(data)) - if self.apg.verbose>=3: - headers = "\n".join( - f" {k.decode()}: {v.decode()}" - for k,v in request.getAllHeaders().items() - ) - to_log.append(f" headers:\n{headers}") + to_log = self._get_to_log(request, data) path = request.path.decode() ap_url = parse.urljoin( @@ -1073,6 +1082,11 @@ class HTTPAPGServer(web_resource.Resource): try: signing_actor = await self.checkSignature(request) except exceptions.EncryptionError as e: + if self.apg.verbose: + to_log = self._get_to_log(request) + to_log.append(f" body: {request.content.read()!r}") + request.content.seek(0) + log.info("\n".join(to_log)) self.responseCode( request, http.FORBIDDEN,