From e4e3f98c208a66cdf4ece0dcac55a3f6da1e2adf Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Thu, 14 Mar 2019 13:55:11 +0100 Subject: [PATCH] Captive Portal administration, cleanup settings controller and use ApiMutableModelControllerBase --- .../CaptivePortal/Api/SettingsController.php | 131 ++---------------- 1 file changed, 14 insertions(+), 117 deletions(-) diff --git a/src/opnsense/mvc/app/controllers/OPNsense/CaptivePortal/Api/SettingsController.php b/src/opnsense/mvc/app/controllers/OPNsense/CaptivePortal/Api/SettingsController.php index 9702a71ce..bdec4a453 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/CaptivePortal/Api/SettingsController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/CaptivePortal/Api/SettingsController.php @@ -28,74 +28,26 @@ */ namespace OPNsense\CaptivePortal\Api; -use \OPNsense\Base\ApiControllerBase; -use \OPNsense\Core\Config; -use \OPNsense\CaptivePortal\CaptivePortal; -use \OPNsense\Base\UIModelGrid; +use \OPNsense\Base\ApiMutableModelControllerBase; /** * Class SettingsController Handles settings related API actions for Captive Portal * @package OPNsense\TrafficShaper */ -class SettingsController extends ApiControllerBase +class SettingsController extends ApiMutableModelControllerBase { - /** - * validate and save model after update or insertion. - * Use the reference node and tag to rename validation output for a specific node to a new offset, which makes - * it easier to reference specific uuids without having to use them in the frontend descriptions. - * @param $mdl model reference - * @param $node reference node, to use as relative offset - * @param $reference reference for validation output, used to rename the validation output keys - * @return array result / validation output - */ - private function save($mdl, $node = null, $reference = null) - { - $result = array("result"=>"failed","validations" => array()); - // perform validation - $valMsgs = $mdl->performValidation(); - foreach ($valMsgs as $field => $msg) { - // replace absolute path to attribute for relative one at uuid. - if ($node != null) { - $fieldnm = str_replace($node->__reference, $reference, $msg->getField()); - $result["validations"][$fieldnm] = $msg->getMessage(); - } else { - $result["validations"][$msg->getField()] = $msg->getMessage(); - } - } - - // serialize model to config and save when there are no validation errors - if (count($result['validations']) == 0) { - // save config if validated correctly - $mdl->serializeToConfig(); - - Config::getInstance()->save(); - $result = array("result" => "saved"); - } - - return $result; - } + protected static $internalModelName = 'zone'; + protected static $internalModelClass = '\OPNsense\CaptivePortal\CaptivePortal'; /** * retrieve zone settings or return defaults * @param $uuid item unique id * @return array */ - public function getZoneAction($uuid = null) - { - $mdlCP = new CaptivePortal(); - if ($uuid != null) { - $node = $mdlCP->getNodeByReference('zones.zone.'.$uuid); - if ($node != null) { - // return node - return array("zone" => $node->getNodes()); - } - } else { - // generate new node, but don't save to disc - $node = $mdlCP->zones->zone->add(); - return array("zone" => $node->getNodes()); - } - return array(); - } + public function getZoneAction($uuid = null) + { + return $this->getBase("zone", "zones.zone", $uuid); + } /** * update zone with given properties @@ -104,17 +56,7 @@ class SettingsController extends ApiControllerBase */ public function setZoneAction($uuid) { - if ($this->request->isPost() && $this->request->hasPost("zone")) { - $mdlCP = new CaptivePortal(); - if ($uuid != null) { - $node = $mdlCP->getNodeByReference('zones.zone.'.$uuid); - if ($node != null) { - $node->setNodes($this->request->getPost("zone")); - return $this->save($mdlCP, $node, "zone"); - } - } - } - return array("result"=>"failed"); + return $this->setBase("zone", "zones.zone", $uuid); } /** @@ -123,14 +65,7 @@ class SettingsController extends ApiControllerBase */ public function addZoneAction() { - $result = array("result"=>"failed"); - if ($this->request->isPost() && $this->request->hasPost("zone")) { - $mdlCP = new CaptivePortal(); - $node = $mdlCP->zones->zone->Add(); - $node->setNodes($this->request->getPost("zone")); - return $this->save($mdlCP, $node, "zone"); - } - return $result; + return $this->addBase("zone", "zones.zone"); } /** @@ -140,21 +75,7 @@ class SettingsController extends ApiControllerBase */ public function delZoneAction($uuid) { - $result = array("result"=>"failed"); - if ($this->request->isPost()) { - $mdlCP = new CaptivePortal(); - if ($uuid != null) { - if ($mdlCP->zones->zone->del($uuid)) { - // if item is removed, serialize to config and save - $mdlCP->serializeToConfig(); - Config::getInstance()->save(); - $result['result'] = 'deleted'; - } else { - $result['result'] = 'not found'; - } - } - } - return $result; + return $this->delBase("zones.zone", $uuid); } /** @@ -165,28 +86,7 @@ class SettingsController extends ApiControllerBase */ public function toggleZoneAction($uuid, $enabled = null) { - - $result = array("result" => "failed"); - if ($this->request->isPost()) { - $mdlCP = new CaptivePortal(); - if ($uuid != null) { - $node = $mdlCP->getNodeByReference('zones.zone.' . $uuid); - if ($node != null) { - if ($enabled == "0" || $enabled == "1") { - $node->enabled = (string)$enabled; - } elseif ((string)$node->enabled == "1") { - $node->enabled = "0"; - } else { - $node->enabled = "1"; - } - $result['result'] = $node->enabled; - // if item has toggled, serialize to config and save - $mdlCP->serializeToConfig(); - Config::getInstance()->save(); - } - } - } - return $result; + return $this->toggleBase("zones.zone", $uuid, $enabled); } /** @@ -195,11 +95,8 @@ class SettingsController extends ApiControllerBase */ public function searchZonesAction() { - $this->sessionClose(); - $mdlCP = new CaptivePortal(); - $grid = new UIModelGrid($mdlCP->zones->zone); - return $grid->fetchBindRequest( - $this->request, + return $this->searchBase( + "zones.zone", array("enabled", "description", "zoneid"), "description" );