diff --git a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/MacAddressField.php b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/MacAddressField.php
index 88e5a6b89..7fe4ff17c 100644
--- a/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/MacAddressField.php
+++ b/src/opnsense/mvc/app/models/OPNsense/Base/FieldTypes/MacAddressField.php
@@ -33,8 +33,60 @@ use OPNsense\Base\Validators\CallbackValidator;
/**
* Class MacAddressField
*/
-class MacAddressField extends TextField
+class MacAddressField extends BaseField
{
+ /**
+ * @var bool marks if this is a data node or a container
+ */
+ protected $internalIsContainer = false;
+
+ /**
+ * @var string when multiple values could be provided at once, specify the split character
+ */
+ protected $internalFieldSeparator = ',';
+
+ /**
+ * @var bool when set, results are returned as list (with all options enabled)
+ */
+ protected $internalAsList = false;
+
+ /**
+ * trim MAC addresses
+ * @param string $value
+ */
+ public function setValue($value)
+ {
+ parent::setValue(trim($value));
+ }
+
+ /**
+ * get valid options, descriptions and selected value
+ * @return array
+ */
+ public function getNodeData()
+ {
+ if ($this->internalAsList) {
+ // return result as list
+ $result = array();
+ foreach (explode($this->internalFieldSeparator, $this->internalValue) as $address) {
+ $result[$address] = array("value" => $address, "selected" => 1);
+ }
+ return $result;
+ } else {
+ // normal, single field response
+ return $this->internalValue;
+ }
+ }
+
+ /**
+ * select if multiple addresses may be selected at once
+ * @param $value string value Y/N
+ */
+ public function setAsList($value)
+ {
+ $this->internalAsList = trim(strtoupper($value)) == "Y";
+ }
+
/**
* {@inheritdoc}
*/
@@ -51,8 +103,10 @@ class MacAddressField extends TextField
$validators = parent::getValidators();
if ($this->internalValue != null) {
$validators[] = new CallbackValidator(["callback" => function ($data) {
- if (empty(filter_var($data, FILTER_VALIDATE_MAC))) {
- return [$this->getValidationMessage()];
+ foreach ($this->internalAsList ? explode($this->internalFieldSeparator, $data) : [$data] as $address) {
+ if (empty(filter_var($address, FILTER_VALIDATE_MAC))) {
+ return [$this->getValidationMessage()];
+ }
}
return [];
}
diff --git a/src/opnsense/mvc/app/models/OPNsense/CaptivePortal/CaptivePortal.xml b/src/opnsense/mvc/app/models/OPNsense/CaptivePortal/CaptivePortal.xml
index ff420c563..15a33bd17 100644
--- a/src/opnsense/mvc/app/models/OPNsense/CaptivePortal/CaptivePortal.xml
+++ b/src/opnsense/mvc/app/models/OPNsense/CaptivePortal/CaptivePortal.xml
@@ -58,14 +58,13 @@
/^([0-9a-zA-Z.,_\-]){0,1024}$/u
Please enter a valid servername, ip address or leave this option blank
-
- /^([\/0-9.,])*/u
- Please enter valid addresses
+
+ ,
+ Y
+ N
-
- lower
- /^((([0-9a-fA-F]{2}:){5}([0-9a-fA-F]{2})([,]){0,1}))*/u
- Please enter valid mac addresses
+
+ Y
0
diff --git a/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Netflow.xml b/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Netflow.xml
index 71153ecbc..a4b7f3373 100644
--- a/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Netflow.xml
+++ b/src/opnsense/mvc/app/models/OPNsense/Diagnostics/Netflow.xml
@@ -25,8 +25,9 @@
- /^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?):(6553[0-5]|655[0-2][0-9]|65[0-4](\d){2}|6[0-4](\d){3}|[1-5](\d){4}|[1-9](\d){0,3})([,]){0,1})*/u
+ /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?):(6553[0-5]|655[0-2][0-9]|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3})$/u
Please enter valid targets (e.g. 192.168.0.1:2055).
+ Y
diff --git a/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.xml b/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.xml
index dcb473f09..804bd8e68 100644
--- a/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.xml
+++ b/src/opnsense/mvc/app/models/OPNsense/Monit/Monit.xml
@@ -22,12 +22,11 @@
86400
Start Delay needs to be an integer value between 0 and 86400
-
+
127.0.0.1
Y
- Y
- /^([0-9a-zA-Z\.,_\-:]){0,1024}$/u
- lower
+ Y
+ ,
Please specify a valid servername or IP address.
diff --git a/src/opnsense/mvc/app/models/OPNsense/Wireguard/Server.xml b/src/opnsense/mvc/app/models/OPNsense/Wireguard/Server.xml
index a8df0c459..e8d958c81 100644
--- a/src/opnsense/mvc/app/models/OPNsense/Wireguard/Server.xml
+++ b/src/opnsense/mvc/app/models/OPNsense/Wireguard/Server.xml
@@ -39,8 +39,11 @@
1
9300
-
- /^([a-fA-F0-9\.:\[\]]*?,)*([a-fA-F0-9\.:\[\]]*)$/
+
+ ,
+ Y
+ N
+ N
Please use valid IPv4 or IPv6 addresses.