'use strict'; 'require view'; 'require fs'; 'require ui'; const localFile = '/etc/banip/banip.blocklist'; const maxSize = 100000; let notMsg = false; const resetScroll = () => { document.body.scrollTop = document.documentElement.scrollTop = 0; }; return view.extend({ load: function () { return L.resolveDefault(fs.stat(localFile), null) .then(function (stat) { if (!stat) { return fs.write(localFile, "").then(() => [{ size: 0 }, ""]); } return Promise.all([ Promise.resolve(stat), L.resolveDefault(fs.read_direct(localFile), "") ]); }); }, render: function (blocklist) { const size = blocklist[0] ? blocklist[0].size : 0; const content = blocklist[1] != null ? blocklist[1] : ''; const tooBig = size >= maxSize; if (tooBig) { resetScroll(); ui.addNotification(null, E('p', _('The blocklist is too big, unable to save modifications.')), 'error'); } return E('div', { 'class': 'cbi-section cbi-section-descr' }, [ E('p', _('This is the local banIP blocklist that will prevent certain MAC-, IP-addresses or domain names.
\ Please note: 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, 'readonly': tooBig ? 'readonly' : null, 'input': function () { notMsg = false; } }, [content]) ]); }, handleSave: function (_ev) { const value = ((document.querySelector('textarea').value || '').trim().toLowerCase().replace(/\r\n?/g, '\n')); return fs.write(localFile, value + "\n") .then(function () { document.querySelector('textarea').value = value + "\n"; resetScroll(); if (!notMsg) { notMsg = true; ui.addNotification(null, E('p', _('Blocklist modifications have been saved, reload banIP that changes take effect.')), 'info'); } }).catch(function (e) { resetScroll(); ui.addNotification(null, E('p', _('Unable to save modifications: %s').format(e.message)), 'error'); }); }, handleSaveApply: null, handleReset: null });