luci-app-firewall: fix creating multiple networks from zone network selector

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2021-03-01 08:54:26 +01:00
parent 49ecaf6090
commit 5d528da29f

View file

@ -178,19 +178,24 @@ return view.extend({
}; };
o.write = function(section_id, formvalue) { o.write = function(section_id, formvalue) {
var name = uci.get('firewall', section_id, 'name'), var name = uci.get('firewall', section_id, 'name'),
cfgvalue = this.cfgvalue(section_id); cfgvalue = this.cfgvalue(section_id),
oldNetworks = L.toArray(cfgvalue),
newNetworks = L.toArray(formvalue);
if (typeof(cfgvalue) == 'string' && Array.isArray(formvalue) && (cfgvalue == formvalue.join(' '))) oldNetworks.sort();
newNetworks.sort();
if (oldNetworks.join(' ') == newNetworks.join(' '))
return; return;
var tasks = [ firewall.getZone(name) ]; var tasks = [ firewall.getZone(name) ];
if (Array.isArray(formvalue)) if (Array.isArray(formvalue))
for (var i = 0; i < formvalue.length; i++) { for (var i = 0; i < newNetworks.length; i++) {
var netname = formvalue[i]; var netname = newNetworks[i];
tasks.push(network.getNetwork(netname).then(function(net) { tasks.push(network.getNetwork(netname).then(L.bind(function(netname, net) {
return net || network.addNetwork(netname, { 'proto': 'none' }); return net || network.addNetwork(netname, { 'proto': 'none' });
})); }, this, netname)));
} }
return Promise.all(tasks).then(function(zone_networks) { return Promise.all(tasks).then(function(zone_networks) {