BE: ensure not empty SYNC_node_name

Signed-off-by: jokob-sk <jokob.sk@gmail.com>
This commit is contained in:
jokob-sk
2026-01-17 14:41:09 +11:00
parent 29ba1936ad
commit 1010a81b15
3 changed files with 259 additions and 62 deletions
+19
View File
@@ -39,6 +39,25 @@ function generateApiToken(elem, length) {
} }
} }
// -------------------------------------------------------------------
// Utility function to generate a random NAX node name in the format NAX-<GUID>
function generateNaxNodeName(elem)
{
// Retrieve and parse custom parameters from the element
let params = $(elem).attr("my-customparams")?.split(',').map(param => param.trim());
if (params && params.length >= 1) {
var targetElementID = params[0]; // Get the target element's ID
}
newNodeName = 'NAX-' + getGuid().split('-')[0];
let targetElement = $('#' + targetElementID);
// Set the generated token as the value of the target element
if (targetElement.length) {
targetElement.val(newNodeName);
}
}
// ---------------------------------------------- // ----------------------------------------------
// Generate a random N-byte hexadecimal key // Generate a random N-byte hexadecimal key
function getRandomBytes(elem, length) { function getRandomBytes(elem, length) {
+229 -62
View File
@@ -15,7 +15,11 @@
} }
], ],
"show_ui": true, "show_ui": true,
"localized": ["display_name", "description", "icon"], "localized": [
"display_name",
"description",
"icon"
],
"display_name": [ "display_name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -38,14 +42,19 @@
"settings": [ "settings": [
{ {
"function": "RUN", "function": "RUN",
"events": ["run"], "events": [
"run"
],
"type": { "type": {
"dataType": "string", "dataType": "string",
"elements": [ "elements": [
{ "elementType": "select", "elementOptions": [], "transformers": [] } {
"elementType": "select",
"elementOptions": [],
"transformers": []
}
] ]
}, },
"default_value": "unused", "default_value": "unused",
"options": [ "options": [
"unused", "unused",
@@ -55,7 +64,10 @@
"on_new_device", "on_new_device",
"on_notification" "on_notification"
], ],
"localized": ["name", "description"], "localized": [
"name",
"description"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -108,10 +120,12 @@
} }
] ]
}, },
"default_value": "*/5 * * * *", "default_value": "*/5 * * * *",
"options": [], "options": [],
"localized": ["name", "description"], "localized": [
"name",
"description"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -141,16 +155,28 @@
{ {
"elementType": "input", "elementType": "input",
"elementHasInputValue": 1, "elementHasInputValue": 1,
"elementOptions": [{ "cssClasses": "col-xs-12" }], "elementOptions": [
{
"cssClasses": "col-xs-12"
}
],
"transformers": [] "transformers": []
}, },
{ {
"elementType": "button", "elementType": "button",
"elementOptions": [ "elementOptions": [
{ "getStringKey": "Gen_Generate" }, {
{ "customParams": "SYNC_encryption_key" }, "getStringKey": "Gen_Generate"
{ "onClick": "generateApiToken(this, 30)" }, },
{ "cssClasses": "col-xs-12" } {
"customParams": "SYNC_encryption_key"
},
{
"onClick": "generateApiToken(this, 30)"
},
{
"cssClasses": "col-xs-12"
}
], ],
"transformers": [] "transformers": []
} }
@@ -159,7 +185,10 @@
"maxLength": 50, "maxLength": 50,
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name", "description"], "localized": [
"name",
"description"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -181,21 +210,41 @@
{ {
"elementType": "input", "elementType": "input",
"elementOptions": [ "elementOptions": [
{ "placeholder": "Enter full url" }, {
{ "suffix": "_in" }, "placeholder": "Enter full url"
{ "cssClasses": "col-sm-10" }, },
{ "prefillValue": "null" } {
"suffix": "_in"
},
{
"cssClasses": "col-sm-10"
},
{
"prefillValue": "null"
}
], ],
"transformers": [] "transformers": []
}, },
{ {
"elementType": "button", "elementType": "button",
"elementOptions": [ "elementOptions": [
{ "sourceSuffixes": ["_in"] }, {
{ "separator": "" }, "sourceSuffixes": [
{ "cssClasses": "col-xs-12" }, "_in"
{ "onClick": "addList(this, false)" }, ]
{ "getStringKey": "Gen_Add" } },
{
"separator": ""
},
{
"cssClasses": "col-xs-12"
},
{
"onClick": "addList(this, false)"
},
{
"getStringKey": "Gen_Add"
}
], ],
"transformers": [] "transformers": []
}, },
@@ -203,31 +252,57 @@
"elementType": "select", "elementType": "select",
"elementHasInputValue": 1, "elementHasInputValue": 1,
"elementOptions": [ "elementOptions": [
{ "multiple": "true" }, {
{ "readonly": "true" }, "multiple": "true"
{ "editable": "true" } },
{
"readonly": "true"
},
{
"editable": "true"
}
], ],
"transformers": [] "transformers": []
}, },
{ {
"elementType": "button", "elementType": "button",
"elementOptions": [ "elementOptions": [
{ "sourceSuffixes": [] }, {
{ "separator": "" }, "sourceSuffixes": []
{ "cssClasses": "col-xs-6" }, },
{ "onClick": "removeAllOptions(this)" }, {
{ "getStringKey": "Gen_Remove_All" } "separator": ""
},
{
"cssClasses": "col-xs-6"
},
{
"onClick": "removeAllOptions(this)"
},
{
"getStringKey": "Gen_Remove_All"
}
], ],
"transformers": [] "transformers": []
}, },
{ {
"elementType": "button", "elementType": "button",
"elementOptions": [ "elementOptions": [
{ "sourceSuffixes": [] }, {
{ "separator": "" }, "sourceSuffixes": []
{ "cssClasses": "col-xs-6" }, },
{ "onClick": "removeFromList(this)" }, {
{ "getStringKey": "Gen_Remove_Last" } "separator": ""
},
{
"cssClasses": "col-xs-6"
},
{
"onClick": "removeFromList(this)"
},
{
"getStringKey": "Gen_Remove_Last"
}
], ],
"transformers": [] "transformers": []
} }
@@ -235,7 +310,10 @@
}, },
"default_value": [], "default_value": [],
"options": [], "options": [],
"localized": ["name", "description"], "localized": [
"name",
"description"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -254,14 +332,20 @@
"type": { "type": {
"dataType": "string", "dataType": "string",
"elements": [ "elements": [
{ "elementType": "input", "elementOptions": [], "transformers": [] } {
"elementType": "input",
"elementOptions": [],
"transformers": []
}
] ]
}, },
"maxLength": 50, "maxLength": 50,
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name", "description"], "localized": [
"name",
"description"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -280,13 +364,43 @@
"type": { "type": {
"dataType": "string", "dataType": "string",
"elements": [ "elements": [
{ "elementType": "input", "elementOptions": [], "transformers": [] } {
"elementType": "input",
"elementHasInputValue": 1,
"elementOptions": [
{
"cssClasses": "col-xs-12"
}
],
"transformers": []
},
{
"elementType": "button",
"elementOptions": [
{
"getStringKey": "Gen_Generate"
},
{
"customParams": "SYNC_node_name"
},
{
"onClick": "generateNaxNodeName(this)"
},
{
"cssClasses": "col-xs-12"
}
],
"transformers": []
}
] ]
}, },
"maxLength": 50, "maxLength": 50,
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name", "description"], "localized": [
"name",
"description"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -307,14 +421,21 @@
"elements": [ "elements": [
{ {
"elementType": "input", "elementType": "input",
"elementOptions": [{ "type": "checkbox" }], "elementOptions": [
{
"type": "checkbox"
}
],
"transformers": [] "transformers": []
} }
] ]
}, },
"default_value": false, "default_value": false,
"options": [], "options": [],
"localized": ["name", "description"], "localized": [
"name",
"description"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -335,14 +456,21 @@
"elements": [ "elements": [
{ {
"elementType": "select", "elementType": "select",
"elementOptions": [{ "multiple": "true", "ordeable": "true" }], "elementOptions": [
{
"multiple": "true",
"ordeable": "true"
}
],
"transformers": [] "transformers": []
} }
] ]
}, },
"maxLength": 50, "maxLength": 50,
"default_value": [], "default_value": [],
"options": ["{value}"], "options": [
"{value}"
],
"options_params": [ "options_params": [
{ {
"name": "value", "name": "value",
@@ -350,7 +478,10 @@
"value": "LOADED_PLUGINS" "value": "LOADED_PLUGINS"
} }
], ],
"localized": ["name", "description"], "localized": [
"name",
"description"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -371,14 +502,21 @@
"elements": [ "elements": [
{ {
"elementType": "input", "elementType": "input",
"elementOptions": [{ "readonly": "true" }], "elementOptions": [
{
"readonly": "true"
}
],
"transformers": [] "transformers": []
} }
] ]
}, },
"default_value": "python3 /app/front/plugins/sync/sync.py", "default_value": "python3 /app/front/plugins/sync/sync.py",
"options": [], "options": [],
"localized": ["name", "description"], "localized": [
"name",
"description"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -415,14 +553,21 @@
"elements": [ "elements": [
{ {
"elementType": "input", "elementType": "input",
"elementOptions": [{ "type": "number" }], "elementOptions": [
{
"type": "number"
}
],
"transformers": [] "transformers": []
} }
] ]
}, },
"default_value": 30, "default_value": 30,
"options": [], "options": [],
"localized": ["name", "description"], "localized": [
"name",
"description"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -461,7 +606,9 @@
"type": "none", "type": "none",
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -477,7 +624,9 @@
"type": "device_name_mac", "type": "device_name_mac",
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -501,7 +650,9 @@
"type": "device_ip", "type": "device_ip",
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -525,7 +676,9 @@
"type": "label", "type": "label",
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -541,7 +694,9 @@
"type": "label", "type": "label",
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -557,7 +712,9 @@
"type": "label", "type": "label",
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -572,7 +729,9 @@
"type": "label", "type": "label",
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -591,7 +750,9 @@
"type": "label", "type": "label",
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -614,7 +775,9 @@
"type": "label", "type": "label",
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -637,7 +800,9 @@
"type": "label", "type": "label",
"default_value": "", "default_value": "",
"options": [], "options": [],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -677,7 +842,9 @@
"replacement": "<div style='text-align:center'><i class='fa-solid fa-question'></i></div>" "replacement": "<div style='text-align:center'><i class='fa-solid fa-question'></i></div>"
} }
], ],
"localized": ["name"], "localized": [
"name"
],
"name": [ "name": [
{ {
"language_code": "en_us", "language_code": "en_us",
@@ -694,4 +861,4 @@
] ]
} }
] ]
} }
+11
View File
@@ -6,6 +6,7 @@ import datetime
import json import json
import shutil import shutil
import re import re
import uuid
# Register NetAlertX libraries # Register NetAlertX libraries
import conf import conf
@@ -383,6 +384,15 @@ def importConfigs(pm, db, all_plugins):
"[]", "[]",
"General", "General",
) )
conf.SYNC_node_name = ccd(
"SYNC_node_name",
"NAX-" + str(uuid.uuid4()).split("-")[0],
c_d,
"Sync node name",
'{"dataType": "string","elements": [{"elementType": "input","elementHasInputValue": 1,"elementOptions": [{ "cssClasses": "col-xs-12" }],"transformers": []},{"elementType": "button","elementOptions": [{ "getStringKey": "Gen_Generate" },{ "customParams": "SYNC_node_name" },{ "onClick": "generateNaxNodeName(this)" },{ "cssClasses": "col-xs-12" }],"transformers": []}]}', # noqa: E501 - inline JSON
"[]",
"General",
)
# UI # UI
conf.UI_LANG = ccd( conf.UI_LANG = ccd(
@@ -736,6 +746,7 @@ 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)}'",
r"\bSYNC_node_name=\'\'": f"SYNC_node_name='NAX-{str(uuid.uuid4()).split("-")[0]}'",
# Detect SMTP_PASS='anything' BUT not starting with base64: # Detect SMTP_PASS='anything' BUT not starting with base64:
r"SMTP_PASS='(?!base64:)([^']*)'": r"SMTP_PASS='base64:\1'", r"SMTP_PASS='(?!base64:)([^']*)'": r"SMTP_PASS='base64:\1'",
} }