diff --git a/static/js/pages/firewall.js b/static/js/pages/firewall.js new file mode 100644 index 0000000..c22fc67 --- /dev/null +++ b/static/js/pages/firewall.js @@ -0,0 +1,80 @@ +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 => { + tableRows += ` + + ${rule.rule} + ${rule.action} + ${rule.protocol} + ${rule.packets} + ${rule.bytes} + ${rule.conditions} + + `; + }); + + card.innerHTML = ` +
+ Firewall: ${ruleset.name} +
+
+ + + + + + + + + + + + + ${tableRows} + +
RuleActionProtocolPacketsBytesConditions
+
+ `; + 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.
`; + } +} \ No newline at end of file