BE+FE: prefix|base64 implementation for SMTP_PASS #1337

Signed-off-by: jokob-sk <jokob.sk@gmail.com>
This commit is contained in:
jokob-sk
2025-12-12 12:56:56 +11:00
parent ed24b4dc18
commit 5c9de70027
5 changed files with 53 additions and 6 deletions

View File

@@ -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)) {

View File

@@ -534,7 +534,7 @@
{
"elementType": "input",
"elementOptions": [{ "type": "password" }],
"transformers": ["base64"]
"transformers": ["prefix|base64"]
}
]
},

View File

@@ -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")])

View File

@@ -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:

View File

@@ -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'",
}