diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Wireguard/Api/ClientController.php b/src/opnsense/mvc/app/controllers/OPNsense/Wireguard/Api/ClientController.php
index 26e98667f..1b7cec164 100644
--- a/src/opnsense/mvc/app/controllers/OPNsense/Wireguard/Api/ClientController.php
+++ b/src/opnsense/mvc/app/controllers/OPNsense/Wireguard/Api/ClientController.php
@@ -44,27 +44,39 @@ class ClientController extends ApiMutableModelControllerBase
return ['psk' => trim((new Backend())->configdRun('wireguard gen_psk')), 'status' => 'ok' ];
}
+ public function listServersAction()
+ {
+ if ($this->request->isGet()) {
+ $results = ['rows' => [], 'status' => 'ok'];
+ foreach ((new Server())->servers->server->iterateItems() as $key => $node) {
+ $results['rows'][] = [
+ 'uuid' => $key,
+ 'name' => (string)$node->name
+ ];
+ }
+ return $results;
+ }
+ return ['status' => 'failed'];
+ }
+
public function searchClientAction()
{
+ $servers = $this->request->get('servers');
+ $filter_funct = function ($record) use ($servers) {
+ return empty($servers) || array_intersect(explode(',', $record->servers), $servers);
+ };
+
return $this->searchBase(
'clients.client',
- ["enabled", "name", "pubkey", "tunneladdress", "serveraddress", "serverport"]
+ ["enabled", "name", "pubkey", "tunneladdress", "serveraddress", "serverport", "servers"],
+ null,
+ $filter_funct
);
}
public function getClientAction($uuid = null)
{
- $result = $this->getBase('client', 'clients.client', $uuid);
- if (!empty($result['client'])) {
- $result['client']['servers'] = [];
- foreach ((new Server())->servers->server->iterateItems() as $key => $node) {
- $result['client']['servers'][$key] = [
- 'value' => (string)$node->name,
- 'selected' => in_array($uuid, explode(',', (string)$node->peers)) ? '1' : '0'
- ];
- }
- }
- return $result;
+ return $this->getBase('client', 'clients.client', $uuid);
}
public function addClientAction()
diff --git a/src/opnsense/mvc/app/models/OPNsense/Wireguard/Client.xml b/src/opnsense/mvc/app/models/OPNsense/Wireguard/Client.xml
index cb498d808..f317ced72 100644
--- a/src/opnsense/mvc/app/models/OPNsense/Wireguard/Client.xml
+++ b/src/opnsense/mvc/app/models/OPNsense/Wireguard/Client.xml
@@ -4,7 +4,7 @@
1.0.0
-
+
1
Y
@@ -53,6 +53,16 @@
86400
Please specify a value between 1 and 86400.
+
+
+
+ OPNsense.Wireguard.Server
+ servers.server
+ name
+
+
+ Y
+
diff --git a/src/opnsense/mvc/app/models/OPNsense/Wireguard/FieldTypes/ClientField.php b/src/opnsense/mvc/app/models/OPNsense/Wireguard/FieldTypes/ClientField.php
new file mode 100644
index 000000000..4d2d25788
--- /dev/null
+++ b/src/opnsense/mvc/app/models/OPNsense/Wireguard/FieldTypes/ClientField.php
@@ -0,0 +1,59 @@
+servers->server->iterateItems() as $key => $node) {
+ if (!empty((string)$node->peers)) {
+ foreach (explode(',', (string)$node->peers) as $peer) {
+ if (!isset($peers[$peer])) {
+ $peers[$peer] = [];
+ }
+ $peers[$peer][] = $key;
+ }
+ }
+ }
+ foreach ($this->internalChildnodes as $key => $node) {
+ if (isset($peers[$key])) {
+ $node->servers->setValue(implode(',', $peers[$key]));
+ }
+ }
+ return parent::actionPostLoadingEvent();
+ }
+}
diff --git a/src/opnsense/mvc/app/views/OPNsense/Trust/cert.volt b/src/opnsense/mvc/app/views/OPNsense/Trust/cert.volt
index 5db6ad275..343fa1228 100644
--- a/src/opnsense/mvc/app/views/OPNsense/Trust/cert.volt
+++ b/src/opnsense/mvc/app/views/OPNsense/Trust/cert.volt
@@ -35,8 +35,8 @@
del:'/api/trust/cert/del/',
options:{
requestHandler: function(request){
- if ( $('#ca_filter').val().length > 0) {
- request['carefs'] = $('#ca_filter').val();
+ if ( $('#server_filter').val().length > 0) {
+ request['servers'] = $('#server_filter').val();
}
return request;
}
diff --git a/src/opnsense/mvc/app/views/OPNsense/Wireguard/general.volt b/src/opnsense/mvc/app/views/OPNsense/Wireguard/general.volt
index 55f0e46d9..4b58d55a4 100644
--- a/src/opnsense/mvc/app/views/OPNsense/Wireguard/general.volt
+++ b/src/opnsense/mvc/app/views/OPNsense/Wireguard/general.volt
@@ -33,25 +33,49 @@
$('.selectpicker').selectpicker('refresh');
});
- $("#grid-peers").UIBootgrid(
+ let grid_peers = $("#grid-peers").UIBootgrid(
{
- 'search':'/api/wireguard/client/searchClient',
- 'get':'/api/wireguard/client/getClient/',
- 'set':'/api/wireguard/client/setClient/',
- 'add':'/api/wireguard/client/addClient/',
- 'del':'/api/wireguard/client/delClient/',
- 'toggle':'/api/wireguard/client/toggleClient/'
+ search: '/api/wireguard/client/searchClient',
+ get: '/api/wireguard/client/getClient/',
+ set: '/api/wireguard/client/setClient/',
+ add: '/api/wireguard/client/addClient/',
+ del: '/api/wireguard/client/delClient/',
+ toggle: '/api/wireguard/client/toggleClient/',
+ options:{
+ requestHandler: function(request){
+ if ( $('#server_filter').val().length > 0) {
+ request['servers'] = $('#server_filter').val();
+ }
+ return request;
+ }
+ },
+
+
}
);
+ grid_peers.on("loaded.rs.jquery.bootgrid", function (e){
+ // reload servers before grid load
+ if ($("#server_filter > option").length == 0) {
+ ajaxGet('/api/wireguard/client/list_servers', {}, function(data, status){
+ if (data.rows !== undefined) {
+ for (let i=0; i < data.rows.length ; ++i) {
+ let row = data.rows[i];
+ $("#server_filter").append($("").val(row.uuid).html(row.name));
+ }
+ $("#server_filter").selectpicker('refresh');
+ }
+ });
+ }
+ });
$("#grid-instances").UIBootgrid(
{
- 'search':'/api/wireguard/server/searchServer',
- 'get':'/api/wireguard/server/getServer/',
- 'set':'/api/wireguard/server/setServer/',
- 'add':'/api/wireguard/server/addServer/',
- 'del':'/api/wireguard/server/delServer/',
- 'toggle':'/api/wireguard/server/toggleServer/'
+ search: '/api/wireguard/server/searchServer',
+ get: '/api/wireguard/server/getServer/',
+ set: '/api/wireguard/server/setServer/',
+ add: '/api/wireguard/server/addServer/',
+ del: '/api/wireguard/server/delServer/',
+ toggle: '/api/wireguard/server/toggleServer/'
}
);
@@ -86,6 +110,11 @@
}
});
})
+ $("#filter_container").detach().prependTo('#grid-peers-header > .row > .actionBar > .actions');
+ $("#server_filter").change(function(){
+ $('#grid-peers').bootgrid('reload');
+ });
+
// update history on tab state and implement navigation
if(window.location.hash != "") {
$('a[href="' + window.location.hash + '"]').click()
@@ -112,6 +141,14 @@
+
+
@@ -121,6 +158,7 @@
| {{ lang._('Endpoint address') }} |
{{ lang._('Endpoint port') }} |
{{ lang._('Allowed IPs') }} |
+ {{ lang._('Instances') }} |
{{ lang._('Commands') }} |