diff --git a/net/relayd/Makefile b/net/relayd/Makefile index 92ce34c46..9ead78b2b 100644 --- a/net/relayd/Makefile +++ b/net/relayd/Makefile @@ -3,6 +3,6 @@ PLUGIN_VERSION= 2.0.d PLUGIN_DEPENDS= relayd PLUGIN_COMMENT= Relayd Load Balancer PLUGIN_MAINTAINER= frank.brendel@eurolog.com -PLUGIN_REVISION= 0 +PLUGIN_REVISION= 1 .include "../../Mk/plugins.mk" diff --git a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php index 51cf2a554..71166734a 100644 --- a/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php +++ b/net/relayd/src/opnsense/mvc/app/controllers/OPNsense/Relayd/Api/SettingsController.php @@ -58,16 +58,25 @@ class SettingsController extends ApiMutableModelControllerBase */ public function getAction($nodeType = null, $uuid = null) { - if ($nodeType != null) { + $result = array("result" => "failed"); + if ($this->request->isGet() && $nodeType != null) { $this->validateNodeType($nodeType); + $mdlRelayd = new Relayd(); if ($nodeType == 'general') { - $mdlRelayd = new Relayd(); - return array('result' => 'ok', 'general' => $mdlRelayd->getNodeByReference('general')->getNodes()); + $node = $mdlRelayd->getNodeByReference($nodeType); } else { - return $this->getBase($nodeType, $nodeType, $uuid); + if($uuid != null) { + $node = $mdlRelayd->getNodeByReference($nodeType . '.' . $uuid); + } else { + $node = $mdlRelayd->$nodeType->Add(); + } + } + if ($node != null) { + $result[$nodeType] = $node->getNodes(); + $result["result"] = "ok"; } } - return array("result" => "failed"); + return $result; } /** @@ -79,74 +88,85 @@ class SettingsController extends ApiMutableModelControllerBase */ public function setAction($nodeType = null, $uuid = null) { - if (!$this->request->isPost() || !$this->request->hasPost("relayd") || $nodeType == null) { - return array('result' => 'failed'); - } - - $this->validateNodeType($nodeType); - - $relaydInfo = $this->request->getPost("relayd"); - - if ($nodeType == 'general') { + $result = array("result" => "failed", "validations" => array()); + if ($this->request->isPost() && $this->request->hasPost("relayd") && $nodeType != null) { + $this->validateNodeType($nodeType); $mdlRelayd = new Relayd(); - $node = $mdlRelayd->getNodeByReference($nodeType); - $node->setNodes($relaydInfo[$nodeType]); - if ($relaydInfo['general']['enabled'] == '0') { - $svcRelayd = new ServiceController(); - $svcRelayd->stopAction(); - } - $mdlRelayd->serializeToConfig(); - Config::getInstance()->save(); - return array("result" => "saved"); - } - - // perform plugin specific validations - if ($nodeType == 'virtualserver') { - if ($relaydInfo[$nodeType]['type'] == 'redirect') { - if ($relaydInfo[$nodeType]['transport_tablemode'] != 'least-states' && - $relaydInfo[$nodeType]['transport_tablemode'] != 'roundrobin') { - $result["validations"]['relayd.virtualserver.transport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['transport_tablemode'] . "' not supported for redirects."; - } - if ($relaydInfo[$nodeType]['backuptransport_tablemode'] != 'least-states' && - $relaydInfo[$nodeType]['backuptransport_tablemode'] != 'roundrobin') { - $result["validations"]['relayd.virtualserver.backuptransport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['backuptransport_tablemode'] . "' not supported for redirects."; + if ($nodeType == 'general') { + $node = $mdlRelayd->getNodeByReference($nodeType); + } else { + if($uuid != null) { + $node = $mdlRelayd->getNodeByReference($nodeType . '.' . $uuid); + } else { + $node = $mdlRelayd->$nodeType->Add(); } } - if ($relaydInfo[$nodeType]['type'] == 'relay') { - if ($relaydInfo[$nodeType]['transport_tablemode'] == 'least-states') { - $result["validations"]['relayd.virtualserver.transport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['transport_tablemode'] . "' not supported for relays."; + if ($node != null) { + $relaydInfo = $this->request->getPost("relayd"); + + // perform plugin specific validations + if ($nodeType == 'virtualserver') { + if ($relaydInfo[$nodeType]['type'] == 'redirect') { + if ($relaydInfo[$nodeType]['transport_tablemode'] != 'least-states' && + $relaydInfo[$nodeType]['transport_tablemode'] != 'roundrobin') { + $result["validations"]['relayd.virtualserver.transport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['transport_tablemode'] . "' not supported for redirects."; + } + if ($relaydInfo[$nodeType]['backuptransport_tablemode'] != 'least-states' && + $relaydInfo[$nodeType]['backuptransport_tablemode'] != 'roundrobin') { + $result["validations"]['relayd.virtualserver.backuptransport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['backuptransport_tablemode'] . "' not supported for redirects."; + } + } + if ($relaydInfo[$nodeType]['type'] == 'relay') { + if ($relaydInfo[$nodeType]['transport_tablemode'] == 'least-states') { + $result["validations"]['relayd.virtualserver.transport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['transport_tablemode'] . "' not supported for relays."; + } + if ($relaydInfo[$nodeType]['backuptransport_tablemode'] == 'least-states') { + $result["validations"]['relayd.virtualserver.backuptransport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['backuptransport_tablemode'] . "' not supported for relays."; + } + } + } elseif ($nodeType == 'tablecheck') { + switch ($relaydInfo[$nodeType]['type']) { + case 'send': + if (empty($relaydInfo[$nodeType]['expect'])) { + $result["validations"]['relayd.tablecheck.expect'] = "Expect Pattern cannot be empty."; + } + break; + case 'script': + if(empty($relaydInfo[$nodeType]['path'])) { + $result["validations"]['relayd.tablecheck.path'] = "Script path cannot be empty."; + } + break; + case 'http': + if(empty($relaydInfo[$nodeType]['path'])) { + $result["validations"]['relayd.tablecheck.path'] = "Path cannot be empty."; + } + if(empty($relaydInfo[$nodeType]['code']) && empty($relaydInfo[$nodeType]['digest'])) { + $result["validations"]['relayd.tablecheck.code'] = "Provide one of Response Code or Message Digest."; + $result["validations"]['relayd.tablecheck.digest'] = "Provide one of Response Code or Message Digest."; + } + break; + } } - if ($relaydInfo[$nodeType]['backuptransport_tablemode'] == 'least-states') { - $result["validations"]['relayd.virtualserver.backuptransport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['backuptransport_tablemode'] . "' not supported for relays."; + + $node->setNodes($relaydInfo[$nodeType]); + $valMsgs = $mdlRelayd->performValidation(); + foreach ($valMsgs as $field => $msg) { + $fieldnm = str_replace($node->__reference, "relayd." . $nodeType, $msg->getField()); + $result["validations"][$fieldnm] = $msg->getMessage(); } - } - } elseif ($nodeType == 'tablecheck') { - switch ($relaydInfo[$nodeType]['type']) { - case 'send': - if (empty($relaydInfo[$nodeType]['expect'])) { - $result["validations"]['relayd.tablecheck.expect'] = "Expect Pattern cannot be empty."; + if (empty($result["validations"])) { + unset($result["validations"]); + $result['result'] = 'ok'; + $mdlRelayd->serializeToConfig(); + Config::getInstance()->save(); + if ($nodeType == 'general' && $relaydInfo['general']['enabled'] == '0') { + $svcRelayd = new ServiceController(); + $result = $svcRelayd->stopAction(); } - break; - case 'script': - if (empty($relaydInfo[$nodeType]['path'])) { - $result["validations"]['relayd.tablecheck.path'] = "Script path cannot be empty."; - } - break; - case 'http': - if (empty($relaydInfo[$nodeType]['path'])) { - $result["validations"]['relayd.tablecheck.path'] = "Path cannot be empty."; - } - if (empty($relaydInfo[$nodeType]['code']) && empty($relaydInfo[$nodeType]['digest'])) { - $result["validations"]['relayd.tablecheck.code'] = "Provide one of Response Code or Message Digest."; - $result["validations"]['relayd.tablecheck.digest'] = "Provide one of Response Code or Message Digest."; - } - break; + } } } - if (!empty($result["validations"])) { - return $result; - } - return $this->setBase('relayd', $nodeType, $uuid); + return $result; } /** @@ -200,8 +220,11 @@ class SettingsController extends ApiMutableModelControllerBase */ public function searchAction($nodeType = null) { - if ($nodeType != null) { + $this->sessionClose(); + if ($this->request->isPost() && $nodeType != null) { $this->validateNodeType($nodeType); + $mdlRelayd = new Relayd(); + $grid = new UIModelGrid($mdlRelayd->$nodeType); $fields = array(); switch ($nodeType) { case 'host': @@ -220,7 +243,7 @@ class SettingsController extends ApiMutableModelControllerBase $fields = array('enabled', 'name', 'type'); break; } - return $this->searchBase($nodeType, $fields); + return $grid->fetchBindRequest($this->request, $fields); } }