@@ -1251,6 +1251,13 @@ function InitializeFields()
12511251 { console .error (" Custom settings NOT loaded." ); }
12521252}
12531253
1254+ // Tokenize input line string, respecting quoted substrings //
1255+ function Tokenize (inputStr )
1256+ {
1257+ var regex = / (?:[^ \s "] + | "[^ "] * ")+ / g ;
1258+ return inputStr .match (regex) || [];
1259+ }
1260+
12541261/* *----------------------------------------**/
12551262/* * Modified by Martinski W. [2025-Jan-26] **/
12561263/* *----------------------------------------**/
@@ -1266,46 +1273,56 @@ function GetConfigSettings()
12661273 },
12671274 success : function (data )
12681275 {
1269- // Tokenize the data while respecting quoted values //
1270- var tokenList = Tokenize (data);
1276+ let keyName, keyValue;
1277+ let tokenList, tokenStr;
1278+ let configLines = data .split (' \n ' );
12711279
1272- for (var indx = 0 ; indx < tokenList .length ; indx ++ )
1280+ for (var jIndx = 0 ; jIndx < configLines .length ; jIndx ++ )
12731281 {
1274- var tokenStr = tokenList[indx];
1282+ if (configLines[jIndx].length === 0 ||
1283+ configLines[jIndx].match (' ^[ ]*#' ) !== null )
1284+ { continue ; } // Skip comments & empty lines//
12751285
1276- if (tokenStr .includes (' =' ))
1277- {
1278- // Handle "key=value" format //
1279- var splitIndex = tokenStr .indexOf (' =' );
1280- var key = tokenStr .substring (0 , splitIndex).trim ();
1281- var value = tokenStr .substring (splitIndex + 1 ).trim ();
1282-
1283- // Remove surrounding quotes if present
1284- if (value .startsWith (' "' ) && value .endsWith (' "' ))
1285- { value = value .substring (1 , value .length - 1 ); }
1286-
1287- AssignAjaxSetting (key, value);
1288- }
1289- else
1286+ tokenList = Tokenize (configLines[jIndx]);
1287+
1288+ for (var kIndx = 0 ; kIndx < tokenList .length ; kIndx++ )
12901289 {
1291- // Handle "key value" format //
1292- var key = tokenStr .trim ();
1293- var value = ' ' ;
1290+ tokenStr = tokenList[kIndx];
12941291
1295- // Ensure there's a next token for the value //
1296- if (indx + 1 < tokenList .length )
1292+ if (tokenStr .includes (' =' ))
12971293 {
1298- value = tokenList[indx + 1 ].trim ();
1294+ // Handle "key=value" pair format //
1295+ var splitIndex = tokenStr .indexOf (' =' );
1296+ keyName = tokenStr .substring (0 , splitIndex).trim ();
1297+ keyValue = tokenStr .substring (splitIndex + 1 ).trim ();
12991298
13001299 // Remove surrounding quotes if present //
1301- if (value .startsWith (' "' ) && value .endsWith (' "' ))
1302- { value = value .substring (1 , value .length - 1 ); }
1300+ if (keyValue .startsWith (' "' ) && keyValue .endsWith (' "' ))
1301+ { keyValue = keyValue .substring (1 , keyValue .length - 1 ); }
13031302
1304- AssignAjaxSetting (key, value);
1305- indx++ ; // Skip next token as it's already processed //
1303+ AssignAjaxSetting (keyName, keyValue);
13061304 }
13071305 else
1308- { console .warn (` No value found for key: ${ key} ` ); }
1306+ {
1307+ // Handle "key value" pair format //
1308+ keyName = tokenStr .trim ();
1309+ keyValue = ' ' ;
1310+
1311+ // Ensure there's a next token for the value //
1312+ if (kIndx + 1 < tokenList .length )
1313+ {
1314+ keyValue = tokenList[kIndx + 1 ].trim ();
1315+
1316+ // Remove surrounding quotes if present //
1317+ if (keyValue .startsWith (' "' ) && keyValue .endsWith (' "' ))
1318+ { keyValue = keyValue .substring (1 , keyValue .length - 1 ); }
1319+
1320+ AssignAjaxSetting (keyName, keyValue);
1321+ kIndx++ ; // Skip next token as it's already processed //
1322+ }
1323+ else
1324+ { console .warn (` No value found for keyName: ${ keyName} ` ); }
1325+ }
13091326 }
13101327 }
13111328 console .log (" AJAX Custom Settings Loaded:" , ajax_custom_settings);
@@ -1321,85 +1338,78 @@ function GetConfigSettings()
13211338 });
13221339}
13231340
1324- // Tokenize input string, respecting quoted substrings //
1325- function Tokenize (inputStr )
1326- {
1327- var regex = / (?:[^ \s "] + | "[^ "] * ")+ / g ;
1328- return inputStr .match (regex) || [];
1329- }
1330-
13311341/* *----------------------------------------**/
1332- /* * Modified by Martinski W. [2025-Jan-24 ] **/
1342+ /* * Modified by Martinski W. [2025-Jan-26 ] **/
13331343/* *----------------------------------------**/
13341344// Helper function to assign settings based on key //
1335- function AssignAjaxSetting ( key , value )
1345+ function AssignAjaxSetting ( keyName , keyValue )
13361346{
13371347 // Normalize key to uppercase for case-insensitive comparison //
1338- var keyUpper = key .toUpperCase ();
1348+ var keyUpper = keyName .toUpperCase ();
13391349
13401350 switch (true )
13411351 {
13421352 case keyUpper === ' FW_NEW_UPDATE_POSTPONEMENT_DAYS' :
1343- ajax_custom_settings .FW_New_Update_Postponement_Days = value ;
1353+ ajax_custom_settings .FW_New_Update_Postponement_Days = keyValue ;
13441354 break ;
13451355
13461356 // NOTE: Use for display purposes ONLY //
13471357 case keyUpper === ' FW_NEW_UPDATE_EXPECTED_RUN_DATE' :
1348- fwUpdateEstimatedRunDate = value ;
1358+ fwUpdateEstimatedRunDate = keyValue ;
13491359 break ;
13501360
13511361 case keyUpper === ' FW_NEW_UPDATE_EMAIL_NOTIFICATION' :
1352- ajax_custom_settings .FW_New_Update_EMail_Notification = convertToStatus (value );
1362+ ajax_custom_settings .FW_New_Update_EMail_Notification = convertToStatus (keyValue );
13531363 break ;
13541364
13551365 case keyUpper === ' FW_NEW_UPDATE_EMAIL_FORMATTYPE' :
1356- ajax_custom_settings .FW_New_Update_EMail_FormatType = value ;
1366+ ajax_custom_settings .FW_New_Update_EMail_FormatType = keyValue ;
13571367 break ;
13581368
13591369 case keyUpper === ' FW_NEW_UPDATE_ZIP_DIRECTORY_PATH' :
1360- ajax_custom_settings .FW_New_Update_ZIP_Directory_Path = value ;
1370+ ajax_custom_settings .FW_New_Update_ZIP_Directory_Path = keyValue ;
13611371 break ;
13621372
13631373 case keyUpper === ' ALLOW_UPDATES_OVERVPN' :
1364- ajax_custom_settings .Allow_Updates_OverVPN = convertToStatus (value );
1374+ ajax_custom_settings .Allow_Updates_OverVPN = convertToStatus (keyValue );
13651375 break ;
13661376
13671377 case keyUpper === ' FW_NEW_UPDATE_NOTIFICATION_VERS' :
1368- FW_NewUpdateVersAvailable = value .trim ();
1378+ FW_NewUpdateVersAvailable = keyValue .trim ();
13691379 break ;
13701380
13711381 case keyUpper === ' FW_NEW_UPDATE_EMAIL_CC_ADDRESS' :
1372- ajax_custom_settings .FW_New_Update_EMail_CC_Address = value ;
1382+ ajax_custom_settings .FW_New_Update_EMail_CC_Address = keyValue ;
13731383 break ;
13741384
13751385 case keyUpper === ' CHECKCHANGELOG' :
1376- ajax_custom_settings .CheckChangeLog = convertToStatus (value );
1386+ ajax_custom_settings .CheckChangeLog = convertToStatus (keyValue );
13771387 break ;
13781388
13791389 case keyUpper === ' FW_UPDATE_CHECK' :
1380- ajax_custom_settings .FW_Update_Check = convertToStatus (value );
1390+ ajax_custom_settings .FW_Update_Check = convertToStatus (keyValue );
13811391 break ;
13821392
13831393 case keyUpper === ' ALLOW_SCRIPT_AUTO_UPDATE' :
1384- ajax_custom_settings .Allow_Script_Auto_Update = convertToStatus (value );
1394+ ajax_custom_settings .Allow_Script_Auto_Update = convertToStatus (keyValue );
13851395 break ;
13861396
13871397 case keyUpper === ' FW_NEW_UPDATE_CHANGELOG_APPROVAL' :
1388- ajax_custom_settings .FW_New_Update_Changelog_Approval = value ; // Store as-is for display
1398+ ajax_custom_settings .FW_New_Update_Changelog_Approval = keyValue ; // Store as-is for display
13891399 break ;
13901400
13911401 case keyUpper === ' FW_ALLOW_BETA_PRODUCTION_UP' :
1392- ajax_custom_settings .FW_Allow_Beta_Production_Up = convertToStatus (value );
1402+ ajax_custom_settings .FW_Allow_Beta_Production_Up = convertToStatus (keyValue );
13931403 break ;
13941404
13951405 case keyUpper === ' FW_AUTO_BACKUPMON' :
1396- ajax_custom_settings .FW_Auto_Backupmon = convertToStatus (value );
1406+ ajax_custom_settings .FW_Auto_Backupmon = convertToStatus (keyValue );
13971407 break ;
13981408
13991409 case keyUpper === ' CREDENTIALS_BASE64' :
14001410 try
14011411 {
1402- var decoded = atob (value );
1412+ var decoded = atob (keyValue );
14031413 var password = decoded .split (' :' )[1 ] || ' ' ;
14041414 ajax_custom_settings .routerPassword = password;
14051415 }
@@ -1410,19 +1420,19 @@ function AssignAjaxSetting(key, value)
14101420 break ;
14111421
14121422 case keyUpper === ' ROGBUILD' :
1413- ajax_custom_settings .FW_New_Update_ROGFWBuildType = (value === ' ENABLED' ) ? ' ROG' : ' Pure' ;
1423+ ajax_custom_settings .FW_New_Update_ROGFWBuildType = (keyValue === ' ENABLED' ) ? ' ROG' : ' Pure' ;
14141424 break ;
14151425
14161426 case keyUpper === ' TUFBUILD' :
1417- ajax_custom_settings .FW_New_Update_TUFWBuildType = (value === ' ENABLED' ) ? ' TUF' : ' Pure' ;
1427+ ajax_custom_settings .FW_New_Update_TUFWBuildType = (keyValue === ' ENABLED' ) ? ' TUF' : ' Pure' ;
14181428 break ;
14191429
14201430 case keyUpper === ' FW_NEW_UPDATE_NOTIFICATION_DATE' :
1421- ajax_custom_settings .FW_New_Update_Notifications_Date = value ;
1431+ ajax_custom_settings .FW_New_Update_Notifications_Date = keyValue ;
14221432 break ;
14231433
14241434 case keyUpper === ' FW_NEW_UPDATE_CRON_JOB_SCHEDULE' :
1425- ajax_custom_settings .FW_New_Update_Cron_Job_Schedule = value ;
1435+ ajax_custom_settings .FW_New_Update_Cron_Job_Schedule = keyValue ;
14261436 break ;
14271437
14281438 // Additional AJAX settings can be handled here //
0 commit comments