0
0
mirror of https://github.com/openwrt/luci.git synced 2025-04-12 17:33:10 +00:00
Files
Khachatryan Karen 601a69f2fe luci-app-antiblock: Update luci-app-antiblock package
1) Added the ability to route different domains through different gateways, up to 32 routes.
2) The program has been switched from proxying mode to sniffer mode.
3) Blacklist has been added so that the specified subnets are not added to the routing table.
4) Added the logs and statistics tabs
5) The "output" option has been removed, it is now /tmp/antiblock
6) Bash backend removed, now only JS.

Signed-off-by: Khachatryan Karen <karen0734@gmail.com>
2025-04-01 18:17:33 +02:00

110 lines
4.0 KiB
JavaScript

'use strict';
'require ui';
'require uci';
'require fs';
'require form';
'require view';
let section_routes;
let section_data;
let domains_textarea;
async function write_domains_handler() {
ui.showModal(null, [E('p', { class: 'spinning' }, _('Write domains'))]);
const lines = domains_textarea.value.split(/\r?\n/).filter(Boolean);
let write_data = '';
lines.forEach(function (element) { write_data += element + '\n' });
const domains_path = section_routes.selectedOptions[0].label;
try {
await fs.write(domains_path, write_data);
await fs.exec('/etc/init.d/antiblock', ['restart']);
} catch (err) {
ui.addNotification(null, E('p', {}, _('Unable to write to domains file') + ' ' + domains_path + ' "' + err.message + '"'));
}
ui.hideModal();
select_handler();
}
function read_domains_handler(data) {
const text_data = data.split(/\r?\n/).filter(Boolean);
const section_descr_div = E('div', { class: 'cbi-section-descr' }, _('Domain count in file:') + ' ' + text_data.length);
domains_textarea = E('textarea', { class: 'cbi-input-textarea' },);
domains_textarea.value = '';
text_data.forEach(function (element) { domains_textarea.value += element + '\n' });
const btn_write_domains = E('button', { class: 'cbi-button cbi-button-apply', click: write_domains_handler }, _('Write domains'));
const div_for_btn = E('div', { style: 'padding-top: 20px' });
div_for_btn.appendChild(btn_write_domains);
section_data.innerHTML = '';
section_data.appendChild(section_descr_div);
section_data.appendChild(domains_textarea);
section_data.appendChild(div_for_btn);
}
function select_handler() {
section_data.innerHTML = '';
const domains_path = section_routes.selectedOptions[0].label;
fs.read_direct(domains_path).then(
read_domains_handler
).catch(
function (err) {
if (err.message == 'Failed to stat requested path') {
fs.exec('/bin/mkdir', ['/etc/antiblock']).then(
fs.write(domains_path, '').then(
read_domains_handler("")
).catch(
function (err) {
section_data.appendChild(E('p', {}, _('Unable to create domains file') + ' ' + domains_path + ' "' + err.message + '"'));
}
)
);
} else {
section_data.appendChild(E('p', {}, _('Unable to read domains file') + ' ' + domains_path + ' "' + err.message + '"'));
}
}
);
}
return view.extend({
handleSaveApply: null,
handleSave: null,
handleReset: null,
load: async function () {
return await uci.load('antiblock');
},
render: function () {
const uci_routes = uci.sections('antiblock', 'route');
section_routes = E('select', { class: 'cbi-input-select', change: select_handler });
uci_routes.forEach(function (route) {
if (route.domains_path.substring(0, 4) != 'http') {
const routes_option = E('option', { value: route.domains_path }, route.domains_path);
section_routes.appendChild(routes_option);
}
});
const main_div = E([]);
main_div.appendChild(E('h2', _('Domains')));
if (section_routes.innerHTML != '') {
const routes_div = E('div', { class: 'cbi-section' });
routes_div.appendChild(E('div', { class: 'cbi-section-descr' }, _('Domains path:')));
routes_div.appendChild(section_routes);
main_div.appendChild(routes_div);
section_data = E('div', { class: 'cbi-section' });
main_div.appendChild(section_data);
select_handler();
} else {
const routes_div = E('div', { class: 'cbi-section' });
routes_div.appendChild(E('div', { class: 'cbi-section-descr' }, _('Path to file in "Domains path" is not set.')));
main_div.appendChild(routes_div);
}
return main_div;
}
});