diff --git a/front/js/ui_components.js b/front/js/ui_components.js index 70ccafe5..e2ae04b6 100755 --- a/front/js/ui_components.js +++ b/front/js/ui_components.js @@ -39,6 +39,25 @@ function generateApiToken(elem, length) { } } +// ------------------------------------------------------------------- +// Utility function to generate a random NAX node name in the format NAX- +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 function getRandomBytes(elem, length) { diff --git a/front/plugins/sync/config.json b/front/plugins/sync/config.json index 803f7d68..913ab556 100755 --- a/front/plugins/sync/config.json +++ b/front/plugins/sync/config.json @@ -15,7 +15,11 @@ } ], "show_ui": true, - "localized": ["display_name", "description", "icon"], + "localized": [ + "display_name", + "description", + "icon" + ], "display_name": [ { "language_code": "en_us", @@ -38,14 +42,19 @@ "settings": [ { "function": "RUN", - "events": ["run"], + "events": [ + "run" + ], "type": { "dataType": "string", "elements": [ - { "elementType": "select", "elementOptions": [], "transformers": [] } + { + "elementType": "select", + "elementOptions": [], + "transformers": [] + } ] }, - "default_value": "unused", "options": [ "unused", @@ -55,7 +64,10 @@ "on_new_device", "on_notification" ], - "localized": ["name", "description"], + "localized": [ + "name", + "description" + ], "name": [ { "language_code": "en_us", @@ -108,10 +120,12 @@ } ] }, - "default_value": "*/5 * * * *", "options": [], - "localized": ["name", "description"], + "localized": [ + "name", + "description" + ], "name": [ { "language_code": "en_us", @@ -141,16 +155,28 @@ { "elementType": "input", "elementHasInputValue": 1, - "elementOptions": [{ "cssClasses": "col-xs-12" }], + "elementOptions": [ + { + "cssClasses": "col-xs-12" + } + ], "transformers": [] }, { "elementType": "button", "elementOptions": [ - { "getStringKey": "Gen_Generate" }, - { "customParams": "SYNC_encryption_key" }, - { "onClick": "generateApiToken(this, 30)" }, - { "cssClasses": "col-xs-12" } + { + "getStringKey": "Gen_Generate" + }, + { + "customParams": "SYNC_encryption_key" + }, + { + "onClick": "generateApiToken(this, 30)" + }, + { + "cssClasses": "col-xs-12" + } ], "transformers": [] } @@ -159,7 +185,10 @@ "maxLength": 50, "default_value": "", "options": [], - "localized": ["name", "description"], + "localized": [ + "name", + "description" + ], "name": [ { "language_code": "en_us", @@ -181,21 +210,41 @@ { "elementType": "input", "elementOptions": [ - { "placeholder": "Enter full url" }, - { "suffix": "_in" }, - { "cssClasses": "col-sm-10" }, - { "prefillValue": "null" } + { + "placeholder": "Enter full url" + }, + { + "suffix": "_in" + }, + { + "cssClasses": "col-sm-10" + }, + { + "prefillValue": "null" + } ], "transformers": [] }, { "elementType": "button", "elementOptions": [ - { "sourceSuffixes": ["_in"] }, - { "separator": "" }, - { "cssClasses": "col-xs-12" }, - { "onClick": "addList(this, false)" }, - { "getStringKey": "Gen_Add" } + { + "sourceSuffixes": [ + "_in" + ] + }, + { + "separator": "" + }, + { + "cssClasses": "col-xs-12" + }, + { + "onClick": "addList(this, false)" + }, + { + "getStringKey": "Gen_Add" + } ], "transformers": [] }, @@ -203,31 +252,57 @@ "elementType": "select", "elementHasInputValue": 1, "elementOptions": [ - { "multiple": "true" }, - { "readonly": "true" }, - { "editable": "true" } + { + "multiple": "true" + }, + { + "readonly": "true" + }, + { + "editable": "true" + } ], "transformers": [] }, { "elementType": "button", "elementOptions": [ - { "sourceSuffixes": [] }, - { "separator": "" }, - { "cssClasses": "col-xs-6" }, - { "onClick": "removeAllOptions(this)" }, - { "getStringKey": "Gen_Remove_All" } + { + "sourceSuffixes": [] + }, + { + "separator": "" + }, + { + "cssClasses": "col-xs-6" + }, + { + "onClick": "removeAllOptions(this)" + }, + { + "getStringKey": "Gen_Remove_All" + } ], "transformers": [] }, { "elementType": "button", "elementOptions": [ - { "sourceSuffixes": [] }, - { "separator": "" }, - { "cssClasses": "col-xs-6" }, - { "onClick": "removeFromList(this)" }, - { "getStringKey": "Gen_Remove_Last" } + { + "sourceSuffixes": [] + }, + { + "separator": "" + }, + { + "cssClasses": "col-xs-6" + }, + { + "onClick": "removeFromList(this)" + }, + { + "getStringKey": "Gen_Remove_Last" + } ], "transformers": [] } @@ -235,7 +310,10 @@ }, "default_value": [], "options": [], - "localized": ["name", "description"], + "localized": [ + "name", + "description" + ], "name": [ { "language_code": "en_us", @@ -254,14 +332,20 @@ "type": { "dataType": "string", "elements": [ - { "elementType": "input", "elementOptions": [], "transformers": [] } + { + "elementType": "input", + "elementOptions": [], + "transformers": [] + } ] }, - "maxLength": 50, "default_value": "", "options": [], - "localized": ["name", "description"], + "localized": [ + "name", + "description" + ], "name": [ { "language_code": "en_us", @@ -280,13 +364,43 @@ "type": { "dataType": "string", "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, "default_value": "", "options": [], - "localized": ["name", "description"], + "localized": [ + "name", + "description" + ], "name": [ { "language_code": "en_us", @@ -307,14 +421,21 @@ "elements": [ { "elementType": "input", - "elementOptions": [{ "type": "checkbox" }], + "elementOptions": [ + { + "type": "checkbox" + } + ], "transformers": [] } ] }, "default_value": false, "options": [], - "localized": ["name", "description"], + "localized": [ + "name", + "description" + ], "name": [ { "language_code": "en_us", @@ -335,14 +456,21 @@ "elements": [ { "elementType": "select", - "elementOptions": [{ "multiple": "true", "ordeable": "true" }], + "elementOptions": [ + { + "multiple": "true", + "ordeable": "true" + } + ], "transformers": [] } ] }, "maxLength": 50, "default_value": [], - "options": ["{value}"], + "options": [ + "{value}" + ], "options_params": [ { "name": "value", @@ -350,7 +478,10 @@ "value": "LOADED_PLUGINS" } ], - "localized": ["name", "description"], + "localized": [ + "name", + "description" + ], "name": [ { "language_code": "en_us", @@ -371,14 +502,21 @@ "elements": [ { "elementType": "input", - "elementOptions": [{ "readonly": "true" }], + "elementOptions": [ + { + "readonly": "true" + } + ], "transformers": [] } ] }, "default_value": "python3 /app/front/plugins/sync/sync.py", "options": [], - "localized": ["name", "description"], + "localized": [ + "name", + "description" + ], "name": [ { "language_code": "en_us", @@ -415,14 +553,21 @@ "elements": [ { "elementType": "input", - "elementOptions": [{ "type": "number" }], + "elementOptions": [ + { + "type": "number" + } + ], "transformers": [] } ] }, "default_value": 30, "options": [], - "localized": ["name", "description"], + "localized": [ + "name", + "description" + ], "name": [ { "language_code": "en_us", @@ -461,7 +606,9 @@ "type": "none", "default_value": "", "options": [], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -477,7 +624,9 @@ "type": "device_name_mac", "default_value": "", "options": [], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -501,7 +650,9 @@ "type": "device_ip", "default_value": "", "options": [], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -525,7 +676,9 @@ "type": "label", "default_value": "", "options": [], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -541,7 +694,9 @@ "type": "label", "default_value": "", "options": [], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -557,7 +712,9 @@ "type": "label", "default_value": "", "options": [], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -572,7 +729,9 @@ "type": "label", "default_value": "", "options": [], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -591,7 +750,9 @@ "type": "label", "default_value": "", "options": [], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -614,7 +775,9 @@ "type": "label", "default_value": "", "options": [], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -637,7 +800,9 @@ "type": "label", "default_value": "", "options": [], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -677,7 +842,9 @@ "replacement": "
" } ], - "localized": ["name"], + "localized": [ + "name" + ], "name": [ { "language_code": "en_us", @@ -694,4 +861,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/server/initialise.py b/server/initialise.py index 99c51b10..1d3b49cb 100755 --- a/server/initialise.py +++ b/server/initialise.py @@ -6,6 +6,7 @@ import datetime import json import shutil import re +import uuid # Register NetAlertX libraries import conf @@ -383,6 +384,15 @@ def importConfigs(pm, db, all_plugins): "[]", "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 conf.UI_LANG = ccd( @@ -736,6 +746,7 @@ 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)}'", + r"\bSYNC_node_name=\'\'": f"SYNC_node_name='NAX-{str(uuid.uuid4()).split("-")[0]}'", # Detect SMTP_PASS='anything' BUT not starting with base64: r"SMTP_PASS='(?!base64:)([^']*)'": r"SMTP_PASS='base64:\1'", }