luci-app-banip: sync with release 1.5.6-1
authorDirk Brenken <[email protected]>
Fri, 11 Apr 2025 20:06:20 +0000 (22:06 +0200)
committerDirk Brenken <[email protected]>
Fri, 11 Apr 2025 20:11:33 +0000 (22:11 +0200)
* small fixes & improvements

Signed-off-by: Dirk Brenken <[email protected]>
(cherry picked from commit 5ca9b36a3871e8e64fed4842b3342ee74f57b76a)

applications/luci-app-banip/htdocs/luci-static/resources/view/banip/allowlist.js
applications/luci-app-banip/htdocs/luci-static/resources/view/banip/blocklist.js
applications/luci-app-banip/htdocs/luci-static/resources/view/banip/custom.css
applications/luci-app-banip/htdocs/luci-static/resources/view/banip/feeds.js
applications/luci-app-banip/htdocs/luci-static/resources/view/banip/overview.js
applications/luci-app-banip/root/usr/share/luci/menu.d/luci-app-banip.json
applications/luci-app-banip/root/usr/share/rpcd/acl.d/luci-app-banip.json

index 53cc8a56076c0d74d0348727cafe58690498b380..24d9438b765e04fca07fc3bbf9e4e6d7007d3fdd 100644 (file)
@@ -3,18 +3,41 @@
 'require fs';
 'require ui';
 
