Firewall.newZone() treated this.getZone(name)
(an async function returning a Promise) as if it
were synchronous, causing the while loop never
to terminate. Although, it's not used anywhere.
Sort in getZones was not producing expected results.
Now use a localeCompare which returns an integer result
for sorting purposes. The previous comparison
returned a boolean, but for sorting to work, it must
return either -1 to go before, +1 to go after, or 0 for
equality.
Rule and Redirect shall also have a sid.
Signed-off-by: Paul Donald <newtwen+github@gmail.com>
},
newZone: function() {
- return initFirewallState().then(L.bind(function() {
+ return initFirewallState().then(L.bind(async function() {
var name = 'newzone',
count = 1;
- while (this.getZone(name) != null)
+ while ((await this.getZone(name)) != null)
name = 'newzone%d'.format(++count);
return this.addZone(name);
for (let s of sections)
zones.push(new Zone(s['.name']));
- zones.sort(function(a, b) { return a.getName() > b.getName() });
+ zones.sort(function(a, b) { return L.naturalCompare(a.getName() || '', b.getName() || '') });
return zones;
});
Rule = AbstractFirewallItem.extend({
+ __init__: function(sid) {
+ this.sid = sid;
+ },
+
getSource: function() {
return this.get('src');
},
Redirect = AbstractFirewallItem.extend({
+ __init__: function(sid) {
+ this.sid = sid;
+ },
+
getSource: function() {
return this.get('src');
},