diff --git a/front/js/settings_utils.js b/front/js/settings_utils.js index b567c532..aa509180 100755 --- a/front/js/settings_utils.js +++ b/front/js/settings_utils.js @@ -698,11 +698,17 @@ function applyTransformers(val, transformers) { } break; case "base64": - // Implement base64 logic + // Implement base64 logic if (!isBase64(val)) { val = btoa(val); } break; + case "prefix|base64": + // Implement base64 logic w/ prefix + if (val.startsWith("base64:") == false) { + val = "base64:" + btoa(val); + } + break; case "name|base64": // // Implement base64 logic // if (!isBase64(val)) { @@ -736,6 +742,19 @@ function reverseTransformers(val, transformers) { val = atob(val); } break; + case "prefix|base64": + // Implement base64 decoding logic + if (val.startsWith("base64:")) { + let encodedPart = val.slice(7); // remove "base64:" + if (isBase64(encodedPart)) { + val = atob(encodedPart); + } else { + console.log("Prefix exists but not valid Base64"); + } + } else { + console.error("Not Base64-prefixed"); + } + break; case "name|base64": // Implement base64 decoding logic if (isBase64(val)) { diff --git a/front/plugins/_publisher_email/config.json b/front/plugins/_publisher_email/config.json index ed147e61..4e93aa10 100755 --- a/front/plugins/_publisher_email/config.json +++ b/front/plugins/_publisher_email/config.json @@ -534,7 +534,7 @@ { "elementType": "input", "elementOptions": [{ "type": "password" }], - "transformers": ["base64"] + "transformers": ["prefix|base64"] } ] }, diff --git a/front/plugins/_publisher_email/email_smtp.py b/front/plugins/_publisher_email/email_smtp.py index a29ea137..1d6b2e53 100755 --- a/front/plugins/_publisher_email/email_smtp.py +++ b/front/plugins/_publisher_email/email_smtp.py @@ -64,8 +64,8 @@ def main(): mylog('verbose', [f'[{pluginName}] SMTP_SERVER: ', get_setting_value("SMTP_SERVER")]) mylog('verbose', [f'[{pluginName}] SMTP_PORT: ', get_setting_value("SMTP_PORT")]) mylog('verbose', [f'[{pluginName}] SMTP_SKIP_LOGIN: ', get_setting_value("SMTP_SKIP_LOGIN")]) - # mylog('verbose', [f'[{pluginName}] SMTP_USER: ', get_setting_value("SMTP_USER")]) - # mylog('verbose', [f'[{pluginName}] SMTP_PASS: ', get_setting_value("SMTP_PASS")]) + mylog('verbose', [f'[{pluginName}] SMTP_USER: ', get_setting_value("SMTP_USER")]) + mylog('verbose', [f'[{pluginName}] SMTP_PASS: ', get_setting_value("SMTP_PASS")]) mylog('verbose', [f'[{pluginName}] SMTP_SKIP_TLS: ', get_setting_value("SMTP_SKIP_TLS")]) mylog('verbose', [f'[{pluginName}] SMTP_FORCE_SSL: ', get_setting_value("SMTP_FORCE_SSL")]) # mylog('verbose', [f'[{pluginName}] SMTP_REPORT_TO: ', get_setting_value("SMTP_REPORT_TO")]) diff --git a/server/helper.py b/server/helper.py index a625a12c..543f2488 100755 --- a/server/helper.py +++ b/server/helper.py @@ -388,17 +388,43 @@ def updateSubnets(scan_subnets): # ------------------------------------------------------------------------------- # Reverse transformed values if needed def reverseTransformers(val, transformers): - # Function to apply transformers to a single value + """ + Reverse applied transformers on a value or list of values. + + This function iterates through a list of transformers and reverses + them where possible. Currently supports: + + - "base64": Decodes a Base64-encoded string prefixed with 'base64:'. + - "sha256": Logs a warning since SHA256 is irreversible. + + Args: + val (str or list): The value or list of values to reverse-transform. + transformers (list): List of transformers applied in order. + + Returns: + str or list: The value(s) after reversing applicable transformers. + + Notes: + - If 'val' is a list, each element is processed individually. + - Invalid Base64 strings are returned unchanged. + - Transformers are applied in the order given in the list. + """ def reverse_transformers(value, transformers): for transformer in transformers: if transformer == "base64": if isinstance(value, str): value = base64.b64decode(value).decode("utf-8") + elif transformer == "prefix|base64": + if isinstance(value, str) and value.startswith("base64:"): + encoded_part = value[7:] + value = base64.b64decode(encoded_part).decode("utf-8") + else: + mylog("none", ["[reverseTransformers] invalid base64 value format. Try re-saving Settings."]) elif transformer == "sha256": mylog("none", ["[reverseTransformers] sha256 is irreversible"]) + # Add more transformer handling here if needed return value - # Check if the value is a list if isinstance(val, list): return [reverse_transformers(item, transformers) for item in val] else: diff --git a/server/initialise.py b/server/initialise.py index 4d3f96b3..aee564bf 100755 --- a/server/initialise.py +++ b/server/initialise.py @@ -727,6 +727,8 @@ replacements = { r"\bREPORT_TO\b": "SMTP_REPORT_TO", r"\bSYNC_api_token\b": "API_TOKEN", r"\bAPI_TOKEN=\'\'": f"API_TOKEN='t_{generate_random_string(20)}'", + # Detect SMTP_PASS='anything' BUT not starting with base64: + r"SMTP_PASS='(?!base64:)([^']*)'": r"SMTP_PASS='base64:\1'", }