luci-app-firewall: properly handle custom multi IP/MAC input
authorJo-Philipp Wich <jo@mein.io>
Fri, 19 Feb 2021 10:29:14 +0000 (11:29 +0100)
committerJo-Philipp Wich <jo@mein.io>
Fri, 19 Feb 2021 10:31:10 +0000 (11:31 +0100)
Store multiple space separated custom address values as separate uci
list items in the configuration.

Fixes: #4822
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit b60be8cfd82e83818013fafce00c9433e0c38376)

applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js

index b6f4aef3d09d317a30bc89a1457a18cf23fe4d78..7a04d26c9dc47b7bbb513035e81789f85a81aa57 100644 (file)
@@ -425,8 +425,23 @@ return baseclass.extend({
                opt.addChoices(choices[0], choices[1]);
        },
 
+       CBIDynamicMultiValueList: form.DynamicList.extend({
+               renderWidget: function(/* ... */) {
+                       var dl = form.DynamicList.prototype.renderWidget.apply(this, arguments),
+                           inst = dom.findClassInstance(dl);
+
+                       inst.addItem = function(dl, value, text, flash) {
+                               var values = L.toArray(value);
+                               for (var i = 0; i < values.length; i++)
+                                       ui.DynamicList.prototype.addItem.call(this, dl, values[i], null, true);
+                       };
+
+                       return dl;
+               }
+       }),
+
        addIPOption: function(s, tab, name, label, description, family, hosts, multiple) {
-               var o = s.taboption(tab, multiple ? form.DynamicList : form.Value, name, label, description);
+               var o = s.taboption(tab, multiple ? this.CBIDynamicMultiValueList : form.Value, name, label, description);
 
                o.modalonly = true;
                o.datatype = 'list(neg(ipmask))';
@@ -474,7 +489,7 @@ return baseclass.extend({
        },
 
        addMACOption: function(s, tab, name, label, description, hosts) {
-               var o = s.taboption(tab, form.DynamicList, name, label, description);
+               var o = s.taboption(tab, this.CBIDynamicMultiValueList, name, label, description);
 
                o.modalonly = true;
                o.datatype = 'list(macaddr)';