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 11ddd3c1c..bd12d5eba 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 @@ -1,38 +1,38 @@ setNodes($this->request->getPost("network")); $validationMessages = $mdlZerotier->performValidation(); foreach ($validationMessages as $field => $msg) { - if(!array_key_exists("validation", $result)) { + if (!array_key_exists("validation", $result)) { $result["validations"] = array(); } $result["validation"]["network.".$msg->getField()] = $msg->getMessage(); } - if($validationMessages->count() == 0) { + if ($validationMessages->count() == 0) { unset($result["validations"]); $mdlZerotier->serializeToConfig(); Config::getInstance()->save(); @@ -119,7 +119,6 @@ class ZerotierController extends ApiMutableModelControllerBase Config::getInstance()->save(); $result["result"] = "saved"; } - } return $result; } @@ -177,17 +176,57 @@ class ZerotierController extends ApiMutableModelControllerBase $this->sessionClose(); $backend = new Backend(); $backend->configdRun("template reload OPNsense/zerotier"); - $result = trim($backend->configdRun("zerotier restart")); + $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') { + $enabled = true; + break; + } + } + + $backend = new Backend(); + $response = $backend->configdRun('zerotier status'); + + if (strpos($response, "not running") > 0) { + if ($enabled) { + $status = "stopped"; + } else { + $status = "disabled"; + } + } elseif (strpos($response, "is running") > 0) { + $status = "running"; + } elseif (!$enabled) { + $status = "disabled"; + } else { + $status = "unkown"; + } + + return array("status" => $status); + } + private function toggleZerotierNetwork($networkId, $enabled) { $backend = new Backend(); - return trim($backend->configdRun("zerotier ".($enabled ? "join " : "leave ").$networkId)); + $action = $enabled ? 'join' : 'leave'; + return trim($backend->configdRun("zerotier $action $networkId")); } - } diff --git a/net/zerotier/src/opnsense/mvc/app/views/OPNsense/Zerotier/index.volt b/net/zerotier/src/opnsense/mvc/app/views/OPNsense/Zerotier/index.volt index 7fa725644..5991cf633 100644 --- a/net/zerotier/src/opnsense/mvc/app/views/OPNsense/Zerotier/index.volt +++ b/net/zerotier/src/opnsense/mvc/app/views/OPNsense/Zerotier/index.volt @@ -42,9 +42,16 @@ POSSIBILITY OF SUCH DAMAGE. } ); + ajaxCall(url="/api/zerotier/zerotier/status", sendData={}, callback=function(data,status) { + updateServiceStatusUI(data['status']); + }); + $("#reconfigureZerotier").click(function() { $("#reconfigureZerotierProgress").addClass("fa fa-spinner fa-pulse"); ajaxCall(url="/api/zerotier/zerotier/reconfigureZerotier", sendData={}, callback=function(data, status) { + ajaxCall(url="/api/zerotier/zerotier/status", sendData={}, callback=function(data,status) { + updateServiceStatusUI(data['status']); + }); $("#reconfigureZerotierProgress").removeClass("fa fa-spinner fa-pulse"); if (status != "success" || data['status'] != 'OK') { BootstrapDialog.show({ @@ -56,7 +63,6 @@ POSSIBILITY OF SUCH DAMAGE. } }); }); - }); @@ -91,7 +97,7 @@ POSSIBILITY OF SUCH DAMAGE.