Skip to content

Commit 2d397d3

Browse files
Update MerlinAU.asp
Fixed problem in WebGUI page when a comment line is introduced in the configuration file.
1 parent b278aad commit 2d397d3

File tree

1 file changed

+68
-58
lines changed

1 file changed

+68
-58
lines changed

MerlinAU.asp

Lines changed: 68 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)