diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/DiagnosticsController.php b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/DiagnosticsController.php index 62cef8ac9a..0552010e07 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/DiagnosticsController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/DiagnosticsController.php @@ -123,6 +123,20 @@ class DiagnosticsController extends ApiControllerBase ]), true); if (!empty($response)) { + $mdl = new \OPNsense\Unbound\Unbound(); + $policies = $mdl->dnsbl->blocklist->getNodeContent(); + $types = $mdl->dnsbl->blocklist->getTemplateNode()->type->getNodeData(); + foreach ($response as $key => $value) { + if (isset($value['bl'])) { + if (isset($types[$value['bl']]['optgroup'])) { + $response[$key]['category'] = $types[$value['bl']]['optgroup']; + } + $response[$key]['bl'] = $types[$value['bl']]['value'] ?? $value['bl']; + } + if (isset($value['uuid'])) { + $response[$key]['policy'] = $policies[$value['uuid']]['description'] ?? ''; + } + } return $response; } } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/OverviewController.php b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/OverviewController.php index efbe547845..4985d2da39 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/OverviewController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Unbound/Api/OverviewController.php @@ -72,8 +72,12 @@ class OverviewController extends ApiControllerBase return []; } + $types = $this->mdl->dnsbl->blocklist->getTemplateNode()->type->getNodeData(); foreach ($parsed['top_blocked'] as $domain => $props) { - $parsed['top_blocked'][$domain]['blocklist'] ??= $this->getBlocklistDescription($props['blocklist']); + if (isset($types[$props['blocklist']]['optgroup'])) { + $parsed['top_blocked'][$domain]['category'] = $types[$props['blocklist']]['optgroup']; + } + $parsed['top_blocked'][$domain]['blocklist'] = $types[$props['blocklist']]['value'] ?? $props['blocklist']; } return $parsed; @@ -100,6 +104,9 @@ class OverviewController extends ApiControllerBase $types = $this->mdl->dnsbl->blocklist->getTemplateNode()->type->getNodeData(); foreach ($parsed as $idx => $query) { + if (isset($types[$query['blocklist']]['optgroup'])) { + $parsed[$idx]['category'] = $types[$query['blocklist']]['optgroup']; + } $parsed[$idx]['blocklist'] = $types[$query['blocklist']]['value'] ?? $query['blocklist']; $parsed[$idx]['policy'] = $policies[$query['uuid']]['description'] ?? ''; /* Handle front-end color status mapping, start off with OK */ diff --git a/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.xml b/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.xml index 10232e59dd..dcb4093472 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Unbound/Unbound.xml @@ -184,36 +184,47 @@ Y - Abuse.ch - ThreatFox IOC database - AdGuard List - EasyList - EasyPrivacy - [hagezi] Multi LIGHT - Basic protection - [hagezi] Multi NORMAL - All-round protection - [hagezi] Multi PRO - Extended protection - [hagezi] Multi PRO mini - [hagezi] Multi PRO++ - Maximum protection - [hagezi] Multi PRO++ mini - [hagezi] Multi ULTIMATE - Aggressive protection - [hagezi] Multi ULTIMATE mini - [hagezi] Fake - scams / fakes - [hagezi] Pop-Up Ads - [hagezi] Threat Intelligence Feeds - [hagezi] Threat Intelligence Feeds - Medium - [hagezi] Threat Intelligence Feeds - Mini - [hagezi] DoH/VPN/TOR/Proxy Bypass - [hagezi] Safesearch not supported - [hagezi] Dynamic DNS blocking - [hagezi] Badware Hoster blocking - [hagezi] Anti Piracy - [hagezi] Gambling - [hagezi] Gambling - Medium - [hagezi] Gambling - Mini - OISD - Domain Blocklist Ads - OISD - Domain Blocklist Big - OISD - Domain Blocklist NSFW - Steven Black List - YoYo List + + Abuse.ch - ThreatFox IOC + AdGuard List + EasyList + EasyPrivacy + Steven Black List + YoYo List + + + LIGHT - Relaxed Blocking + NORMAL - Relaxed/Balanced Blocking + PRO - Balanced Blocking + PRO++ - Balanced/Aggressive Blocking + ULTIMATE - Aggressive Blocking + + + Ads Blocklist + Big Blocklist (incl. Ads) + NSFW Blocklist + + + Threat Intelligence Feeds + Fake - scams / fakes + Pop-Up Ads + DoH/VPN/TOR/Proxy Bypass + Safesearch not supported + Dynamic DNS blocking + Badware Hoster blocking + Anti Piracy + Gambling + Social Networks + + + Multi PRO - Mini + Multi PRO++ - Mini + Multi ULTIMATE - Mini + Threat Intelligence Feeds - Medium + Threat Intelligence Feeds - Mini + Gambling - Medium + Gambling - Mini + diff --git a/src/opnsense/mvc/app/views/OPNsense/Unbound/overview.volt b/src/opnsense/mvc/app/views/OPNsense/Unbound/overview.volt index a98815ca3c..d68f77e749 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Unbound/overview.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Unbound/overview.volt @@ -408,7 +408,7 @@ `).on('click', function () { - openPoliciesDialog(domain, uuid, action, statObj?.blocklist ?? ""); + openPoliciesDialog(domain, uuid, action, statObj); }); let bl = (uuid && uuid in policies) ? `(${policies[uuid].description})` : ''; @@ -562,6 +562,10 @@ function refreshPoliciesDialog(dialogRef, domain, uuid, appliedAction, blocklist) { const cleanDomain = domain.replace(/\.$/, ""); + const category = blocklist?.category ?? ''; + const provider = category; + blocklist = blocklist?.blocklist ?? blocklist ?? ''; + let bl_category = blocklist; ajaxGet('/api/unbound/overview/get_policies', {}, function (data, status) { let $container = $('
'); @@ -628,9 +632,13 @@ } if (blocklist != "") { + let display_text = blocklist; + if (provider) { + bl_category += ' - ' + category; + } $container = $(`
- {{ lang._('Blocklist match:')}} ${blocklist} + {{ lang._('Blocklist match:')}} ${bl_category}
`); } @@ -691,10 +699,9 @@ const uuid = data.uuid; const domain = data.domain; const appliedAction = data.action; - const blocklist = data.blocklist; $el.click(function() { - openPoliciesDialog(domain, uuid, appliedAction, blocklist); + openPoliciesDialog(domain, uuid, appliedAction, data); }); } } @@ -725,6 +732,12 @@ }, "domain": function (column, row) { return row.domain; + }, + "blocklist": function (column, row) { + if (row.category) { + return row.blocklist + ' - ' + row.category; + } + return row.blocklist; } }, statusMapping: { diff --git a/src/opnsense/service/templates/OPNsense/Unbound/core/blocklists.conf b/src/opnsense/service/templates/OPNsense/Unbound/core/blocklists.conf index 59b98b010f..21026d5120 100644 --- a/src/opnsense/service/templates/OPNsense/Unbound/core/blocklists.conf +++ b/src/opnsense/service/templates/OPNsense/Unbound/core/blocklists.conf @@ -30,6 +30,7 @@ "hgz019": "https://raw.githubusercontent.com/hagezi/dns-blocklists/main/wildcard/gambling.txt", "hgz020": "https://raw.githubusercontent.com/hagezi/dns-blocklists/main/wildcard/gambling.medium.txt", "hgz021": "https://raw.githubusercontent.com/hagezi/dns-blocklists/main/wildcard/gambling.mini.txt", + "hgz022": "https://raw.githubusercontent.com/hagezi/dns-blocklists/main/wildcard/social.txt", "*** below fields are deprecated, but still exist. Not selectable anymore ***":"", "bla0": "https://blocklistproject.github.io/Lists/alt-version/abuse-nl.txt", "bla": "https://blocklistproject.github.io/Lists/alt-version/ads-nl.txt",