diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterBaseController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterBaseController.php new file mode 100644 index 000000000..d939a990d --- /dev/null +++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterBaseController.php @@ -0,0 +1,99 @@ +request->isPost()) { + if ($rollback_revision != null) { + // background rollback timer + (new Backend())->configdpRun('pfplugin rollback_timer', [$rollback_revision], true); + } + return array("status" => (new Backend())->configdRun('filter reload')); + } else { + return array("status" => "error"); + } + } + + public function cancelRollbackAction($rollback_revision) + { + if ($this->request->isPost()) { + return array( + "status" => (new Backend())->configdpRun('pfplugin cancel_rollback', [$rollback_revision]) + ); + } else { + return array("status" => "error"); + } + } + + public function savepointAction() + { + if ($this->request->isPost()) { + // trigger a save, so we know revision->time matches our running config + Config::getInstance()->save(); + return array( + "status" => "ok", + "retention" => (string)Config::getInstance()->backupCount(), + "revision" => (string)Config::getInstance()->object()->revision->time + ); + } else { + return array("status" => "error"); + } + } + + public function revertAction($revision) + { + if ($this->request->isPost()) { + Config::getInstance()->lock(); + $filename = Config::getInstance()->getBackupFilename($revision); + if (!$filename) { + Config::getInstance()->unlock(); + return ["status" => gettext("unknown (or removed) savepoint")]; + } + $this->getModel()->rollback($revision); + Config::getInstance()->unlock(); + (new Backend())->configdRun('filter reload'); + return ["status" => "ok"]; + } else { + return array("status" => "error"); + } + } +} diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterController.php index 2ab47ee69..28e4151a7 100644 --- a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterController.php +++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/FilterController.php @@ -27,15 +27,9 @@ */ namespace OPNsense\Firewall\Api; -use OPNsense\Base\ApiMutableModelControllerBase; -use OPNsense\Core\Backend; -use OPNsense\Core\Config; -class FilterController extends ApiMutableModelControllerBase +class FilterController extends FilterBaseController { - protected static $internalModelName = 'filter'; - protected static $internalModelClass = 'OPNsense\Firewall\Filter'; - public function searchRuleAction() { return $this->searchBase("rules.rule", array('enabled', 'sequence', 'description'), "sequence"); @@ -65,61 +59,4 @@ class FilterController extends ApiMutableModelControllerBase { return $this->toggleBase("rules.rule", $uuid, $enabled); } - - public function applyAction($rollback_revision = null) - { - if ($this->request->isPost()) { - if ($rollback_revision != null) { - // background rollback timer - (new Backend())->configdpRun('pfplugin rollback_timer', [$rollback_revision], true); - } - return array("status" => (new Backend())->configdRun('filter reload')); - } else { - return array("status" => "error"); - } - } - - public function cancelRollbackAction($rollback_revision) - { - if ($this->request->isPost()) { - return array( - "status" => (new Backend())->configdpRun('pfplugin cancel_rollback', [$rollback_revision]) - ); - } else { - return array("status" => "error"); - } - } - - public function savepointAction() - { - if ($this->request->isPost()) { - // trigger a save, so we know revision->time matches our running config - Config::getInstance()->save(); - return array( - "status" => "ok", - "retention" => (string)Config::getInstance()->backupCount(), - "revision" => (string)Config::getInstance()->object()->revision->time - ); - } else { - return array("status" => "error"); - } - } - - public function revertAction($revision) - { - if ($this->request->isPost()) { - Config::getInstance()->lock(); - $filename = Config::getInstance()->getBackupFilename($revision); - if (!$filename) { - Config::getInstance()->unlock(); - return ["status" => gettext("unknown (or removed) savepoint")]; - } - $this->getModel()->rollback($revision); - Config::getInstance()->unlock(); - (new Backend())->configdRun('filter reload'); - return ["status" => "ok"]; - } else { - return array("status" => "error"); - } - } } diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/SourceNatController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/SourceNatController.php new file mode 100644 index 000000000..f55640e98 --- /dev/null +++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/Api/SourceNatController.php @@ -0,0 +1,62 @@ +searchBase("snatrules.rule", array('enabled', 'sequence', 'description'), "sequence"); + } + + public function setRuleAction($uuid) + { + return $this->setBase("rule", "snatrules.rule", $uuid); + } + + public function addRuleAction() + { + return $this->addBase("rule", "snatrules.rule"); + } + + public function getRuleAction($uuid = null) + { + return $this->getBase("rule", "snatrules.rule", $uuid); + } + + public function delRuleAction($uuid) + { + return $this->delBase("snatrules.rule", $uuid); + } + + public function toggleRuleAction($uuid, $enabled = null) + { + return $this->toggleBase("snatrules.rule", $uuid, $enabled); + } +} diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php index a3b711e8f..74c0479b3 100644 --- a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php +++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/FilterController.php @@ -32,6 +32,7 @@ class FilterController extends \OPNsense\Base\IndexController public function indexAction() { $this->view->pick('OPNsense/Firewall/filter'); + $this->view->ruleController = "filter"; $this->view->formDialogFilterRule = $this->getForm("dialogFilterRule"); } } diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php new file mode 100644 index 000000000..5b5927a06 --- /dev/null +++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/SourceNatController.php @@ -0,0 +1,38 @@ +view->pick('OPNsense/Firewall/filter'); + $this->view->ruleController = "source_nat"; + $this->view->formDialogFilterRule = $this->getForm("dialogSNatRule"); + } +} diff --git a/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/dialogSNatRule.xml b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/dialogSNatRule.xml new file mode 100644 index 000000000..48e1b9a5f --- /dev/null +++ b/net/firewall/src/opnsense/mvc/app/controllers/OPNsense/Firewall/forms/dialogSNatRule.xml @@ -0,0 +1,88 @@ +
diff --git a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/ACL/ACL.xml b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/ACL/ACL.xml index e063715bd..070ce99e9 100644 --- a/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/ACL/ACL.xml +++ b/net/firewall/src/opnsense/mvc/app/models/OPNsense/Firewall/ACL/ACL.xml @@ -6,4 +6,11 @@