diff --git a/net/zerotier/Makefile b/net/zerotier/Makefile index 8cdc78b31..5c55b3919 100644 --- a/net/zerotier/Makefile +++ b/net/zerotier/Makefile @@ -1,5 +1,5 @@ PLUGIN_NAME= zerotier -PLUGIN_VERSION= 1.0 +PLUGIN_VERSION= 1.1.0 PLUGIN_COMMENT= Virtual Networks That Just Work PLUGIN_DEPENDS= zerotier PLUGIN_MAINTAINER= dharrigan@gmail.com diff --git a/net/zerotier/src/etc/inc/plugins.inc.d/zerotier.inc b/net/zerotier/src/etc/inc/plugins.inc.d/zerotier.inc index 00ba35193..e0804a84c 100644 --- a/net/zerotier/src/etc/inc/plugins.inc.d/zerotier.inc +++ b/net/zerotier/src/etc/inc/plugins.inc.d/zerotier.inc @@ -29,15 +29,8 @@ function zerotier_enabled() { - $mdl = new \OPNsense\Zerotier\Zerotier(); - - foreach ($mdl->networks->network->__items as $network) { - if ($network->enabled == '1') { - return true; - } - } - - return false; + $zerotier = new \OPNsense\Zerotier\Zerotier(); + return (string)$zerotier->enabled == '1'; } function zerotier_services() diff --git a/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/Api/ZerotierController.php b/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/Api/ZerotierController.php index 1297eb888..7764adc18 100644 --- a/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/Api/ZerotierController.php +++ b/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/Api/ZerotierController.php @@ -45,12 +45,26 @@ class ZerotierController extends ApiMutableModelControllerBase { $result = array(); if ($this->request->isGet()) { - $mdlZerotier = new Zerotier(); + $mdlZerotier = $this->getModel(); $result['zerotier'] = $mdlZerotier->getNodes(); } return $result; } + public function setAction() + { + $result = array("result" => "failed"); + if($this->request->isPost()) { + $mdlZerotier = $this->getModel(); + $mdlZerotier->setNodes($this->request->getPost("zerotier")); + $mdlZerotier->serializeToConfig(); + Config::getInstance()->save(); + $enabled = $this->isEnabled($mdlZerotier); + $result["result"] = $this->toggleZerotierService($enabled); + } + return $result; + } + public function searchNetworkAction() { $this->sessionClose(); @@ -129,8 +143,12 @@ class ZerotierController extends ApiMutableModelControllerBase if ($this->request->isPost()) { $mdlZerotier = $this->getModel(); if ($uuid != null) { + if (!$this->isEnabled($mdlZerotier)) { + $result["result"] = "service_not_enabled"; + return $result; + } $node = $mdlZerotier->getNodeByReference('networks.network.' . $uuid); - if ($node->enabled->__toString() == "1") { + if ($this->isEnabled($node)) { # Ensure we remove the interface before deleting the network $this->toggleZerotierNetwork($node->networkId, 0); } @@ -139,7 +157,7 @@ class ZerotierController extends ApiMutableModelControllerBase Config::getInstance()->save(); $result["result"] = "deleted"; } else { - $result["result"] = "not found"; + $result["result"] = "not_found"; } } } @@ -152,10 +170,14 @@ class ZerotierController extends ApiMutableModelControllerBase if ($this->request->isPost()) { $mdlZerotier = $this->getModel(); if ($uuid != null) { + if (!$this->isEnabled($mdlZerotier)) { + $result["result"] = "service_not_enabled"; + return $result; + } $node = $mdlZerotier->getNodeByReference('networks.network.' . $uuid); if ($node != null) { $networkId = $node->networkId; - if ($node->enabled->__toString() == "1") { + if ($this->isEnabled($node)) { $node->enabled = "0"; $result['result'] = $this->toggleZerotierNetwork($networkId, 0); } else { @@ -170,34 +192,13 @@ class ZerotierController extends ApiMutableModelControllerBase return $result; } - public function reconfigureZerotierAction() - { - if ($this->request->isPost()) { - $this->sessionClose(); - $backend = new Backend(); - $backend->configdRun("template reload OPNsense/zerotier"); - $mdlZerotier = $this->getModel(); - $action = 'stop'; - foreach ($mdlZerotier->networks->network->__items as $network) { - if ($network->enabled == '1') { - $action = 'restart'; - break; - } - } - $result = trim($backend->configdRun("zerotier $action")); - return array("status" => $result); - } else { - return array("status" => "failed"); - } - } - public function statusAction() { $mdlZerotier = $this->getModel(); $enabled = false; foreach ($mdlZerotier->networks->network->__items as $network) { - if ($network->enabled == '1') { + if ($this->isEnabled($network)) { $enabled = true; break; } @@ -220,7 +221,7 @@ class ZerotierController extends ApiMutableModelControllerBase $status = "unknown"; } - return array("status" => $status); + return array("result" => $status); } private function toggleZerotierNetwork($networkId, $enabled) @@ -229,4 +230,18 @@ class ZerotierController extends ApiMutableModelControllerBase $action = $enabled ? 'join' : 'leave'; return trim($backend->configdRun("zerotier $action $networkId")); } + + private function toggleZerotierService($enabled) + { + $backend = new Backend(); + $backend->configdRun("template reload OPNsense/zerotier"); + $action = $enabled ? "start" : "stop"; + return trim($backend->configdRun("zerotier $action")); + } + + private function isEnabled($node) + { + return $node->enabled->__toString() == "1"; + } + } diff --git a/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/IndexController.php b/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/IndexController.php index cfa96678b..1e4eac172 100644 --- a/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/IndexController.php +++ b/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/IndexController.php @@ -35,6 +35,7 @@ class IndexController extends \OPNsense\Base\IndexController { $this->view->title = "VPN: Zerotier"; $this->view->pick('OPNsense/Zerotier/index'); - $this->view->formDialogNetwork = $this->getForm("dialogNetwork"); + $this->view->globalForm = $this->getForm("global"); + $this->view->dialogNetworkForm = $this->getForm("dialogNetwork"); } } diff --git a/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/forms/global.xml b/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/forms/global.xml new file mode 100644 index 000000000..339dd423d --- /dev/null +++ b/net/zerotier/src/opnsense/mvc/app/controllers/OPNsense/Zerotier/forms/global.xml @@ -0,0 +1,8 @@ +
diff --git a/net/zerotier/src/opnsense/mvc/app/models/OPNsense/Zerotier/Zerotier.xml b/net/zerotier/src/opnsense/mvc/app/models/OPNsense/Zerotier/Zerotier.xml index 1b8207f1c..3b801f502 100644 --- a/net/zerotier/src/opnsense/mvc/app/models/OPNsense/Zerotier/Zerotier.xml +++ b/net/zerotier/src/opnsense/mvc/app/models/OPNsense/Zerotier/Zerotier.xml @@ -3,7 +3,12 @@