From df516cf7981249c53cd1e2fd5562a1a29186b293 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Mon, 13 Jan 2025 00:53:47 +0100 Subject: [PATCH] Continued: - parameter 'domain_hash' can be an empty string, so let's check it - converted concating strings into f-string - some debug messages added --- fba/commands.py | 1 + fba/models/instances.py | 10 ++++++---- fba/utils.py | 4 +++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/fba/commands.py b/fba/commands.py index 88f6e2c..19418a0 100644 --- a/fba/commands.py +++ b/fba/commands.py @@ -1015,6 +1015,7 @@ def fetch_instances(args: argparse.Namespace) -> int: database.cursor.execute("SELECT domain, origin, software FROM instances WHERE domain = ? LIMIT 1", [domain]) rows = database.cursor.fetchall() + logger.debug("rows()=%d", len(rows)) if len(rows) == 0: rows.append({ "domain" : args.domain, diff --git a/fba/models/instances.py b/fba/models/instances.py index f581689..c3e347c 100644 --- a/fba/models/instances.py +++ b/fba/models/instances.py @@ -118,7 +118,7 @@ def has_pending(domain: str) -> bool: for key in _pending: logger.debug("domain='%s',_pending[%s]()=%d", domain, key, len(_pending[key])) if domain in _pending[key]: - logger.debug("domain='%s' at key='%s' has pending data ...", domain, key) + logger.debug("domain='%s' at key='%s' has pending data - BREAK!", domain, key) has = True break @@ -138,6 +138,7 @@ def update(domain: str) -> None: sql_string = "" fields = [] + updated = 0 logger.debug("Checking %d _pending array elements ...", len(_pending)) for key in _pending: @@ -146,9 +147,10 @@ def update(domain: str) -> None: logger.debug("Adding '%s' for key='%s' ...", _pending[key][domain], key) fields.append(_pending[key][domain]) sql_string += f" {key} = ?," + updated = updated + 1 - logger.debug("sql_string(%d)='%s'", len(sql_string), sql_string) - if sql_string == "" or len(fields) == 0: + logger.debug("sql_string(%d)='%s',updated=%d", len(sql_string), sql_string, updated) + if sql_string == "" or updated == 0: raise ValueError(f"No fields have been set, but function invoked, domain='{domain}'") # Set last_updated to current timestamp @@ -159,7 +161,7 @@ def update(domain: str) -> None: fields.append(domain) logger.debug("sql_string='%s',fields()=%d", sql_string, len(fields)) - sql_string = "UPDATE instances SET" + sql_string + " last_updated = ? WHERE domain = ? LIMIT 1" + sql_string = f"UPDATE instances SET{sql_string} last_updated = ? WHERE domain = ? LIMIT 1" logger.debug("Executing SQL: sql_string='%s',fields()=%d", sql_string, len(fields)) database.cursor.execute(sql_string, fields) diff --git a/fba/utils.py b/fba/utils.py index 8402a0c..a6a3faf 100644 --- a/fba/utils.py +++ b/fba/utils.py @@ -33,7 +33,7 @@ logger = logging.getLogger(__name__) def is_primitive(var: any) -> bool: logger.debug("var[]='%s' - CALLED!", type(var)) - return type(var) in {int, str, float, bool, None} or var is None + return type(var) in [int, str, float, bool, None] or var is None def get_hash(domain: str) -> str: logger.debug("domain='%s' - CALLED!", domain) @@ -90,6 +90,8 @@ def deobfuscate(domain: str, blocker: str, domain_hash: str = None) -> str: raise ValueError(f"domain='{domain}' is blacklisted but function was invoked") elif not isinstance(domain_hash, str) and domain_hash is not None: raise ValueError(f"Parameter domain_hash[]='{type(domain_hash)}' is not of type 'str'") + elif domain_hash == "": + raise ValueError("Parameter 'domain_hash' is empty") logger.debug("Checking domain='%s' ...", domain) if domain.find("*") >= 0: -- 2.39.5