From f1434bed9094624d4ef5217ea090efb9c37b913b Mon Sep 17 00:00:00 2001 From: Jakub Onderka Date: Tue, 27 Jun 2023 18:07:38 +0200 Subject: [PATCH] chg: [internal] Avoid double json decoding --- misp_modules/__init__.py | 37 ++++++++++++++---------- misp_modules/modules/expansion/clamav.py | 7 ++--- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/misp_modules/__init__.py b/misp_modules/__init__.py index b068d8a..9617dc5 100644 --- a/misp_modules/__init__.py +++ b/misp_modules/__init__.py @@ -183,21 +183,28 @@ class QueryModule(tornado.web.RequestHandler): executor = ThreadPoolExecutor(nb_threads) @run_on_executor - def run_request(self, module, jsonpayload): - log.debug('MISP QueryModule request {0}'.format(jsonpayload)) - response = mhandlers[module].handler(q=jsonpayload) + def run_request(self, dict_payload, json_payload): + if log.isEnabledFor(logging.DEBUG): + log.debug('MISP QueryModule request {0}'.format(json_payload)) + module = dict_payload['module'] + module_handler = mhandlers[module] + if hasattr(module_handler, 'REQUIRE_DICT') and module_handler.REQUIRE_DICT: + response = module_handler.handler(q=dict_payload) + else: + response = module_handler.handler(q=json_payload) + return json.dumps(response) @tornado.gen.coroutine def post(self): try: - jsonpayload = self.request.body.decode('utf-8') - dict_payload = json.loads(jsonpayload) + json_payload = self.request.body.decode('utf-8') + dict_payload = json.loads(json_payload) if dict_payload.get('timeout'): timeout = datetime.timedelta(seconds=int(dict_payload.get('timeout'))) else: timeout = datetime.timedelta(seconds=300) - response = yield tornado.gen.with_timeout(timeout, self.run_request(dict_payload['module'], jsonpayload)) + response = yield tornado.gen.with_timeout(timeout, self.run_request(dict_payload, json_payload)) self.write(response) except tornado.gen.TimeoutError: log.warning('Timeout on {} '.format(dict_payload['module'])) @@ -223,15 +230,15 @@ def main(): global loaded_modules signal.signal(signal.SIGINT, handle_signal) signal.signal(signal.SIGTERM, handle_signal) - argParser = argparse.ArgumentParser(description='misp-modules server', formatter_class=argparse.RawTextHelpFormatter) - argParser.add_argument('-t', default=False, action='store_true', help='Test mode') - argParser.add_argument('-s', default=False, action='store_true', help='Run a system install (package installed via pip)') - argParser.add_argument('-d', default=False, action='store_true', help='Enable debugging') - argParser.add_argument('-p', default=6666, help='misp-modules TCP port (default 6666)') - argParser.add_argument('-l', default='localhost', help='misp-modules listen address (default localhost)') - argParser.add_argument('-m', default=[], action='append', help='Register a custom module') - argParser.add_argument('--devel', default=False, action='store_true', help='''Start in development mode, enable debug, start only the module(s) listed in -m.\nExample: -m misp_modules.modules.expansion.bgpranking''') - args = argParser.parse_args() + arg_parser = argparse.ArgumentParser(description='misp-modules server', formatter_class=argparse.RawTextHelpFormatter) + arg_parser.add_argument('-t', default=False, action='store_true', help='Test mode') + arg_parser.add_argument('-s', default=False, action='store_true', help='Run a system install (package installed via pip)') + arg_parser.add_argument('-d', default=False, action='store_true', help='Enable debugging') + arg_parser.add_argument('-p', default=6666, help='misp-modules TCP port (default 6666)') + arg_parser.add_argument('-l', default='localhost', help='misp-modules listen address (default localhost)') + arg_parser.add_argument('-m', default=[], action='append', help='Register a custom module') + arg_parser.add_argument('--devel', default=False, action='store_true', help='''Start in development mode, enable debug, start only the module(s) listed in -m.\nExample: -m misp_modules.modules.expansion.bgpranking''') + args = arg_parser.parse_args() port = args.p listen = args.l if args.devel: diff --git a/misp_modules/modules/expansion/clamav.py b/misp_modules/modules/expansion/clamav.py index 1582409..892a9f5 100644 --- a/misp_modules/modules/expansion/clamav.py +++ b/misp_modules/modules/expansion/clamav.py @@ -58,12 +58,9 @@ def connect_to_clamav(connection_string: str) -> clamd.ClamdNetworkSocket: raise Exception("ClamAV connection string is invalid. It must be unix socket path with 'unix://' prefix or IP:PORT.") -def handler(q=False): - if q is False: - return False - - request = json.loads(q) +REQUIRE_DICT = True +def handler(request: dict): connection_string: str = request["config"].get("connection") if not connection_string: return {"error": "No ClamAV connection string provided"}