net/relayd - move validation responsibility to the model, for https://github.com/opnsense/plugins/issues/3850
@fbrendel fyi
This commit is contained in:
parent
715b17679f
commit
cf4fa70cd2
|
@ -98,7 +98,7 @@ class SettingsController extends ApiMutableModelControllerBase
|
|||
*/
|
||||
public function setAction($nodeType = null, $uuid = null)
|
||||
{
|
||||
$result = array('result' => 'failed', 'validations' => array());
|
||||
$result = array('result' => 'failed', 'validations' => []);
|
||||
if ($this->request->isPost() && $this->request->hasPost('relayd') && $nodeType != null) {
|
||||
$this->validateNodeType($nodeType);
|
||||
if ($nodeType == 'general') {
|
||||
|
@ -111,93 +111,7 @@ class SettingsController extends ApiMutableModelControllerBase
|
|||
}
|
||||
}
|
||||
if ($node != null) {
|
||||
$relaydInfo = $this->request->getPost('relayd');
|
||||
|
||||
// perform plugin specific validations
|
||||
if ($nodeType == 'virtualserver') {
|
||||
// preset defaults for validations
|
||||
if (empty($relaydInfo[$nodeType]['type'])) {
|
||||
$relaydInfo[$nodeType]['type'] = $node->type->__toString();
|
||||
}
|
||||
if (empty($relaydInfo[$nodeType]['transport_tablemode'])) {
|
||||
$relaydInfo[$nodeType]['transport_tablemode'] = $node->transport_tablemode->__toString();
|
||||
}
|
||||
if (empty($relaydInfo[$nodeType]['backuptransport_tablemode'])) {
|
||||
$relaydInfo[$nodeType]['backuptransport_tablemode'] =
|
||||
$node->backuptransport_tablemode->__toString();
|
||||
}
|
||||
|
||||
if ($relaydInfo[$nodeType]['type'] == 'redirect') {
|
||||
if (
|
||||
$relaydInfo[$nodeType]['transport_tablemode'] != 'least-states' &&
|
||||
$relaydInfo[$nodeType]['transport_tablemode'] != 'roundrobin'
|
||||
) {
|
||||
$result['validations']['relayd.virtualserver.transport_tablemode'] = sprintf(
|
||||
gettext('Scheduler "%s" not supported for redirects.'),
|
||||
$relaydInfo[$nodeType]['transport_tablemode']
|
||||
);
|
||||
}
|
||||
if (
|
||||
$relaydInfo[$nodeType]['backuptransport_tablemode'] != 'least-states' &&
|
||||
$relaydInfo[$nodeType]['backuptransport_tablemode'] != 'roundrobin'
|
||||
) {
|
||||
$result['validations']['relayd.virtualserver.backuptransport_tablemode'] = sprintf(
|
||||
gettext('Scheduler "%s" not supported for redirects.'),
|
||||
$relaydInfo[$nodeType]['backuptransport_tablemode']
|
||||
);
|
||||
}
|
||||
if (
|
||||
$relaydInfo[$nodeType]['transport_type'] == 'route' &&
|
||||
empty($relaydInfo[$nodeType]['routing_interface'])
|
||||
) {
|
||||
$result['validations']['relayd.virtualserver.routing_interface'] =
|
||||
gettext('Routing interface cannot be empty');
|
||||
}
|
||||
}
|
||||
if ($relaydInfo[$nodeType]['type'] == 'relay') {
|
||||
if ($relaydInfo[$nodeType]['transport_tablemode'] == 'least-states') {
|
||||
$result['validations']['relayd.virtualserver.transport_tablemode'] = sprintf(
|
||||
gettext('Scheduler "%s" not supported for relays.'),
|
||||
$relaydInfo[$nodeType]['transport_tablemode']
|
||||
);
|
||||
}
|
||||
if ($relaydInfo[$nodeType]['backuptransport_tablemode'] == 'least-states') {
|
||||
$result['validations']['relayd.virtualserver.backuptransport_tablemode'] = sprintf(
|
||||
gettext('Scheduler "%s" not supported for relays.'),
|
||||
$relaydInfo[$nodeType]['backuptransport_tablemode']
|
||||
);
|
||||
}
|
||||
}
|
||||
} elseif ($nodeType == 'tablecheck') {
|
||||
switch ($relaydInfo[$nodeType]['type']) {
|
||||
case 'send':
|
||||
if (empty($relaydInfo[$nodeType]['expect'])) {
|
||||
$result['validations']['relayd.tablecheck.expect'] =
|
||||
gettext('Expect Pattern cannot be empty.');
|
||||
}
|
||||
break;
|
||||
case 'script':
|
||||
if (empty($relaydInfo[$nodeType]['path'])) {
|
||||
$result['validations']['relayd.tablecheck.path'] =
|
||||
gettext('Script path cannot be empty.');
|
||||
}
|
||||
break;
|
||||
case 'http':
|
||||
if (empty($relaydInfo[$nodeType]['path'])) {
|
||||
$result['validations']['relayd.tablecheck.path'] =
|
||||
gettext('Path cannot be empty.');
|
||||
}
|
||||
if (empty($relaydInfo[$nodeType]['code']) && empty($relaydInfo[$nodeType]['digest'])) {
|
||||
$result['validations']['relayd.tablecheck.code'] =
|
||||
gettext('Provide one of Response Code or Message Digest.');
|
||||
$result['validations']['relayd.tablecheck.digest'] =
|
||||
gettext('Provide one of Response Code or Message Digest.');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$node->setNodes($relaydInfo[$nodeType]);
|
||||
$node->setNodes($this->request->getPost('relayd')[$nodeType]);
|
||||
$valMsgs = $this->getModel()->performValidation();
|
||||
foreach ($valMsgs as $field => $msg) {
|
||||
$fieldnm = str_replace($node->__reference, "relayd." . $nodeType, $msg->getField());
|
||||
|
@ -330,7 +244,7 @@ class SettingsController extends ApiMutableModelControllerBase
|
|||
if ($this->request->isPost() && $nodeType != null) {
|
||||
$this->validateNodeType($nodeType);
|
||||
$grid = new UIModelGrid($this->getModel()->$nodeType);
|
||||
$fields = array();
|
||||
$fields = [];
|
||||
switch ($nodeType) {
|
||||
case 'host':
|
||||
$fields = ['enabled', 'name', 'address'];
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
namespace OPNsense\Relayd;
|
||||
|
||||
use OPNsense\Base\BaseModel;
|
||||
use OPNsense\Base\Messages\Message;
|
||||
|
||||
/**
|
||||
* Class Relayd
|
||||
|
@ -65,6 +66,107 @@ class Relayd extends BaseModel
|
|||
return @unlink("/tmp/relayd.dirty");
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function performValidation($validateFullModel = false)
|
||||
{
|
||||
$messages = parent::performValidation($validateFullModel);
|
||||
foreach ($this->virtualserver->iterateItems() as $node) {
|
||||
if (!$validateFullModel && !$node->isFieldChanged()) {
|
||||
continue;
|
||||
}
|
||||
$key = $node->__reference;
|
||||
if ($node->type == 'redirect') {
|
||||
if (!in_array((string)$node->transport_tablemode, ['least-states', 'roundrobin'])) {
|
||||
$messages->appendMessage(
|
||||
new Message(
|
||||
sprintf(gettext('Scheduler "%s" not supported for redirects.'), $node->transport_tablemode),
|
||||
$key . ".transport_tablemode"
|
||||
)
|
||||
);
|
||||
}
|
||||
if (!in_array((string)$node->backuptransport_tablemode, ['least-states', 'roundrobin'])) {
|
||||
$messages->appendMessage(
|
||||
new Message(
|
||||
sprintf(gettext('Scheduler "%s" not supported for redirects.'), $node->transport_tablemode),
|
||||
$key . ".backuptransport_tablemode"
|
||||
)
|
||||
);
|
||||
}
|
||||
if ($node->transport_type == 'route' && empty((string)$node->routing_interface)) {
|
||||
$messages->appendMessage(
|
||||
new Message(gettext('Routing interface cannot be empty'), $key . ".routing_interface")
|
||||
);
|
||||
}
|
||||
} elseif ($node->type == 'relay') {
|
||||
if ($node->transport_tablemode == 'least-states') {
|
||||
$messages->appendMessage(
|
||||
new Message(
|
||||
sprintf(gettext('Scheduler "%s" not supported for relays.'), $node->transport_tablemode),
|
||||
$key . ".transport_tablemode"
|
||||
)
|
||||
);
|
||||
}
|
||||
if ($node->backuptransport_tablemode == 'least-states') {
|
||||
$messages->appendMessage(
|
||||
new Message(
|
||||
sprintf(
|
||||
gettext('Scheduler "%s" not supported for relays.'),
|
||||
$node->backuptransport_tablemode
|
||||
),
|
||||
$key . ".backuptransport_tablemode"
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
foreach ($this->tablecheck->iterateItems() as $node) {
|
||||
if (!$validateFullModel && !$node->isFieldChanged()) {
|
||||
continue;
|
||||
}
|
||||
$key = $node->__reference;
|
||||
switch ((string)$node->type) {
|
||||
case 'send':
|
||||
if (empty((string)$node->expect)) {
|
||||
$messages->appendMessage(
|
||||
new Message(gettext('Expect Pattern cannot be empty.'), $key . ".expect")
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 'script':
|
||||
if (empty((string)$node->path)) {
|
||||
$messages->appendMessage(
|
||||
new Message(gettext('Script path cannot be empty.'), $key . ".path")
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 'http':
|
||||
if (empty((string)$node->path)) {
|
||||
$messages->appendMessage(
|
||||
new Message(gettext('Path cannot be empty.'), $key . ".path")
|
||||
);
|
||||
}
|
||||
if (empty((string)$node->code) && empty((string)$node->digest)) {
|
||||
$messages->appendMessage(
|
||||
new Message(
|
||||
gettext('Provide one of Response Code or Message Digest.'),
|
||||
$key . ".code"
|
||||
)
|
||||
);
|
||||
$messages->appendMessage(
|
||||
new Message(
|
||||
gettext('Provide one of Response Code or Message Digest.'),
|
||||
$key . ".digest"
|
||||
)
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $messages;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type type of object (host, table, virtualserver)
|
||||
* @param string $name name of the attribute
|
||||
|
|
Loading…
Reference in New Issue