document.addEventListener("DOMContentLoaded", function () {
fetchFirewallData();
});
function renderRulesets(container, rulesets, ipVersion) {
container.innerHTML = "";
if (!rulesets || rulesets.length === 0) {
container.innerHTML = `
No ${ipVersion} firewall rulesets found.
`;
return;
}
rulesets.forEach(ruleset => {
const card = document.createElement("div");
card.className = "card mb-4";
let tableRows = '';
ruleset.rules.forEach(rule => {
const logUrl = `/firewall/log/${ipVersion.toLowerCase()}/${ruleset.name}/${rule.rule}`;
tableRows += `
| ${rule.rule} |
${rule.action} |
${rule.protocol} |
${rule.packets} |
${rule.bytes} |
${rule.conditions} |
Logs
|
`;
});
card.innerHTML = `
| Rule |
Action |
Protocol |
Packets |
Bytes |
Conditions |
Actions |
${tableRows}
`;
container.appendChild(card);
});
}
async function fetchFirewallData() {
const ipv4Container = document.getElementById("ipv4-rulesets-container");
const ipv6Container = document.getElementById("ipv6-rulesets-container");
try {
const response = await fetch("/firewall/json");
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
if (data.error) {
throw new Error(data.details || data.error);
}
renderRulesets(ipv4Container, data.ipv4, 'IPv4');
renderRulesets(ipv6Container, data.ipv6, 'IPv6');
} catch (error) {
console.error("Error fetching firewall data:", error);
ipv4Container.innerHTML = `Error loading IPv4 firewall data.
`;
ipv6Container.innerHTML = `Error loading IPv6 firewall data.
`;
}
}