diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Firewall/AliasController.php b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/AliasController.php index b563677b1..62669b864 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Firewall/AliasController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/AliasController.php @@ -39,6 +39,7 @@ class AliasController extends IndexController { // include dialog form definitions $this->view->selected_alias = $selected; + $this->view->formGeoIPSettings = $this->getForm("geoIPSettings"); $this->view->pick('OPNsense/Firewall/alias'); } } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasController.php b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasController.php index f47be3f61..b0ab0ed40 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasController.php @@ -313,4 +313,26 @@ class AliasController extends ApiMutableModelControllerBase } return $result; } + + /** + * get geoip settings (and stats) + */ + public function getGeoIPAction() + { + $result = array(); + if ($this->request->isGet()) { + $result[static::$internalModelName] = array(); + $node = $this->getModel()->getNodeByReference('geoip'); + if ($node != null) { + $result[static::$internalModelName]['geoip'] = $node->getNodes(); + } + if (file_exists('/usr/local/share/GeoIP/alias.stats')) { + $stats = json_decode(file_get_contents('/usr/local/share/GeoIP/alias.stats'), true); + $result[static::$internalModelName]['geoip'] = array_merge( + $result[static::$internalModelName]['geoip'], $stats + ); + } + } + return $result; + } } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/geoIPSettings.xml b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/geoIPSettings.xml new file mode 100644 index 000000000..6f68d2c7d --- /dev/null +++ b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/geoIPSettings.xml @@ -0,0 +1,20 @@ +
+ + alias.geoip.timestamp + + info + + + + alias.geoip.address_count + + info + + + + alias.geoip.url + + text + + +
diff --git a/src/opnsense/mvc/app/models/OPNsense/Firewall/Alias.xml b/src/opnsense/mvc/app/models/OPNsense/Firewall/Alias.xml index 554c014d0..8e8af4d19 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Firewall/Alias.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Firewall/Alias.xml @@ -5,6 +5,10 @@ Firewall aliases + + + + diff --git a/src/opnsense/mvc/app/views/OPNsense/Firewall/alias.volt b/src/opnsense/mvc/app/views/OPNsense/Firewall/alias.volt index 12ae81782..07ffffeed 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Firewall/alias.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Firewall/alias.volt @@ -330,22 +330,46 @@ }); }); + let data_get_map = {'frm_GeopIPSettings':"/api/firewall/alias/getGeoIP"}; + mapDataToFormUI(data_get_map).done(function(data){ + formatTokenizersUI(); + $('.selectpicker').selectpicker('refresh'); + }); + /** * reconfigure */ $("#reconfigureAct").click(function(){ $("#reconfigureAct_progress").addClass("fa fa-spinner fa-pulse"); - ajaxCall("/api/firewall/alias/reconfigure", {}, function(data,status) { - // when done, disable progress animation. - $("#reconfigureAct_progress").removeClass("fa fa-spinner fa-pulse"); + saveFormToEndpoint("/api/firewall/alias/set", 'frm_GeopIPSettings', function(){ + ajaxCall("/api/firewall/alias/reconfigure", {}, function(data,status) { + // when done, disable progress animation. + $("#reconfigureAct_progress").removeClass("fa fa-spinner fa-pulse"); + }); }); }); + // update history on tab state and implement navigation + if (window.location.hash != "") { + $('a[href="' + window.location.hash + '"]').click(); + } else { + $('a[href="#aliases"]').click(); + } + + $('.nav-tabs a').on('shown.bs.tab', function (e) { + history.pushState(null, null, e.target.hash); + }); + }); -
-
+ + +
+
@@ -380,21 +404,27 @@ -
- -
- -

-
+
+ {{ partial("layout_partials/base_form",['fields':formGeoIPSettings,'id':'frm_GeopIPSettings'])}} +
+
+
+
+
+
+ + +

+
+
- {# Edit dialog #}