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 738e5ae63..72fc9a8d1 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Wireguard/Api/ClientController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Wireguard/Api/ClientController.php @@ -138,6 +138,27 @@ class ClientController extends ApiMutableModelControllerBase public function addClientBuilderAction() { - return $this->addBase('configbuilder', 'clients.client'); + $uuid = null; + if ($this->request->isPost() && !empty($this->request->getPost('configbuilder'))) { + Config::getInstance()->lock(); + $mdl = new Server(); + $uuid = $this->getModel()->clients->generateUUID(); + $server = $this->request->getPost('configbuilder')['server']; + foreach ($mdl->servers->server->iterateItems() as $key => $node) { + if ($key == $server) { + $peers = array_filter(explode(',', (string)$node->peers)); + $node->peers = implode(',', array_merge($peers, [$uuid])); + break; + } + } + /** + * Save to in memory model. + * Ignore validations as $uuid might be new or trigger an existing validation issue. + * Persisting the data is handled by setBase() + */ + $mdl->serializeToConfig(false, true); + } + + return $this->setBase('configbuilder', 'clients.client', $uuid); } } diff --git a/src/opnsense/mvc/app/views/OPNsense/Wireguard/general.volt b/src/opnsense/mvc/app/views/OPNsense/Wireguard/general.volt index 8e015236b..5de41681e 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Wireguard/general.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Wireguard/general.volt @@ -158,7 +158,7 @@ psk: $("#configbuilder\\.psk").val(), tunneladdress: $("#configbuilder\\.tunneladdress").val(), keepalive: $("#configbuilder\\.keepalive").val(), - servers: instance_id, + server: instance_id, } }; ajaxCall('/api/wireguard/client/addClientBuilder', peer, function(data, status) {