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 128457dd2..926806ba2 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/AliasController.php @@ -376,10 +376,27 @@ class AliasController extends ApiMutableModelControllerBase */ public function exportAction() { - if ($this->request->isGet()) { + if ($this->request->isGet() || $this->request->isPost()) { + if (!empty($this->request->get('ids'))) { + /* partial select */ + if (is_array($this->request->get('ids'))) { + $items = $this->request->get('ids'); + } else { + $items = explode(',', (string)$this->request->get('ids')); + } + $payload = ['aliases' => ['alias' => []]]; + foreach ($this->getModel()->aliases->alias->iterateItems() as $key => $node) { + if (in_array($key, $items)) { + $payload['aliases']['alias'][$key] = $this->getRawNodes($node); + } + } + } else { + /* full dump */ + $payload = $this->getRawNodes($this->getModel()); + } // return raw, unescaped since this content is intended for direct download $this->response->setContentType('application/json', 'UTF-8'); - $this->response->setContent(json_encode($this->getRawNodes($this->getModel()))); + $this->response->setContent(json_encode($payload, JSON_PRETTY_PRINT)); } else { throw new UserException("Unsupported request type"); } diff --git a/src/opnsense/mvc/app/views/OPNsense/Firewall/alias.volt b/src/opnsense/mvc/app/views/OPNsense/Firewall/alias.volt index f1e6af983..61c763e5e 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Firewall/alias.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Firewall/alias.volt @@ -446,7 +446,12 @@ * export all configured aliases to json */ $("#exportbtn").click(function(){ - ajaxGet("/api/firewall/alias/export", {}, function(data, status){ + let selected_rows = $("#grid-aliases").bootgrid("getSelectedRows"); + let params = {}; + if (selected_rows.length > 0) { + params['ids'] = selected_rows; + } + ajaxCall("/api/firewall/alias/export", params, function(data, status){ if (data.aliases) { let output_data = JSON.stringify(data, null, 2); let a_tag = $('').attr('href','data:application/json;charset=utf8,' + encodeURIComponent(output_data))