From 172aa54a141d47d9df1622f47845a84b6026cbf2 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Sat, 28 Jul 2018 13:12:03 +0200 Subject: [PATCH] IDS, fix rule selection (handle per batch sequentially) and some related unintentional side effects, closes https://github.com/opnsense/core/pull/2447 --- .../mvc/app/views/OPNsense/IDS/index.volt | 59 ++++++++++++------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/src/opnsense/mvc/app/views/OPNsense/IDS/index.volt b/src/opnsense/mvc/app/views/OPNsense/IDS/index.volt index 2942fcdad..32b0d57de 100644 --- a/src/opnsense/mvc/app/views/OPNsense/IDS/index.volt +++ b/src/opnsense/mvc/app/views/OPNsense/IDS/index.volt @@ -186,7 +186,8 @@ POSSIBILITY OF SUCH DAMAGE. * try to avoid too much items per call (results in too long url's) */ function actionToggleSelected(gridId, url, state, combine) { - var rows =$("#"+gridId).bootgrid('getSelectedRows'); + var defer_toggle = $.Deferred(); + var rows = $("#"+gridId).bootgrid('getSelectedRows'); if (rows != undefined){ var deferreds = []; if (state != undefined) { @@ -194,26 +195,31 @@ POSSIBILITY OF SUCH DAMAGE. } else { var url_suffix = ""; } - + var base = $.when({}); var keyset = []; - $.each(rows, function(key,uuid){ + $.each(rows, function(key, uuid){ keyset.push(uuid); - if ( combine == undefined || keyset.length > combine) { - deferreds.push(ajaxCall(url + keyset.join(',') +'/'+url_suffix, sendData={},null)); + if ( combine === undefined || keyset.length > combine || rows[rows.length - 1] === uuid) { + var call_url = url + keyset.join(',') +'/'+url_suffix; + base = base.then(function() { + var defer = $.Deferred(); + ajaxCall(call_url, sendData={}, function(){ + defer.resolve(); + }); + return defer.promise(); + }); keyset = []; } }); - - // flush remaining items - if (keyset.length > 0) { - deferreds.push(ajaxCall(url + keyset.join(',') +'/'+url_suffix, sendData={},null)); - } - - // refresh when all toggles are executed - $.when.apply(null, deferreds).done(function(){ + // last action in the list, reload grid and release this promise + base.then(function(){ $("#"+gridId).bootgrid("reload"); + defer_toggle.resolve(); }); + } else { + defer_toggle.resolve(); } + return defer_toggle.promise(); } /************************************************************************************************************* @@ -572,19 +578,30 @@ POSSIBILITY OF SUCH DAMAGE. /** * disable selected rules */ - $("#disableSelectedRules").click(function(){ + $("#disableSelectedRules").click(function(event){ + event.preventDefault(); var gridId = 'grid-installedrules'; var url = '/api/ids/settings/toggleRule/'; - actionToggleSelected(gridId, url, 0, 100); + $("#disableSelectedRules > span").removeClass("fa-square-o"); + $("#disableSelectedRules > span").addClass("fa-spinner fa-pulse"); + actionToggleSelected(gridId, url, 0, 100).done(function(){ + $("#disableSelectedRules > span").removeClass("fa-spinner fa-pulse"); + $("#disableSelectedRules > span").addClass("fa-square-o"); + }); }); /** * enable selected rules */ - $("#enableSelectedRules").click(function(){ + $("#enableSelectedRules").unbind('click').click(function(){ var gridId = 'grid-installedrules'; var url = '/api/ids/settings/toggleRule/'; - actionToggleSelected(gridId, url, 1, 100); + $("#enableSelectedRules > span").removeClass("fa-check-square-o"); + $("#enableSelectedRules > span").addClass("fa-spinner fa-pulse"); + actionToggleSelected(gridId, url, 1, 100).done(function(){ + $("#enableSelectedRules > span").removeClass("fa-spinner fa-pulse"); + $("#enableSelectedRules > span").addClass("fa-check-square-o"); + }); }); /** @@ -699,8 +716,8 @@ POSSIBILITY OF SUCH DAMAGE.
- - + +
@@ -784,8 +801,8 @@ POSSIBILITY OF SUCH DAMAGE. - - + +