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.

- +

diff --git a/net/zerotier/src/opnsense/service/conf/actions.d/actions_zerotier.conf b/net/zerotier/src/opnsense/service/conf/actions.d/actions_zerotier.conf index 43a130f70..8dd1fd3c3 100644 --- a/net/zerotier/src/opnsense/service/conf/actions.d/actions_zerotier.conf +++ b/net/zerotier/src/opnsense/service/conf/actions.d/actions_zerotier.conf @@ -16,6 +16,12 @@ parameters: type:script message:Restarting Zerotier Service +[status] +command:/usr/local/etc/rc.d/zerotier status;exit 0 +parameters: +type:script_output +message:Probing Zerotier Service + [join] command:/usr/local/bin/zerotier-cli parameters: join %s diff --git a/net/zerotier/src/opnsense/service/templates/OPNsense/zerotier/zerotier b/net/zerotier/src/opnsense/service/templates/OPNsense/zerotier/zerotier index 4fcc16cf5..20d2e5740 100644 --- a/net/zerotier/src/opnsense/service/templates/OPNsense/zerotier/zerotier +++ b/net/zerotier/src/opnsense/service/templates/OPNsense/zerotier/zerotier @@ -1 +1,11 @@ +{% set networks = [] %} +{% for network in helpers.toList('OPNsense.zerotier.networks.network') %} +{% if network.enabled == '1' %} +{% do networks.append(network) %} +{% endif %} +{% endfor %} +{% if networks|length > 0 %} zerotier_enable="YES" +{% else %} +zerotier_enable="NO" +{% endif %}