mirror of
https://github.com/swissmakers/fail2ban-ui.git
synced 2026-04-11 13:47:05 +02:00
Added null checks for all DOM element accesses in applyAdvancedActionsSettings to prevent similar errors
This commit is contained in:
@@ -275,25 +275,48 @@ function sendTestEmail() {
|
|||||||
|
|
||||||
function applyAdvancedActionsSettings(cfg) {
|
function applyAdvancedActionsSettings(cfg) {
|
||||||
cfg = cfg || {};
|
cfg = cfg || {};
|
||||||
document.getElementById('advancedActionsEnabled').checked = !!cfg.enabled;
|
const enabledEl = document.getElementById('advancedActionsEnabled');
|
||||||
document.getElementById('advancedThreshold').value = cfg.threshold || 5;
|
if (enabledEl) enabledEl.checked = !!cfg.enabled;
|
||||||
|
const thresholdEl = document.getElementById('advancedThreshold');
|
||||||
|
if (thresholdEl) thresholdEl.value = cfg.threshold || 5;
|
||||||
const integrationSelect = document.getElementById('advancedIntegrationSelect');
|
const integrationSelect = document.getElementById('advancedIntegrationSelect');
|
||||||
integrationSelect.value = cfg.integration || '';
|
if (integrationSelect) integrationSelect.value = cfg.integration || '';
|
||||||
|
|
||||||
const mk = cfg.mikrotik || {};
|
const mk = cfg.mikrotik || {};
|
||||||
document.getElementById('mikrotikHost').value = mk.host || '';
|
const mkHost = document.getElementById('mikrotikHost');
|
||||||
document.getElementById('mikrotikPort').value = mk.port || 22;
|
if (mkHost) mkHost.value = mk.host || '';
|
||||||
document.getElementById('mikrotikUsername').value = mk.username || '';
|
const mkPort = document.getElementById('mikrotikPort');
|
||||||
document.getElementById('mikrotikPassword').value = mk.password || '';
|
if (mkPort) mkPort.value = mk.port || 22;
|
||||||
document.getElementById('mikrotikSSHKey').value = mk.sshKeyPath || '';
|
const mkUser = document.getElementById('mikrotikUsername');
|
||||||
document.getElementById('mikrotikList').value = mk.addressList || 'fail2ban-permanent';
|
if (mkUser) mkUser.value = mk.username || '';
|
||||||
|
const mkPass = document.getElementById('mikrotikPassword');
|
||||||
|
if (mkPass) mkPass.value = mk.password || '';
|
||||||
|
const mkKey = document.getElementById('mikrotikSSHKey');
|
||||||
|
if (mkKey) mkKey.value = mk.sshKeyPath || '';
|
||||||
|
const mkList = document.getElementById('mikrotikList');
|
||||||
|
if (mkList) mkList.value = mk.addressList || 'fail2ban-permanent';
|
||||||
|
|
||||||
const pf = cfg.pfSense || {};
|
const pf = cfg.pfSense || {};
|
||||||
document.getElementById('pfSenseBaseURL').value = pf.baseUrl || '';
|
const pfURL = document.getElementById('pfSenseBaseURL');
|
||||||
document.getElementById('pfSenseToken').value = pf.apiToken || '';
|
if (pfURL) pfURL.value = pf.baseUrl || '';
|
||||||
document.getElementById('pfSenseSecret').value = pf.apiSecret || '';
|
const pfToken = document.getElementById('pfSenseToken');
|
||||||
document.getElementById('pfSenseAlias').value = pf.alias || '';
|
if (pfToken) pfToken.value = pf.apiToken || '';
|
||||||
document.getElementById('pfSenseSkipTLS').checked = !!pf.skipTLSVerify;
|
const pfAlias = document.getElementById('pfSenseAlias');
|
||||||
|
if (pfAlias) pfAlias.value = pf.alias || '';
|
||||||
|
const pfTLS = document.getElementById('pfSenseSkipTLS');
|
||||||
|
if (pfTLS) pfTLS.checked = !!pf.skipTLSVerify;
|
||||||
|
|
||||||
|
const opn = cfg.opnsense || {};
|
||||||
|
const opnURL = document.getElementById('opnsenseBaseURL');
|
||||||
|
if (opnURL) opnURL.value = opn.baseUrl || '';
|
||||||
|
const opnKey = document.getElementById('opnsenseKey');
|
||||||
|
if (opnKey) opnKey.value = opn.apiKey || '';
|
||||||
|
const opnSecret = document.getElementById('opnsenseSecret');
|
||||||
|
if (opnSecret) opnSecret.value = opn.apiSecret || '';
|
||||||
|
const opnAlias = document.getElementById('opnsenseAlias');
|
||||||
|
if (opnAlias) opnAlias.value = opn.alias || '';
|
||||||
|
const opnTLS = document.getElementById('opnsenseSkipTLS');
|
||||||
|
if (opnTLS) opnTLS.checked = !!opn.skipTLSVerify;
|
||||||
|
|
||||||
updateAdvancedIntegrationFields();
|
updateAdvancedIntegrationFields();
|
||||||
}
|
}
|
||||||
@@ -314,9 +337,15 @@ function collectAdvancedActionsSettings() {
|
|||||||
pfSense: {
|
pfSense: {
|
||||||
baseUrl: document.getElementById('pfSenseBaseURL').value.trim(),
|
baseUrl: document.getElementById('pfSenseBaseURL').value.trim(),
|
||||||
apiToken: document.getElementById('pfSenseToken').value.trim(),
|
apiToken: document.getElementById('pfSenseToken').value.trim(),
|
||||||
apiSecret: document.getElementById('pfSenseSecret').value.trim(),
|
|
||||||
alias: document.getElementById('pfSenseAlias').value.trim(),
|
alias: document.getElementById('pfSenseAlias').value.trim(),
|
||||||
skipTLSVerify: document.getElementById('pfSenseSkipTLS').checked,
|
skipTLSVerify: document.getElementById('pfSenseSkipTLS').checked,
|
||||||
|
},
|
||||||
|
opnsense: {
|
||||||
|
baseUrl: document.getElementById('opnsenseBaseURL').value.trim(),
|
||||||
|
apiKey: document.getElementById('opnsenseKey').value.trim(),
|
||||||
|
apiSecret: document.getElementById('opnsenseSecret').value.trim(),
|
||||||
|
alias: document.getElementById('opnsenseAlias').value.trim(),
|
||||||
|
skipTLSVerify: document.getElementById('opnsenseSkipTLS').checked,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -325,6 +354,7 @@ function updateAdvancedIntegrationFields() {
|
|||||||
const selected = document.getElementById('advancedIntegrationSelect').value;
|
const selected = document.getElementById('advancedIntegrationSelect').value;
|
||||||
document.getElementById('advancedMikrotikFields').classList.toggle('hidden', selected !== 'mikrotik');
|
document.getElementById('advancedMikrotikFields').classList.toggle('hidden', selected !== 'mikrotik');
|
||||||
document.getElementById('advancedPfSenseFields').classList.toggle('hidden', selected !== 'pfsense');
|
document.getElementById('advancedPfSenseFields').classList.toggle('hidden', selected !== 'pfsense');
|
||||||
|
document.getElementById('advancedOPNsenseFields').classList.toggle('hidden', selected !== 'opnsense');
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadPermanentBlockLog() {
|
function loadPermanentBlockLog() {
|
||||||
@@ -391,42 +421,21 @@ function refreshPermanentBlockLog() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function openAdvancedTestModal() {
|
function openAdvancedTestModal() {
|
||||||
populateAdvancedTestServers();
|
|
||||||
document.getElementById('advancedTestIP').value = '';
|
document.getElementById('advancedTestIP').value = '';
|
||||||
document.getElementById('advancedTestServer').value = '';
|
|
||||||
openModal('advancedTestModal');
|
openModal('advancedTestModal');
|
||||||
}
|
}
|
||||||
|
|
||||||
function populateAdvancedTestServers() {
|
|
||||||
const select = document.getElementById('advancedTestServer');
|
|
||||||
if (!select) return;
|
|
||||||
const value = select.value;
|
|
||||||
select.innerHTML = '';
|
|
||||||
const baseOption = document.createElement('option');
|
|
||||||
baseOption.value = '';
|
|
||||||
baseOption.textContent = t('settings.advanced.test_server_none', 'Use global integration settings');
|
|
||||||
select.appendChild(baseOption);
|
|
||||||
serversCache.forEach(server => {
|
|
||||||
const opt = document.createElement('option');
|
|
||||||
opt.value = server.id;
|
|
||||||
opt.textContent = server.name || server.id;
|
|
||||||
select.appendChild(opt);
|
|
||||||
});
|
|
||||||
select.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function submitAdvancedTest(action) {
|
function submitAdvancedTest(action) {
|
||||||
const ipValue = document.getElementById('advancedTestIP').value.trim();
|
const ipValue = document.getElementById('advancedTestIP').value.trim();
|
||||||
if (!ipValue) {
|
if (!ipValue) {
|
||||||
showToast('Please enter an IP address.', 'info');
|
showToast('Please enter an IP address.', 'info');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const serverId = document.getElementById('advancedTestServer').value;
|
|
||||||
showLoading(true);
|
showLoading(true);
|
||||||
fetch('/api/advanced-actions/test', {
|
fetch('/api/advanced-actions/test', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({ action: action, ip: ipValue, serverId: serverId })
|
body: JSON.stringify({ action: action, ip: ipValue })
|
||||||
})
|
})
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
|
|||||||
Reference in New Issue
Block a user