+let localFile = '/etc/banip/banip.allowlist';
 let notMsg, errMsg;
 
 return view.extend({
        load: function () {
-               return Promise.all([
-                       L.resolveDefault(fs.stat('/etc/banip/banip.allowlist'), {}),
-                       L.resolveDefault(fs.read_direct('/etc/banip/banip.allowlist'), '')
+               return L.resolveDefault(fs.stat(localFile), "")
+                       .then(function (stat) {
+                               if (!stat) {
+                                       return fs.write(localFile, "");
+                               }
+                               return Promise.all([
+                                       L.resolveDefault(fs.stat(localFile), ""),
+                                       L.resolveDefault(fs.read_direct(localFile), "")
+                               ]);
+                       });
+       },
+       render: function (allowlist) {
+               if (allowlist[0].size >= 100000) {
+                       document.body.scrollTop = document.documentElement.scrollTop = 0;
+                       ui.addNotification(null, E('p', _('The allowlist is too big, unable to save modifications.')), 'error');
+               }
+               return E('div', { 'class': 'cbi-section cbi-section-descr' }, [
+                       E('p', _('This is the local banIP allowlist that will permit certain MAC-, IP-addresses or domain names.<br /> \
+                               <em><b>Please note:</b></em> add only exactly one MAC/IPv4/IPv6 address or domain name per line. Ranges in CIDR notation and MAC/IP-bindings are allowed.')),
+                       E('textarea', {
+                               'style': 'width: 100% !important; padding: 5px; font-family: monospace; margin-top: .4em',
+                               'spellcheck': 'false',
+                               'wrap': 'off',
+                               'rows': 25
+                       }, [allowlist[1] != null ? allowlist[1] : ''])
                ]);
        },
        handleSave: function (ev) {
                let value = ((document.querySelector('textarea').value || '').trim().toLowerCase().replace(/\r\n/g, '\n')) + '\n';
-               return fs.write('/etc/banip/banip.allowlist', value)
+               return fs.write(localFile, value)
                        .then(function () {
                                document.querySelector('textarea').value = value;
                                document.body.scrollTop = document.documentElement.scrollTop = 0;
@@ -30,22 +53,6 @@ return view.extend({
                                }
                        });
        },
-       render: function (allowlist) {
-               if (allowlist[0].size >= 100000) {
-                       document.body.scrollTop = document.documentElement.scrollTop = 0;
-                       ui.addNotification(null, E('p', _('The allowlist is too big, unable to save modifications.')), 'error');
-               }
-               return E('div', { 'class': 'cbi-section cbi-section-descr' }, [
-                       E('p', _('This is the local banIP allowlist that will permit certain MAC-, IP-addresses or domain names.<br /> \
-                               <em><b>Please note:</b></em> add only exactly one MAC/IPv4/IPv6 address or domain name per line. Ranges in CIDR notation and MAC/IP-bindings are allowed.')),
-                               E('textarea', {
-                                       'style': 'width: 100% !important; padding: 5px; font-family: monospace; margin-top: .4em',
-                                       'spellcheck': 'false',
-                                       'wrap': 'off',
-                                       'rows': 25
-                               }, [allowlist[1] != null ? allowlist[1] : ''])
-               ]);
-       },
        handleSaveApply: null,
        handleReset: null
 });
index b44761d32e4cb7f8cd95bc2d2c6e8b8ad501c8dd..3a9c478da865028eedb691b61d01933ce45b359a 100644 (file)
@@ -3,31 +3,20 @@
 'require fs';
 'require ui';
 
+let localFile = '/etc/banip/banip.blocklist';
 let notMsg, errMsg;
 
 return view.extend({
        load: function () {
-               return Promise.all([
-                       L.resolveDefault(fs.stat('/etc/banip/banip.blocklist'), {}),
-                       L.resolveDefault(fs.read_direct('/etc/banip/banip.blocklist'), '')
-               ]);
-       },
-       handleSave: function (ev) {
-               let value = ((document.querySelector('textarea').value || '').trim().toLowerCase().replace(/\r\n/g, '\n')) + '\n';
-               return fs.write('/etc/banip/banip.blocklist', value)
-                       .then(function () {
-                               document.querySelector('textarea').value = value;
-                               document.body.scrollTop = document.documentElement.scrollTop = 0;
-                               if (!notMsg) {
-                                       ui.addNotification(null, E('p', _('Blocklist modifications have been saved, reload banIP that changes take effect.')), 'info');
-                                       notMsg = true;
-                               }
-                       }).catch(function (e) {
-                               document.body.scrollTop = document.documentElement.scrollTop = 0;
-                               if (!errMsg) {
-                                       ui.addNotification(null, E('p', _('Unable to save modifications: %s').format(e.message)), 'error');
-                                       errMsg = true;
+               return L.resolveDefault(fs.stat(localFile), "")
+                       .then(function (stat) {
+                               if (!stat) {
+                                       return fs.write(localFile, "");
                                }
+                               return Promise.all([
+                                       L.resolveDefault(fs.stat(localFile), ""),
+                                       L.resolveDefault(fs.read_direct(localFile), "")
+                               ]);
                        });
        },
        render: function (blocklist) {
@@ -46,6 +35,24 @@ return view.extend({
                                }, [blocklist[1] != null ? blocklist[1] : ''])
                ]);
        },
+       handleSave: function (ev) {
+               let value = ((document.querySelector('textarea').value || '').trim().toLowerCase().replace(/\r\n/g, '\n')) + '\n';
+               return fs.write(localFile, value)
+                       .then(function () {
+                               document.querySelector('textarea').value = value;
+                               document.body.scrollTop = document.documentElement.scrollTop = 0;
+                               if (!notMsg) {
+                                       ui.addNotification(null, E('p', _('Blocklist modifications have been saved, reload banIP that changes take effect.')), 'info');
+                                       notMsg = true;
+                               }
+                       }).catch(function (e) {
+                               document.body.scrollTop = document.documentElement.scrollTop = 0;
+                               if (!errMsg) {
+                                       ui.addNotification(null, E('p', _('Unable to save modifications: %s').format(e.message)), 'error');
+                                       errMsg = true;
+                               }
+                       });
+       },
        handleSaveApply: null,
        handleReset: null
 });
index 23c60c683d20866bcae6dc51fd33ee7a1c7bb01a..d79e6f987b46ffd29bea030b784995121e2c18b5 100644 (file)
@@ -1,3 +1,10 @@
 .cbi-input-text {
        width: 90% !important;
+       margin-bottom: -5px;
+       padding-top: 0rem;
 }
+
+.cbi-input-select {
+       margin-bottom: -5px;
+       padding-top: 0rem;
+}
\ No newline at end of file
index b1c4d915cad3f4c291d1b7955c30f5b69d2b6462..4fe01adf4a145186948e11efce657616c4f2d950 100644 (file)
@@ -168,7 +168,13 @@ function handleEdit(ev) {
 
 return view.extend({
        load: function () {
-               return L.resolveDefault(fs.read_direct('/etc/banip/banip.custom.feeds', 'json'), "");
+               return L.resolveDefault(fs.stat('/etc/banip/banip.custom.feeds'), "")
+                       .then(function (stat) {
+                       if (!stat) {
+                               return fs.write('/etc/banip/banip.custom.feeds', "");
+                       }
+                       return L.resolveDefault(fs.read_direct('/etc/banip/banip.custom.feeds', 'json'), "");
+               })
        },
 
        render: function (data) {
@@ -243,6 +249,7 @@ return view.extend({
                        o = s.option(form.ListValue, 'rule_6', _('Rulev6'));
                        o.value('/^(([0-9A-f]{0,4}:){1,7}[0-9A-f]{0,4}:?(\\/(1?[0-2][0-8]|[0-9][0-9]))?)[[:space:]]/{printf \"%s,\\n\",$1}', _('<IPv6><SPACE>'));
                        o.value('/^(([0-9A-f]{0,4}:){1,7}[0-9A-f]{0,4}:?(\\/(1?[0-2][0-8]|[0-9][0-9]))?)$/{printf \"%s,\\n\",$1}', _('<IPv6><END>'));
+                       o.value('BEGIN{FS=\",\"}/^(([0-9A-f]{0,4}:){1,7}[0-9A-f]{0,4}:?(\\/(1?[0-2][0-8]|[0-9][0-9]))?)/{printf \"%s,\\n\",$1}', _('<IPv6>, csv'));
                        o.optional = true;
                        o.rmempty = true;
 
index 35a258a5b156419a1825f464252e19c50d146d09..09ccb231c496519d42927e5d37834fab1efb47a9 100644 (file)
@@ -18,7 +18,7 @@ function handleAction(ev) {
                        .then(L.bind(ui.changes.apply, ui.changes))
                        .then(function () {
                                return fs.exec_direct('/etc/init.d/banip', [ev]);
-                       });
+                       })
        } else {
                return fs.exec_direct('/etc/init.d/banip', [ev]);
        }
index 9d3ebdc48355055bfec3b8705a98f50d2fee46bb..642bdcefa95e5c39e24eb0e120ea13bbcdb85a28 100644 (file)
@@ -14,9 +14,6 @@
                                "/usr/bin/banip-service.sh": "executable",
                                "/etc/init.d/banip": "executable",
                                "/etc/banip/banip.feeds": "file",
-                               "/etc/banip/banip.custom.feeds": "file",
-                               "/etc/banip/banip.allowlist": "file",
-                               "/etc/banip/banip.blocklist": "file",
                                "/etc/banip/banip.countries": "file"
                        },
                        "uci": {
@@ -80,4 +77,4 @@
                        "path": "banip/processing_log"
                }
        }
-}
+}
\ No newline at end of file
index a572c77621c2496725e2eeeacaaf9f149526af05..56bbcc3758ec3bc404eed253e43c2476e65b8e48 100644 (file)
@@ -72,4 +72,4 @@
                        ]
                }
        }
-}
+}
\ No newline at end of file