mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2026-04-05 09:41:56 -07:00
BE+FE: prefix|base64 implementation for SMTP_PASS #1337
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
This commit is contained in:
@@ -698,11 +698,17 @@ function applyTransformers(val, transformers) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "base64":
|
case "base64":
|
||||||
// Implement base64 logic
|
// Implement base64 logic
|
||||||
if (!isBase64(val)) {
|
if (!isBase64(val)) {
|
||||||
val = btoa(val);
|
val = btoa(val);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "prefix|base64":
|
||||||
|
// Implement base64 logic w/ prefix
|
||||||
|
if (val.startsWith("base64:") == false) {
|
||||||
|
val = "base64:" + btoa(val);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case "name|base64":
|
case "name|base64":
|
||||||
// // Implement base64 logic
|
// // Implement base64 logic
|
||||||
// if (!isBase64(val)) {
|
// if (!isBase64(val)) {
|
||||||
@@ -736,6 +742,19 @@ function reverseTransformers(val, transformers) {
|
|||||||
val = atob(val);
|
val = atob(val);
|
||||||
}
|
}
|
||||||
break;
|
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":
|
case "name|base64":
|
||||||
// Implement base64 decoding logic
|
// Implement base64 decoding logic
|
||||||
if (isBase64(val)) {
|
if (isBase64(val)) {
|
||||||
|
|||||||
@@ -534,7 +534,7 @@
|
|||||||
{
|
{
|
||||||
"elementType": "input",
|
"elementType": "input",
|
||||||
"elementOptions": [{ "type": "password" }],
|
"elementOptions": [{ "type": "password" }],
|
||||||
"transformers": ["base64"]
|
"transformers": ["prefix|base64"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -64,8 +64,8 @@ def main():
|
|||||||
mylog('verbose', [f'[{pluginName}] SMTP_SERVER: ', get_setting_value("SMTP_SERVER")])
|
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_PORT: ', get_setting_value("SMTP_PORT")])
|
||||||
mylog('verbose', [f'[{pluginName}] SMTP_SKIP_LOGIN: ', get_setting_value("SMTP_SKIP_LOGIN")])
|
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_USER: ', get_setting_value("SMTP_USER")])
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_PASS: ', get_setting_value("SMTP_PASS")])
|
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_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_FORCE_SSL: ', get_setting_value("SMTP_FORCE_SSL")])
|
||||||
# mylog('verbose', [f'[{pluginName}] SMTP_REPORT_TO: ', get_setting_value("SMTP_REPORT_TO")])
|
# mylog('verbose', [f'[{pluginName}] SMTP_REPORT_TO: ', get_setting_value("SMTP_REPORT_TO")])
|
||||||
|
|||||||
@@ -388,17 +388,43 @@ def updateSubnets(scan_subnets):
|
|||||||
# -------------------------------------------------------------------------------
|
# -------------------------------------------------------------------------------
|
||||||
# Reverse transformed values if needed
|
# Reverse transformed values if needed
|
||||||
def reverseTransformers(val, transformers):
|
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):
|
def reverse_transformers(value, transformers):
|
||||||
for transformer in transformers:
|
for transformer in transformers:
|
||||||
if transformer == "base64":
|
if transformer == "base64":
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
value = base64.b64decode(value).decode("utf-8")
|
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":
|
elif transformer == "sha256":
|
||||||
mylog("none", ["[reverseTransformers] sha256 is irreversible"])
|
mylog("none", ["[reverseTransformers] sha256 is irreversible"])
|
||||||
|
# Add more transformer handling here if needed
|
||||||
return value
|
return value
|
||||||
|
|
||||||
# Check if the value is a list
|
|
||||||
if isinstance(val, list):
|
if isinstance(val, list):
|
||||||
return [reverse_transformers(item, transformers) for item in val]
|
return [reverse_transformers(item, transformers) for item in val]
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -727,6 +727,8 @@ replacements = {
|
|||||||
r"\bREPORT_TO\b": "SMTP_REPORT_TO",
|
r"\bREPORT_TO\b": "SMTP_REPORT_TO",
|
||||||
r"\bSYNC_api_token\b": "API_TOKEN",
|
r"\bSYNC_api_token\b": "API_TOKEN",
|
||||||
r"\bAPI_TOKEN=\'\'": f"API_TOKEN='t_{generate_random_string(20)}'",
|
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'",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user