luci-mod-status: fix wrong logic for maclist adding feature
authorAnsuel Smith <ansuelsmth@gmail.com>
Sat, 18 Sep 2021 14:25:23 +0000 (16:25 +0200)
committerJo-Philipp Wich <jo@mein.io>
Tue, 12 Oct 2021 21:03:33 +0000 (23:03 +0200)
Currently any new entry added to the black/whitelist deletes the
others. Fix this and improve the rule apply by firstly disconnect
the wifi client.

Fixes: #5343
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
(cherry picked from commit 085c4a08f5bf50919731304a962cfcd2b592d523)

modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/60_wifi.js

index b03d1f411161bb7baa48c5af7edd79a72a4c1de9..333884449f767e1e1fefb9747849914a5416b33a 100644 (file)
@@ -48,21 +48,18 @@ return baseclass.extend({
                ev.currentTarget.disabled = true;
                ev.currentTarget.blur();
 
-               if (exec == 'addlist') {
-                       var macs = [ mac ]
+               /* Disconnect client before adding to maclist */
+               wifinet.disconnectClient(mac, true, 5, 60000);
 
-                       for (var mac in this.iface_maclist) {
-                               macs.push(mac)
-                       }
+               if (exec == 'addlist') {
+                       wifinet.maclist.push(mac);
 
-                       uci.set('wireless', wifinet.sid, 'maclist', macs);
+                       uci.set('wireless', wifinet.sid, 'maclist', wifinet.maclist);
 
                        return uci.save()
                                .then(L.bind(L.ui.changes.init, L.ui.changes))
                                .then(L.bind(L.ui.changes.displayChanges, L.ui.changes));
                }
-
-               wifinet.disconnectClient(mac, true, 5, 60000);
        },
 
        handleGetWPSStatus: function(wifinet) {
@@ -234,14 +231,14 @@ return baseclass.extend({
                var rows = [];
 
                for (var i = 0; i < networks.length; i++) {
-                       var macfilter = uci.get('wireless', networks[i].sid, 'macfilter');
+                       var macfilter = uci.get('wireless', networks[i].sid, 'macfilter'),
+                           maclist = {};
 
                        if (macfilter != null && macfilter != 'disable') {
-                               this.isDeviceAdded = {};
-                               var macs = L.toArray(uci.get('wireless', networks[i].sid, 'maclist'));
-                               for (var j = 0; j < macs.length; j++) {
-                                       var mac = macs[j].toUpperCase();
-                                       this.isDeviceAdded[mac] = true;
+                               networks[i].maclist = L.toArray(uci.get('wireless', networks[i].sid, 'maclist'));
+                               for (var j = 0; j < networks[i].maclist.length; j++) {
+                                       var mac = networks[i].maclist[j].toUpperCase();
+                                       maclist[mac] = true;
                                }
                        }
 
@@ -324,7 +321,7 @@ return baseclass.extend({
                                        if (assoclist.firstElementChild.childNodes.length < 6)
                                                assoclist.firstElementChild.appendChild(E('th', { 'class': 'th cbi-section-actions' }));
 
-                                       if (macfilter != null && macfilter != 'disable' && !this.isDeviceAdded[bss.mac]) {
+                                       if (macfilter != null && macfilter != 'disable' && !maclist[bss.mac]) {
                                                row.push(new L.ui.ComboButton('button', {
                                                                'addlist': macfilter == 'allow' ?  _('Add to Whitelist') : _('Add to Blacklist'),
                                                                'disconnect': _('Disconnect')