Merge pull request #6075 from stangri/master-luci-app-simple-adblock
luci-app-simple-adblock: convert to js
This commit is contained in:
commit
98842ccee8
15 changed files with 987 additions and 810 deletions
|
@ -1,15 +1,15 @@
|
||||||
# Copyright 2017-2018 Stan Grishin (stangri@melmac.ca)
|
# Copyright 2017-2022 Stan Grishin (stangri@melmac.ca)
|
||||||
# This is free software, licensed under the GNU General Public License v3.
|
# This is free software, licensed under the GNU General Public License v3.
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_LICENSE:=GPL-3.0-or-later
|
PKG_LICENSE:=GPL-3.0-or-later
|
||||||
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.ca>
|
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.ca>
|
||||||
PKG_VERSION:=1.9.2-3
|
PKG_VERSION:=1.9.2-4
|
||||||
|
|
||||||
LUCI_TITLE:=Simple Adblock Web UI
|
LUCI_TITLE:=Simple Adblock Web UI
|
||||||
LUCI_DESCRIPTION:=Provides Web UI for simple-adblock service.
|
LUCI_DESCRIPTION:=Provides Web UI for simple-adblock service.
|
||||||
LUCI_DEPENDS:=+luci-compat +luci-mod-admin-full +simple-adblock
|
LUCI_DEPENDS:=+luci-mod-admin-full +simple-adblock +jsonfilter
|
||||||
LUCI_PKGARCH:=all
|
LUCI_PKGARCH:=all
|
||||||
|
|
||||||
include ../../luci.mk
|
include ../../luci.mk
|
||||||
|
|
|
@ -0,0 +1,305 @@
|
||||||
|
// Copyright 2022 Stan Grishin <stangri@melmac.ca>
|
||||||
|
// This code wouldn't have been possible without help from [@vsviridov](https://github.com/vsviridov)
|
||||||
|
|
||||||
|
"require ui";
|
||||||
|
"require rpc";
|
||||||
|
"require form";
|
||||||
|
"require baseclass";
|
||||||
|
|
||||||
|
var pkg = {
|
||||||
|
get Name() { return 'simple-adblock'; },
|
||||||
|
get URL() { return 'https://docs.openwrt.melmac.net/' + pkg.Name + '/'; },
|
||||||
|
};
|
||||||
|
|
||||||
|
var getInitList = rpc.declare({
|
||||||
|
object: "luci." + pkg.Name,
|
||||||
|
method: "getInitList",
|
||||||
|
params: ["name"],
|
||||||
|
});
|
||||||
|
|
||||||
|
var getInitStatus = rpc.declare({
|
||||||
|
object: "luci." + pkg.Name,
|
||||||
|
method: "getInitStatus",
|
||||||
|
params: ["name"],
|
||||||
|
});
|
||||||
|
|
||||||
|
var getPlatformSupport = rpc.declare({
|
||||||
|
object: "luci." + pkg.Name,
|
||||||
|
method: "getPlatformSupport",
|
||||||
|
params: ["name"],
|
||||||
|
});
|
||||||
|
|
||||||
|
var _setInitAction = rpc.declare({
|
||||||
|
object: "luci." + pkg.Name,
|
||||||
|
method: "setInitAction",
|
||||||
|
params: ["name", "action"],
|
||||||
|
expect: { result: false },
|
||||||
|
});
|
||||||
|
|
||||||
|
var RPC = {
|
||||||
|
listeners: [],
|
||||||
|
on: function on(event, callback) {
|
||||||
|
var pair = { event: event, callback: callback }
|
||||||
|
this.listeners.push(pair);
|
||||||
|
return function unsubscribe() {
|
||||||
|
this.listeners = this.listeners.filter(function (listener) {
|
||||||
|
return listener !== pair;
|
||||||
|
});
|
||||||
|
}.bind(this);
|
||||||
|
},
|
||||||
|
emit: function emit(event, data) {
|
||||||
|
this.listeners.forEach(function (listener) {
|
||||||
|
if (listener.event === event) {
|
||||||
|
listener.callback(data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getInitList: function getInitList(name) {
|
||||||
|
getInitList(name).then(function (result) {
|
||||||
|
this.emit('getInitList', result);
|
||||||
|
}.bind(this));
|
||||||
|
},
|
||||||
|
getInitStatus: function getInitStatus(name) {
|
||||||
|
getInitStatus(name).then(function (result) {
|
||||||
|
this.emit('getInitStatus', result);
|
||||||
|
}.bind(this));
|
||||||
|
},
|
||||||
|
getPlatformSupport: function getPlatformSupport(name) {
|
||||||
|
getPlatformSupport(name).then(function (result) {
|
||||||
|
this.emit('getPlatformSupport', result);
|
||||||
|
}.bind(this));
|
||||||
|
},
|
||||||
|
setInitAction: function setInitAction(name, action) {
|
||||||
|
_setInitAction(name, action).then(function (result) {
|
||||||
|
this.emit('setInitAction', result);
|
||||||
|
}.bind(this));
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
var status = baseclass.extend({
|
||||||
|
render: function () {
|
||||||
|
return Promise.all([
|
||||||
|
L.resolveDefault(getInitStatus(), {}),
|
||||||
|
]).then(function (data) {
|
||||||
|
var replyStatus = data[0];
|
||||||
|
var text ="";
|
||||||
|
var status = replyStatus[pkg.Name];
|
||||||
|
var outputFile = status.outputFile;
|
||||||
|
var outputCache = status.outputCache;
|
||||||
|
var statusTable = {
|
||||||
|
statusNoInstall: _("%s is not installed or not found").format(pkg.Name),
|
||||||
|
statusStopped: _("Stopped"),
|
||||||
|
statusStarting: _("Starting"),
|
||||||
|
statusRestarting: _("Restarting"),
|
||||||
|
statusForceReloading: _("Force Reloading"),
|
||||||
|
statusDownloading: _("Downloading"),
|
||||||
|
statusError: _("Error"),
|
||||||
|
statusWarning: _("Warning"),
|
||||||
|
statusFail: _("Fail"),
|
||||||
|
statusSuccess: _("Active")
|
||||||
|
};
|
||||||
|
|
||||||
|
var header = E('h2', {}, _("Simple AdBlock - Status"))
|
||||||
|
var statusTitle = E('label', { class: 'cbi-value-title' }, _("Service Status"));
|
||||||
|
if (status.version) {
|
||||||
|
text += _("Version: %s").format(status.version) + " - ";
|
||||||
|
switch (status.status) {
|
||||||
|
case 'statusSuccess':
|
||||||
|
text += statusTable[status.status] + ".";
|
||||||
|
text += "<br />" + _("Blocking %s domains (with %s).").format(status.entries, status.dns);
|
||||||
|
if (status.outputGzipExists) {
|
||||||
|
text += "<br />" + _("Compressed cache file created.");
|
||||||
|
}
|
||||||
|
if (status.force_dns_active) {
|
||||||
|
text += "<br />" + _("Force DNS ports:");
|
||||||
|
status.force_dns_ports.forEach(element => {
|
||||||
|
text += " " + element;
|
||||||
|
});
|
||||||
|
text += ".";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'statusStopped':
|
||||||
|
if (status.enabled) {
|
||||||
|
text += statusTable[status.status] + ".";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
text += statusTable[status.status] + _("disabled") + "."
|
||||||
|
}
|
||||||
|
if (status.outputCacheExists) {
|
||||||
|
text += "<br />" + _("Cache file found.");
|
||||||
|
}
|
||||||
|
else if (status.outputGzipExists) {
|
||||||
|
text += "<br />" + _("Compressed cache file found.");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'statusRestarting':
|
||||||
|
case 'statusForceReloading':
|
||||||
|
case 'statusDownloading':
|
||||||
|
text += statusTable[status.status] + "...";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
text += statusTable[status.status] + ".";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
text = _("Not installed or not found");
|
||||||
|
}
|
||||||
|
var statusText = E('div', {}, text);
|
||||||
|
var statusField = E('div', { class: 'cbi-value-field' }, statusText);
|
||||||
|
var statusDiv = E('div', { class: 'cbi-value' }, [statusTitle, statusField]);
|
||||||
|
|
||||||
|
var warningsDiv = [];
|
||||||
|
if (status.warnings) {
|
||||||
|
var warningsTitle = E('label', { class: 'cbi-value-title' }, _("Service Warnings"));
|
||||||
|
var warningsText = E('div', {}, status.warnings);
|
||||||
|
var warningsField = E('div', { class: 'cbi-value-field' }, warningsText);
|
||||||
|
warningsDiv = E('div', { class: 'cbi-value' }, [warningsTitle, warningsField]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var errorsDiv = [];
|
||||||
|
if ((status.errors).length) {
|
||||||
|
var errorTable = {
|
||||||
|
errorOutputFileCreate: _("failed to create '%s' file").format(outputFile),
|
||||||
|
errorFailDNSReload: _("failed to restart/reload DNS resolver"),
|
||||||
|
errorSharedMemory: _("failed to access shared memory"),
|
||||||
|
errorSorting: _("failed to sort data file"),
|
||||||
|
errorOptimization: _("failed to optimize data file"),
|
||||||
|
errorAllowListProcessing: _("failed to process allow-list"),
|
||||||
|
errorDataFileFormatting: _("failed to format data file"),
|
||||||
|
errorMovingDataFile: _("failed to move temporary data file to '%s'").format(outputFile),
|
||||||
|
errorCreatingCompressedCache: _("failed to create compressed cache"),
|
||||||
|
errorRemovingTempFiles: _("failed to remove temporary files"),
|
||||||
|
errorRestoreCompressedCache: _("failed to unpack compressed cache"),
|
||||||
|
errorRestoreCache: _("failed to move '%s' to '%s'").format(outputCache, outputFile),
|
||||||
|
errorOhSnap: _("failed to create block-list or restart DNS resolver"),
|
||||||
|
errorStopping: _("failed to stop %s").format(pkg.Name),
|
||||||
|
errorDNSReload: _("failed to reload/restart DNS resolver"),
|
||||||
|
errorDownloadingConfigUpdate: _("failed to download Config Update file"),
|
||||||
|
errorDownloadingList: _("failed to download"),
|
||||||
|
errorParsingConfigUpdate: _("failed to parse Config Update file"),
|
||||||
|
errorParsingList: _("failed to parse"),
|
||||||
|
errorNoSSLSupport: _("no HTTPS/SSL support on device"),
|
||||||
|
errorCreatingDirectory: _("failed to create output/cache/gzip file directory")
|
||||||
|
}
|
||||||
|
var errorsTitle = E('label', { class: 'cbi-value-title' }, _("Service Errors"));
|
||||||
|
var text = "";
|
||||||
|
(status.errors).forEach(element => {
|
||||||
|
text += errorTable[element] + ".<br />";
|
||||||
|
});
|
||||||
|
var errorsText = E('div', {}, text);
|
||||||
|
var errorsField = E('div', { class: 'cbi-value-field' }, errorsText);
|
||||||
|
errorsDiv = E('div', { class: 'cbi-value' }, [errorsTitle, errorsField]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var btn_gap = E('span', {}, '  ');
|
||||||
|
var btn_gap_long = E('span', {}, '        ');
|
||||||
|
|
||||||
|
var btn_start = E('button', {
|
||||||
|
'class': 'btn cbi-button cbi-button-apply',
|
||||||
|
disabled: true,
|
||||||
|
click: function (ev) {
|
||||||
|
ui.showModal(null, [
|
||||||
|
E('p', { 'class': 'spinning' }, _('Starting %s service').format(pkg.Name))
|
||||||
|
]);
|
||||||
|
return RPC.setInitAction(pkg.Name, 'start');
|
||||||
|
}
|
||||||
|
}, _('Start'));
|
||||||
|
|
||||||
|
var btn_action = E('button', {
|
||||||
|
'class': 'btn cbi-button cbi-button-apply',
|
||||||
|
disabled: true,
|
||||||
|
click: function (ev) {
|
||||||
|
ui.showModal(null, [
|
||||||
|
E('p', { 'class': 'spinning' }, _('Force re-downloading %s block lists').format(pkg.Name))
|
||||||
|
]);
|
||||||
|
return RPC.setInitAction(pkg.Name, 'dl');
|
||||||
|
}
|
||||||
|
}, _('Force Re-Download'));
|
||||||
|
|
||||||
|
var btn_stop = E('button', {
|
||||||
|
'class': 'btn cbi-button cbi-button-reset',
|
||||||
|
disabled: true,
|
||||||
|
click: function (ev) {
|
||||||
|
ui.showModal(null, [
|
||||||
|
E('p', { 'class': 'spinning' }, _('Stopping %s service').format(pkg.Name))
|
||||||
|
]);
|
||||||
|
return RPC.setInitAction(pkg.Name, 'stop');
|
||||||
|
}
|
||||||
|
}, _('Stop'));
|
||||||
|
|
||||||
|
var btn_enable = E('button', {
|
||||||
|
'class': 'btn cbi-button cbi-button-apply',
|
||||||
|
disabled: true,
|
||||||
|
click: function (ev) {
|
||||||
|
ui.showModal(null, [
|
||||||
|
E('p', { 'class': 'spinning' }, _('Enabling %s service').format(pkg.Name))
|
||||||
|
]);
|
||||||
|
return RPC.setInitAction(pkg.Name, 'enable');
|
||||||
|
}
|
||||||
|
}, _('Enable'));
|
||||||
|
|
||||||
|
var btn_disable = E('button', {
|
||||||
|
'class': 'btn cbi-button cbi-button-reset',
|
||||||
|
disabled: true,
|
||||||
|
click: function (ev) {
|
||||||
|
ui.showModal(null, [
|
||||||
|
E('p', { 'class': 'spinning' }, _('Disabling %s service').format(pkg.Name))
|
||||||
|
]);
|
||||||
|
return RPC.setInitAction(pkg.Name, 'disable');
|
||||||
|
}
|
||||||
|
}, _('Disable'));
|
||||||
|
|
||||||
|
if (status.enabled) {
|
||||||
|
btn_enable.disabled = true;
|
||||||
|
btn_disable.disabled = false;
|
||||||
|
switch (status.status) {
|
||||||
|
case 'statusSuccess':
|
||||||
|
btn_start.disabled = true;
|
||||||
|
btn_action.disabled = false;
|
||||||
|
btn_stop.disabled = false;
|
||||||
|
break;
|
||||||
|
case 'statusStopped':
|
||||||
|
btn_start.disabled = false;
|
||||||
|
btn_action.disabled = true;
|
||||||
|
btn_stop.disabled = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
btn_start.disabled = true;
|
||||||
|
btn_action.disabled = true;
|
||||||
|
btn_stop.disabled = true;
|
||||||
|
btn_enable.disabled = true;
|
||||||
|
btn_disable.disabled = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
btn_start.disabled = true;
|
||||||
|
btn_action.disabled = true;
|
||||||
|
btn_stop.disabled = true;
|
||||||
|
btn_enable.disabled = false;
|
||||||
|
btn_disable.disabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var buttonsDiv = [];
|
||||||
|
var buttonsTitle = E('label', { class: 'cbi-value-title' }, _("Service Control"))
|
||||||
|
var buttonsText = E('div', {}, [btn_start, btn_gap, btn_action, btn_gap, btn_stop, btn_gap_long, btn_enable, btn_gap, btn_disable]);
|
||||||
|
var buttonsField = E('div', { class: 'cbi-value-field' }, buttonsText);
|
||||||
|
if (status.version) {
|
||||||
|
buttonsDiv = E('div', { class: 'cbi-value' }, [buttonsTitle, buttonsField]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return E('div', {}, [header, statusDiv, warningsDiv, errorsDiv, buttonsDiv]);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
RPC.on('setInitAction', function (reply) {
|
||||||
|
ui.hideModal();
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
|
||||||
|
return L.Class.extend({
|
||||||
|
status: status,
|
||||||
|
getPlatformSupport: getPlatformSupport
|
||||||
|
});
|
|
@ -0,0 +1,161 @@
|
||||||
|
// Copyright 2022 Stan Grishin <stangri@melmac.ca>
|
||||||
|
// This code wouldn't have been possible without help from [@vsviridov](https://github.com/vsviridov)
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
'require form';
|
||||||
|
'require uci';
|
||||||
|
'require view';
|
||||||
|
'require simple-adblock.status as adb';
|
||||||
|
|
||||||
|
var pkg = {
|
||||||
|
get Name() { return 'simple-adblock'; },
|
||||||
|
get URL() { return 'https://docs.openwrt.melmac.net/' + pkg.Name + '/'; }
|
||||||
|
};
|
||||||
|
|
||||||
|
return view.extend({
|
||||||
|
load: function () {
|
||||||
|
return Promise.all([
|
||||||
|
uci.load(pkg.Name)
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
|
||||||
|
render: function () {
|
||||||
|
return Promise.all([
|
||||||
|
L.resolveDefault(adb.getPlatformSupport(), {}),
|
||||||
|
]).then(function (data) {
|
||||||
|
var replyPlatform = data[0];
|
||||||
|
var status, m, s, o;
|
||||||
|
|
||||||
|
status = new adb.status();
|
||||||
|
m = new form.Map(pkg.Name, _("Simple AdBlock - Configuration"));
|
||||||
|
s = m.section(form.NamedSection, 'config', pkg.Name);
|
||||||
|
s.tab("tab_basic", _("Basic Configuration"));
|
||||||
|
s.tab("tab_advanced", _("Advanced Configuration"));
|
||||||
|
|
||||||
|
o = s.taboption("tab_basic", form.ListValue, "config_update_enabled", _("Automatic Config Update"),
|
||||||
|
_("Perform config update before downloading the block/allow-lists."));
|
||||||
|
o.value("0", _("Disable"));
|
||||||
|
o.value("1", _("Enable"));
|
||||||
|
o.default = ("0", _("Disable"));
|
||||||
|
|
||||||
|
o = s.taboption("tab_basic", form.ListValue, "verbosity", _("Output Verbosity Setting"),
|
||||||
|
_("Controls system log and console output verbosity."));
|
||||||
|
o.value("0", _("Suppress output"));
|
||||||
|
o.value("1", _("Some output"));
|
||||||
|
o.value("2", _("Verbose output"));
|
||||||
|
o.default = ("2", _("Verbose output"));
|
||||||
|
|
||||||
|
o = s.taboption("tab_basic", form.ListValue, "force_dns", _("Force Router DNS"),
|
||||||
|
_("Forces Router DNS use on local devices, also known as DNS Hijacking."));
|
||||||
|
o.value("0", _("Let local devices use their own DNS servers if set"));
|
||||||
|
o.value("1", _("Force Router DNS server to all local devices"));
|
||||||
|
o.default = ("1", _("Force Router DNS server to all local devices"));
|
||||||
|
|
||||||
|
|
||||||
|
if ((replyPlatform[pkg.Name].leds).length) {
|
||||||
|
o = s.taboption("tab_basic", form.ListValue, "led", _("LED to indicate status"),
|
||||||
|
_("Pick the LED not already used in %sSystem LED Configuration%s.").format("<a href=\"" +
|
||||||
|
L.url("admin", "system", "leds") + "\">", "</a>"));
|
||||||
|
o.value("", _("none"));
|
||||||
|
(replyPlatform[pkg.Name].leds).forEach(element => {
|
||||||
|
o.value(element);
|
||||||
|
});
|
||||||
|
o.rmempty = false;
|
||||||
|
}
|
||||||
|
var text = _("DNS resolution option, see the %sREADME%s for details.")
|
||||||
|
.format("<a href=\"" + pkg.URL + "#dns-resolution-option\" target=\"_blank\">", "</a>");
|
||||||
|
if (!(replyPlatform[pkg.Name].dnsmasq_installed)) {
|
||||||
|
text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.addnhosts</i>");
|
||||||
|
text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.conf</i>");
|
||||||
|
text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.ipset</i>");
|
||||||
|
text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.servers</i>");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!(replyPlatform[pkg.Name].dnsmasq_ipset_support)) {
|
||||||
|
text += _("Please note that %s is not supported on this system.").format("<i>dnsmasq.ipset</i>") + "<br />";
|
||||||
|
}
|
||||||
|
if (!(replyPlatform[pkg.Name].dnsmasq_nftset_support)) {
|
||||||
|
text += _("Please note that %s is not supported on this system.").format("<i>dnsmasq.nftset</i>") + "<br />";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!(replyPlatform[pkg.Name].unbound_installed)) {
|
||||||
|
text = text + "<br />" + _("Please note that %s is not supported on this system.")
|
||||||
|
.format("<i>unbound.adb_list</i>");
|
||||||
|
}
|
||||||
|
|
||||||
|
o = s.taboption("tab_advanced", form.ListValue, "dns", _("DNS Service"), text);
|
||||||
|
if (replyPlatform[pkg.Name].dnsmasq_installed) {
|
||||||
|
o.value("dnsmasq.addnhosts", _("dnsmasq additional hosts"));
|
||||||
|
o.value("dnsmasq.conf", _("dnsmasq config"));
|
||||||
|
if (replyPlatform[pkg.Name].dnsmasq_ipset_support) {
|
||||||
|
o.value("dnsmasq.ipset", _("dnsmasq ipset"));
|
||||||
|
}
|
||||||
|
if (replyPlatform[pkg.Name].dnsmasq_nftset_support) {
|
||||||
|
o.value("dnsmasq.nftset", _("dnsmasq nft set"));
|
||||||
|
}
|
||||||
|
o.value("dnsmasq.servers", _("dnsmasq servers file"));
|
||||||
|
}
|
||||||
|
if (replyPlatform[pkg.Name].unbound_installed) {
|
||||||
|
o.value("unbound.adb_list", _("unbound adblock list"));
|
||||||
|
}
|
||||||
|
o.default = ("dnsmasq.servers", _("dnsmasq servers file"));
|
||||||
|
|
||||||
|
o = s.taboption("tab_advanced", form.ListValue, "ipv6_enabled", _("IPv6 Support"),
|
||||||
|
_("Add IPv6 entries to block-list."));
|
||||||
|
o.value("", _("Do not add IPv6 entries"));
|
||||||
|
o.value("1", _("Add IPv6 entries"));
|
||||||
|
o.depends('dns', 'dnsmasq.addnhosts');
|
||||||
|
o.depends('dns', 'dnsmasq.nftset');
|
||||||
|
o.default = ("", _("Do not add IPv6 entries"));
|
||||||
|
o.rmempty = true;
|
||||||
|
|
||||||
|
o = s.taboption("tab_advanced", form.Value, "download_timeout", _("Download time-out (in seconds)"),
|
||||||
|
_("Stop the download if it is stalled for set number of seconds."));
|
||||||
|
o.default = "10";
|
||||||
|
o.datatype = "range(1,60)";
|
||||||
|
|
||||||
|
o = s.taboption("tab_advanced", form.Value, "curl_retry", _("Curl download retry"),
|
||||||
|
_("If curl is installed and detected, it would retry download this many times on timeout/fail."));
|
||||||
|
o.default = "3";
|
||||||
|
o.datatype = "range(0,30)";
|
||||||
|
|
||||||
|
o = s.taboption("tab_advanced", form.ListValue, "parallel_downloads", _("Simultaneous processing"),
|
||||||
|
_("Launch all lists downloads and processing simultaneously, reducing service start time."));
|
||||||
|
o.value("0", _("Do not use simultaneous processing"));
|
||||||
|
o.value("1", _("Use simultaneous processing"));
|
||||||
|
o.default = ("1", _("Use simultaneous processing"));
|
||||||
|
|
||||||
|
o = s.taboption("tab_advanced", form.ListValue, "compressed_cache", _("Store compressed cache file on router"),
|
||||||
|
_("Attempt to create a compressed cache of block-list in the persistent memory."));
|
||||||
|
o.value("0", _("Do not store compressed cache"));
|
||||||
|
o.value("1", _("Store compressed cache"));
|
||||||
|
o.default = ("0", _("Do not store compressed cache"));
|
||||||
|
|
||||||
|
o = s.taboption("tab_advanced", form.ListValue, "debug", _("Enable Debugging"),
|
||||||
|
_("Enables debug output to /tmp/simple-adblock.log."));
|
||||||
|
o.value("0", _("Disable Debugging"));
|
||||||
|
o.value("1", _("Enable Debugging"));
|
||||||
|
o.default = ("0", _("Disable Debugging"));
|
||||||
|
|
||||||
|
s = m.section(form.NamedSection, "config", "simple-adblock",
|
||||||
|
_("Allowed and Blocked Lists Management"));
|
||||||
|
o = s.option(form.DynamicList, "allowed_domain", _("Allowed Domains"),
|
||||||
|
_("Individual domains to be allowed."));
|
||||||
|
o.addremove = false;
|
||||||
|
o = s.option(form.DynamicList, "allowed_domains_url", _("Allowed Domain URLs"),
|
||||||
|
_("URLs to lists of domains to be allowed."));
|
||||||
|
o.addremove = false;
|
||||||
|
o = s.option(form.DynamicList, "blocked_domain", _("Blocked Domains"),
|
||||||
|
_("Individual domains to be blocked."));
|
||||||
|
o.addremove = false;
|
||||||
|
o = s.option(form.DynamicList, "blocked_domains_url", _("Blocked Domain URLs"),
|
||||||
|
_("URLs to lists of domains to be blocked."));
|
||||||
|
o.addremove = false;
|
||||||
|
o = s.option(form.DynamicList, "blocked_hosts_url", _("Blocked Hosts URLs"),
|
||||||
|
_("URLs to lists of hosts to be blocked."));
|
||||||
|
o.addremove = false;
|
||||||
|
|
||||||
|
return Promise.all([status.render(), m.render()]);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
|
@ -1,30 +0,0 @@
|
||||||
module("luci.controller.simple-adblock", package.seeall)
|
|
||||||
function index()
|
|
||||||
if nixio.fs.access("/etc/config/simple-adblock") then
|
|
||||||
entry({"admin", "services", "simple-adblock"}, cbi("simple-adblock"), _("Simple AdBlock")).acl_depends = { "luci-app-simple-adblock" }
|
|
||||||
entry({"admin", "services", "simple-adblock", "action"}, call("simple_adblock_action"), nil).leaf = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function simple_adblock_action(name)
|
|
||||||
local packageName = "simple-adblock"
|
|
||||||
local http = require "luci.http"
|
|
||||||
local sys = require "luci.sys"
|
|
||||||
local uci = require "luci.model.uci".cursor()
|
|
||||||
local util = require "luci.util"
|
|
||||||
if name == "start" then
|
|
||||||
sys.init.start(packageName)
|
|
||||||
elseif name == "action" then
|
|
||||||
util.exec("/etc/init.d/" .. packageName .. " dl >/dev/null 2>&1")
|
|
||||||
elseif name == "stop" then
|
|
||||||
sys.init.stop(packageName)
|
|
||||||
elseif name == "enable" then
|
|
||||||
uci:set(packageName, "config", "enabled", "1")
|
|
||||||
uci:commit(packageName)
|
|
||||||
elseif name == "disable" then
|
|
||||||
uci:set(packageName, "config", "enabled", "0")
|
|
||||||
uci:commit(packageName)
|
|
||||||
end
|
|
||||||
http.prepare_content("text/plain")
|
|
||||||
http.write("0")
|
|
||||||
end
|
|
|
@ -1,390 +0,0 @@
|
||||||
-- Copyright 2016-2018 Stan Grishin <stangri@melmac.ca>
|
|
||||||
-- Licensed to the public under the Apache License 2.0.
|
|
||||||
|
|
||||||
local packageName = "simple-adblock"
|
|
||||||
local readmeURL = "https://docs.openwrt.melmac.net/" .. packageName .. "/"
|
|
||||||
local uci = require "luci.model.uci".cursor()
|
|
||||||
local util = require "luci.util"
|
|
||||||
local sys = require "luci.sys"
|
|
||||||
local jsonc = require "luci.jsonc"
|
|
||||||
local fs = require "nixio.fs"
|
|
||||||
local nutil = require "nixio.util"
|
|
||||||
local http = require "luci.http"
|
|
||||||
local dispatcher = require "luci.dispatcher"
|
|
||||||
|
|
||||||
local jsonStatusFile = "/var/run/" .. packageName .. "/" .. packageName .. ".json"
|
|
||||||
|
|
||||||
function getPackageVersion()
|
|
||||||
local opkgFile = "/usr/lib/opkg/status"
|
|
||||||
local line
|
|
||||||
local flag = false
|
|
||||||
for line in io.lines(opkgFile) do
|
|
||||||
if flag then
|
|
||||||
return line:match('[%d%.$-]+') or ""
|
|
||||||
elseif line:find("Package: " .. packageName:gsub("%-", "%%%-")) then
|
|
||||||
flag = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return ""
|
|
||||||
end
|
|
||||||
|
|
||||||
function getFileLines(file)
|
|
||||||
local f = io.open(file)
|
|
||||||
if f then
|
|
||||||
local t = f:read("*a")
|
|
||||||
local _,n = t:gsub("\n","")
|
|
||||||
f:close()
|
|
||||||
return n
|
|
||||||
else
|
|
||||||
return "0"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function checkDnsmasq() return fs.access("/usr/sbin/dnsmasq") end
|
|
||||||
function checkUnbound() return fs.access("/usr/sbin/unbound") end
|
|
||||||
|
|
||||||
function checkIpset()
|
|
||||||
if fs.access("/usr/sbin/ipset") and sys.call("/usr/sbin/ipset help hash:net >/dev/null 2>&1") == 0 then
|
|
||||||
return true
|
|
||||||
else
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function checkNftset()
|
|
||||||
if sys.call("command -v nft >/dev/null 2>&1") == 0 then
|
|
||||||
return true
|
|
||||||
else
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function checkDnsmasqIpset()
|
|
||||||
if checkDnsmasq() then
|
|
||||||
local o = util.trim(util.exec("/usr/sbin/dnsmasq -v 2>/dev/null"))
|
|
||||||
if not o:match("no%-ipset") and o:match("ipset") and checkIpset() then
|
|
||||||
return true
|
|
||||||
else
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function checkDnsmasqNftset()
|
|
||||||
if checkDnsmasq() then
|
|
||||||
local o = util.trim(util.exec("/usr/sbin/dnsmasq -v 2>/dev/null"))
|
|
||||||
if not o:match("no%-nftset") and o:match("nftset") and checkNftset() then
|
|
||||||
return true
|
|
||||||
else
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local enabledFlag = uci:get(packageName, "config", "enabled")
|
|
||||||
local command, outputFile, outputCache, outputGzip
|
|
||||||
local targetDNS = uci:get(packageName, "config", "dns")
|
|
||||||
|
|
||||||
if not targetDNS or targetDNS == "" then
|
|
||||||
targetDNS = "dnsmasq.servers"
|
|
||||||
end
|
|
||||||
|
|
||||||
if targetDNS ~= "dnsmasq.addnhosts" and targetDNS ~= "dnsmasq.conf" and
|
|
||||||
targetDNS ~= "dnsmasq.ipset" and targetDNS ~= "dnsmasq.nftset" and
|
|
||||||
targetDNS ~= "dnsmasq.servers" and targetDNS ~= "unbound.adb_list" then
|
|
||||||
targetDNS = "dnsmasq.servers"
|
|
||||||
end
|
|
||||||
|
|
||||||
if targetDNS == "dnsmasq.addnhosts" then
|
|
||||||
outputFile="/var/run/" .. packageName .. "/dnsmasq.addnhosts"
|
|
||||||
outputCache="/var/run/" .. packageName .. "/dnsmasq.addnhosts.cache"
|
|
||||||
outputGzip="/etc/" .. packageName .. ".dnsmasq.addnhosts.gz"
|
|
||||||
elseif targetDNS == "dnsmasq.conf" then
|
|
||||||
outputFile="/tmp/dnsmasq.d/" .. packageName
|
|
||||||
outputCache="/var/run/" .. packageName .. "/dnsmasq.conf.cache"
|
|
||||||
outputGzip="/etc/" .. packageName .. ".dnsmasq.conf.gz"
|
|
||||||
elseif targetDNS == "dnsmasq.ipset" then
|
|
||||||
outputFile="/tmp/dnsmasq.d/" .. packageName .. ".ipset"
|
|
||||||
outputCache="/var/run/" .. packageName .. "/dnsmasq.ipset.cache"
|
|
||||||
outputGzip="/etc/" .. packageName .. ".dnsmasq.ipset.gz"
|
|
||||||
elseif targetDNS == "dnsmasq.nftset" then
|
|
||||||
outputFile="/tmp/dnsmasq.d/" .. packageName .. ".nftset"
|
|
||||||
outputCache="/var/run/" .. packageName .. "/dnsmasq.nftset.cache"
|
|
||||||
outputGzip="/etc/" .. packageName .. ".dnsmasq.nftset.gz"
|
|
||||||
elseif targetDNS == "dnsmasq.servers" then
|
|
||||||
outputFile="/var/run/" .. packageName .. "/dnsmasq.servers"
|
|
||||||
outputCache="/var/run/" .. packageName .. "/dnsmasq.servers.cache"
|
|
||||||
outputGzip="/etc/" .. packageName .. ".dnsmasq.servers.gz"
|
|
||||||
elseif targetDNS == "unbound.adb_list" then
|
|
||||||
outputFile="/var/lib/unbound/adb_list." .. packageName
|
|
||||||
outputCache="/var/run/" .. packageName .. "/unbound.cache"
|
|
||||||
outputGzip="/etc/" .. packageName .. ".unbound.gz"
|
|
||||||
end
|
|
||||||
|
|
||||||
local packageVersion = getPackageVersion()
|
|
||||||
local tmpfs, tmpfsMessage, tmpfsError, tmpfsStats, tmpfsStatus
|
|
||||||
|
|
||||||
if packageVersion == "" then
|
|
||||||
tmpfsStatus = "statusNoInstall"
|
|
||||||
else
|
|
||||||
tmpfsStatus = "statusStopped"
|
|
||||||
end
|
|
||||||
|
|
||||||
if fs.access(jsonStatusFile) then
|
|
||||||
local f = io.open(jsonStatusFile)
|
|
||||||
local s = f:read("*a")
|
|
||||||
f:close()
|
|
||||||
tmpfs = jsonc.parse(s)
|
|
||||||
end
|
|
||||||
|
|
||||||
if tmpfs and tmpfs['data'] then
|
|
||||||
if tmpfs['data']['status'] and tmpfs['data']['status'] ~= "" then
|
|
||||||
tmpfsStatus = tmpfs['data']['status']
|
|
||||||
end
|
|
||||||
if tmpfs['data']['message'] and tmpfs['data']['message'] ~= "" then
|
|
||||||
tmpfsMessage = tmpfs['data']['message']
|
|
||||||
end
|
|
||||||
if tmpfs['data']['error'] and tmpfs['data']['error'] ~= "" then
|
|
||||||
tmpfsError = tmpfs['data']['error']
|
|
||||||
end
|
|
||||||
if tmpfs['data']['stats'] and tmpfs['data']['stats'] ~= "" then
|
|
||||||
tmpfsStats = tmpfs['data']['stats']
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local statusTable = {}
|
|
||||||
local errorTable = {}
|
|
||||||
statusTable["statusNoInstall"] = translatef("%s is not installed or not found", packageName)
|
|
||||||
statusTable["statusStopped"] = translate("Stopped")
|
|
||||||
statusTable["statusStarting"] = translate("Starting")
|
|
||||||
statusTable["statusRestarting"] = translate("Restarting")
|
|
||||||
statusTable["statusForceReloading"] = translate("Force Reloading")
|
|
||||||
statusTable["statusDownloading"] = translate("Downloading")
|
|
||||||
statusTable["statusError"] = translate("Error")
|
|
||||||
statusTable["statusWarning"] = translate("Warning")
|
|
||||||
statusTable["statusFail"] = translate("Fail")
|
|
||||||
statusTable["statusSuccess"] = translate("Success")
|
|
||||||
errorTable["errorOutputFileCreate"] = translatef("failed to create '%s' file", outputFile)
|
|
||||||
errorTable["errorFailDNSReload"] = translate("failed to restart/reload DNS resolver")
|
|
||||||
errorTable["errorSharedMemory"] = translate("failed to access shared memory")
|
|
||||||
errorTable["errorSorting"] = translate("failed to sort data file")
|
|
||||||
errorTable["errorOptimization"] = translate("failed to optimize data file")
|
|
||||||
errorTable["errorAllowListProcessing"] = translate("failed to process allow-list")
|
|
||||||
errorTable["errorDataFileFormatting"] = translate("failed to format data file")
|
|
||||||
errorTable["errorMovingDataFile"] = translatef("failed to move temporary data file to '%s'", outputFile)
|
|
||||||
errorTable["errorCreatingCompressedCache"] = translate("failed to create compressed cache")
|
|
||||||
errorTable["errorRemovingTempFiles"] = translate("failed to remove temporary files")
|
|
||||||
errorTable["errorRestoreCompressedCache"] = translate("failed to unpack compressed cache")
|
|
||||||
errorTable["errorRestoreCache"] = translatef("failed to move '%s' to '%s'", outputCache, outputFile)
|
|
||||||
errorTable["errorOhSnap"] = translate("failed to create block-list or restart DNS resolver")
|
|
||||||
errorTable["errorStopping"] = translatef("failed to stop %s", packageName)
|
|
||||||
errorTable["errorDNSReload"] = translate("failed to reload/restart DNS resolver")
|
|
||||||
errorTable["errorDownloadingConfigUpdate"] = translate("failed to download Config Update file")
|
|
||||||
errorTable["errorDownloadingList"] = translate("failed to download")
|
|
||||||
errorTable["errorParsingConfigUpdate"] = translate("failed to parse Config Update file")
|
|
||||||
errorTable["errorParsingList"] = translate("failed to parse")
|
|
||||||
errorTable["errorNoSSLSupport"] = translate("no HTTPS/SSL support on device")
|
|
||||||
errorTable["errorCreatingDirectory"] = translate("failed to create output/cache/gzip file directory")
|
|
||||||
|
|
||||||
m = Map("simple-adblock", translate("Simple AdBlock Settings"))
|
|
||||||
m.apply_on_parse = true
|
|
||||||
m.on_after_apply = function(self)
|
|
||||||
sys.call("/etc/init.d/simple-adblock restart")
|
|
||||||
end
|
|
||||||
|
|
||||||
h = m:section(NamedSection, "config", "simple-adblock", translatef("Service Status [%s %s]", packageName, packageVersion))
|
|
||||||
|
|
||||||
if tmpfsStatus == "statusStarting" or
|
|
||||||
tmpfsStatus == "statusRestarting" or
|
|
||||||
tmpfsStatus == "statusForceReloading" or
|
|
||||||
tmpfsStatus == "statusDownloading" then
|
|
||||||
ss = h:option(DummyValue, "_dummy", translate("Service Status"))
|
|
||||||
ss.template = "simple-adblock/status"
|
|
||||||
ss.value = statusTable[tmpfsStatus] .. '...'
|
|
||||||
if tmpfsMessage then
|
|
||||||
sm = h:option(DummyValue, "_dummy", translate("Task"))
|
|
||||||
sm.template = "simple-adblock/status"
|
|
||||||
sm.value = tmpfsMessage
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if tmpfsStatus == "statusStopped" then
|
|
||||||
ss = h:option(DummyValue, "_dummy", translate("Service Status"))
|
|
||||||
ss.template = "simple-adblock/status"
|
|
||||||
ss.value = statusTable[tmpfsStatus]
|
|
||||||
if fs.access(outputCache) then
|
|
||||||
sm = h:option(DummyValue, "_dummy", translate("Info"))
|
|
||||||
sm.template = "simple-adblock/status"
|
|
||||||
sm.value = translatef("Cache file containing %s domains found.", getFileLines(outputCache))
|
|
||||||
elseif fs.access(outputGzip) then
|
|
||||||
sm = h:option(DummyValue, "_dummy", translate("Info"))
|
|
||||||
sm.template = "simple-adblock/status"
|
|
||||||
sm.value = translate("Compressed cache file found.")
|
|
||||||
end
|
|
||||||
else
|
|
||||||
ss = h:option(DummyValue, "_dummy", translate("Service Status"))
|
|
||||||
ss.template = "simple-adblock/status"
|
|
||||||
if tmpfsStatus == "statusSuccess" then
|
|
||||||
ss.value = translatef("Blocking %s domains (with %s).", getFileLines(outputFile), targetDNS)
|
|
||||||
else
|
|
||||||
ss.value = statusTable[tmpfsStatus]
|
|
||||||
end
|
|
||||||
if tmpfsMessage then
|
|
||||||
ms = h:option(DummyValue, "_dummy", translate("Message"))
|
|
||||||
ms.template = "simple-adblock/status"
|
|
||||||
ms.value = tmpfsMessage
|
|
||||||
end
|
|
||||||
if tmpfsError then
|
|
||||||
es = h:option(DummyValue, "_dummy", translate("Collected Errors"))
|
|
||||||
es.template = "simple-adblock/status"
|
|
||||||
es.value = ""
|
|
||||||
local err, e, url
|
|
||||||
for err in tmpfsError:gmatch("[%p%w]+") do
|
|
||||||
if err:match("|") then
|
|
||||||
e,url = err:match("(.+)|(.+)")
|
|
||||||
es.value = translatef("%s Error: %s %s", es.value, errorTable[e], url) .. ".\n"
|
|
||||||
else
|
|
||||||
es.value = translatef("%s Error: %s", es.value, errorTable[err]) .. ".\n"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if packageVersion ~= "" then
|
|
||||||
buttons = h:option(DummyValue, "_dummy", translate("Service Control"))
|
|
||||||
buttons.template = packageName .. "/buttons"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
s = m:section(NamedSection, "config", "simple-adblock", translate("Configuration"))
|
|
||||||
-- General options
|
|
||||||
s:tab("basic", translate("Basic Configuration"))
|
|
||||||
|
|
||||||
o1 = s:taboption("basic", ListValue, "config_update_enabled", translate("Automatic Config Update"), translate("Perform config update before downloading the block/allow-lists."))
|
|
||||||
o1:value("0", translate("Disable"))
|
|
||||||
o1:value("1", translate("Enable"))
|
|
||||||
o1.default = "0"
|
|
||||||
|
|
||||||
o2 = s:taboption("basic", ListValue, "verbosity", translate("Output Verbosity Setting"), translate("Controls system log and console output verbosity."))
|
|
||||||
o2:value("0", translate("Suppress output"))
|
|
||||||
o2:value("1", translate("Some output"))
|
|
||||||
o2:value("2", translate("Verbose output"))
|
|
||||||
o2.default = "2"
|
|
||||||
|
|
||||||
o3 = s:taboption("basic", ListValue, "force_dns", translate("Force Router DNS"), translate("Forces Router DNS use on local devices, also known as DNS Hijacking."))
|
|
||||||
o3:value("0", translate("Let local devices use their own DNS servers if set"))
|
|
||||||
o3:value("1", translate("Force Router DNS server to all local devices"))
|
|
||||||
o3.default = "1"
|
|
||||||
|
|
||||||
local sysfs_path = "/sys/class/leds/"
|
|
||||||
local leds = {}
|
|
||||||
if fs.access(sysfs_path) then
|
|
||||||
leds = nutil.consume((fs.dir(sysfs_path)))
|
|
||||||
end
|
|
||||||
if #leds ~= 0 then
|
|
||||||
o4 = s:taboption("basic", Value, "led", translate("LED to indicate status"),
|
|
||||||
translatef("Pick the LED not already used in %sSystem LED Configuration%s.", "<a href=\"" .. dispatcher.build_url("admin", "system", "leds") .. "\">", "</a>"))
|
|
||||||
o4.rmempty = false
|
|
||||||
o4:value("", translate("none"))
|
|
||||||
for k, v in ipairs(leds) do
|
|
||||||
o4:value(v)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
s:tab("advanced", translate("Advanced Configuration"))
|
|
||||||
|
|
||||||
local dns_descr = translatef("Pick the DNS resolution option to create the adblock list for, see the %sREADME%s for details.", "<a href=\"" .. readmeURL .. "#dns-resolution-option\" target=\"_blank\">", "</a>")
|
|
||||||
|
|
||||||
if not checkDnsmasq() then
|
|
||||||
dns_descr = dns_descr .. "<br />" .. translatef("Please note that %s is not supported on this system.", "<i>dnsmasq.addnhosts</i>")
|
|
||||||
dns_descr = dns_descr .. "<br />" .. translatef("Please note that %s is not supported on this system.", "<i>dnsmasq.conf</i>")
|
|
||||||
dns_descr = dns_descr .. "<br />" .. translatef("Please note that %s is not supported on this system.", "<i>dnsmasq.ipset</i>")
|
|
||||||
dns_descr = dns_descr .. "<br />" .. translatef("Please note that %s is not supported on this system.", "<i>dnsmasq.servers</i>")
|
|
||||||
else
|
|
||||||
if not checkDnsmasqIpset() then
|
|
||||||
dns_descr = dns_descr .. "<br />" .. translatef("Please note that %s is not supported on this system.", "<i>dnsmasq.ipset</i>")
|
|
||||||
end
|
|
||||||
if not checkDnsmasqNftset() then
|
|
||||||
dns_descr = dns_descr .. "<br />" .. translatef("Please note that %s is not supported on this system.", "<i>dnsmasq.nftset</i>")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if not checkUnbound() then
|
|
||||||
dns_descr = dns_descr .. "<br />" .. translatef("Please note that %s is not supported on this system.", "<i>unbound.adb_list</i>")
|
|
||||||
end
|
|
||||||
|
|
||||||
dns = s:taboption("advanced", ListValue, "dns", translate("DNS Service"), dns_descr)
|
|
||||||
if checkDnsmasq() then
|
|
||||||
dns:value("dnsmasq.addnhosts", translate("DNSMASQ Additional Hosts"))
|
|
||||||
dns:value("dnsmasq.conf", translate("DNSMASQ Config"))
|
|
||||||
if checkDnsmasqIpset() then
|
|
||||||
dns:value("dnsmasq.ipset", translate("DNSMASQ Ipset"))
|
|
||||||
end
|
|
||||||
if checkDnsmasqNftset() then
|
|
||||||
dns:value("dnsmasq.nftset", translate("DNSMASQ Nft Set"))
|
|
||||||
end
|
|
||||||
dns:value("dnsmasq.servers", translate("DNSMASQ Servers File"))
|
|
||||||
end
|
|
||||||
if checkUnbound() then
|
|
||||||
dns:value("unbound.adb_list", translate("Unbound AdBlock List"))
|
|
||||||
end
|
|
||||||
dns.default = "dnsmasq.servers"
|
|
||||||
|
|
||||||
ipv6 = s:taboption("advanced", ListValue, "ipv6_enabled", translate("IPv6 Support"), translate("Add IPv6 entries to block-list."))
|
|
||||||
ipv6:value("", translate("Do not add IPv6 entries"))
|
|
||||||
ipv6:value("1", translate("Add IPv6 entries"))
|
|
||||||
ipv6:depends({dns="dnsmasq.addnhosts"})
|
|
||||||
ipv6.default = ""
|
|
||||||
ipv6.rmempty = true
|
|
||||||
|
|
||||||
o5 = s:taboption("advanced", Value, "boot_delay", translate("Delay (in seconds) for on-boot start"), translate("Run service after set delay on boot."))
|
|
||||||
o5.default = 120
|
|
||||||
o5.datatype = "range(1,600)"
|
|
||||||
|
|
||||||
o6 = s:taboption("advanced", Value, "download_timeout", translate("Download time-out (in seconds)"), translate("Stop the download if it is stalled for set number of seconds."))
|
|
||||||
o6.default = 10
|
|
||||||
o6.datatype = "range(1,60)"
|
|
||||||
|
|
||||||
o7 = s:taboption("advanced", Value, "curl_retry", translate("Curl download retry"), translate("If curl is installed and detected, it would retry download this many times on timeout/fail."))
|
|
||||||
o7.default = 3
|
|
||||||
o7.datatype = "range(0,30)"
|
|
||||||
|
|
||||||
o8 = s:taboption("advanced", ListValue, "parallel_downloads", translate("Simultaneous processing"), translate("Launch all lists downloads and processing simultaneously, reducing service start time."))
|
|
||||||
o8:value("0", translate("Do not use simultaneous processing"))
|
|
||||||
o8:value("1", translate("Use simultaneous processing"))
|
|
||||||
o8.default = "1"
|
|
||||||
|
|
||||||
o10 = s:taboption("advanced", ListValue, "compressed_cache", translate("Store compressed cache file on router"), translate("Attempt to create a compressed cache of block-list in the persistent memory."))
|
|
||||||
o10:value("0", translate("Do not store compressed cache"))
|
|
||||||
o10:value("1", translate("Store compressed cache"))
|
|
||||||
o10.default = "0"
|
|
||||||
|
|
||||||
o11 = s:taboption("advanced", ListValue, "debug", translate("Enable Debugging"), translate("Enables debug output to /tmp/simple-adblock.log."))
|
|
||||||
o11:value("0", translate("Disable Debugging"))
|
|
||||||
o11:value("1", translate("Enable Debugging"))
|
|
||||||
o11.default = "0"
|
|
||||||
|
|
||||||
|
|
||||||
s2 = m:section(NamedSection, "config", "simple-adblock", translate("Allowed and Blocked Lists Management"))
|
|
||||||
-- Allowed Domains
|
|
||||||
d1 = s2:option(DynamicList, "allowed_domain", translate("Allowed Domains"), translate("Individual domains to be allowed."))
|
|
||||||
d1.addremove = false
|
|
||||||
|
|
||||||
-- Allowed Domains URLs
|
|
||||||
d2 = s2:option(DynamicList, "allowed_domains_url", translate("Allowed Domain URLs"), translate("URLs to lists of domains to be allowed."))
|
|
||||||
d2.addremove = false
|
|
||||||
|
|
||||||
-- Blocked Domains
|
|
||||||
d3 = s2:option(DynamicList, "blocked_domain", translate("Blocked Domains"), translate("Individual domains to be blocked."))
|
|
||||||
d3.addremove = false
|
|
||||||
|
|
||||||
-- Blocked Domains URLs
|
|
||||||
d4 = s2:option(DynamicList, "blocked_domains_url", translate("Blocked Domain URLs"), translate("URLs to lists of domains to be blocked."))
|
|
||||||
d4.addremove = false
|
|
||||||
|
|
||||||
-- Blocked Hosts URLs
|
|
||||||
d5 = s2:option(DynamicList, "blocked_hosts_url", translate("Blocked Hosts URLs"), translate("URLs to lists of hosts to be blocked."))
|
|
||||||
d5.addremove = false
|
|
||||||
|
|
||||||
return m
|
|
|
@ -1,87 +0,0 @@
|
||||||
<%# Copyright 2020 Stan Grishin <stangri@melmac.ca> -%>
|
|
||||||
|
|
||||||
<%+simple-adblock/css%>
|
|
||||||
<%+simple-adblock/js%>
|
|
||||||
|
|
||||||
<%-
|
|
||||||
local packageName = "simple-adblock"
|
|
||||||
local serviceRunning, serviceEnabled = false, false;
|
|
||||||
local tmpfs, tmpfsStatus;
|
|
||||||
local jsonStatusFile = "/var/run/" .. packageName .. "/" .. packageName .. ".json"
|
|
||||||
if nixio.fs.access(jsonStatusFile) then
|
|
||||||
tmpfs = luci.jsonc.parse(luci.util.trim(luci.sys.exec("cat " .. jsonStatusFile)))
|
|
||||||
if tmpfs and tmpfs['data'] and tmpfs['data']['status'] then
|
|
||||||
tmpfsStatus = tmpfs['data']['status']
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if tmpfsStatus == "statusStarting" or tmpfsStatus == "statusRestarting" or
|
|
||||||
tmpfsStatus == "statusForceReloading" or tmpfsStatus == "statusDownloading" or
|
|
||||||
tmpfsStatus == "statusError" or tmpfsStatus == "statusWarning"
|
|
||||||
or tmpfsStatus == "statusSuccess" then
|
|
||||||
serviceRunning = true
|
|
||||||
end
|
|
||||||
|
|
||||||
if luci.model.uci.cursor():get(packageName, "config", "enabled") == "1" then
|
|
||||||
serviceEnabled = true
|
|
||||||
end
|
|
||||||
|
|
||||||
if serviceEnabled then
|
|
||||||
btn_start_status = true
|
|
||||||
btn_action_status = true
|
|
||||||
btn_stop_status = true
|
|
||||||
btn_enable_status = false
|
|
||||||
btn_disable_status = true
|
|
||||||
else
|
|
||||||
btn_start_status = false
|
|
||||||
btn_action_status = false
|
|
||||||
btn_stop_status = false
|
|
||||||
btn_enable_status = true
|
|
||||||
btn_disable_status = false
|
|
||||||
end
|
|
||||||
if serviceRunning then
|
|
||||||
btn_start_status = false
|
|
||||||
btn_action_status = true
|
|
||||||
btn_stop_status = true
|
|
||||||
else
|
|
||||||
btn_action_status = false
|
|
||||||
btn_stop_status = false
|
|
||||||
end
|
|
||||||
-%>
|
|
||||||
|
|
||||||
<%+cbi/valueheader%>
|
|
||||||
<input type="button" class="btn cbi-button cbi-button-apply" id="btn_start" name="start" value="<%:Start%>"
|
|
||||||
onclick="button_action(this)" />
|
|
||||||
<span id="btn_start_spinner" class="btn_spinner"></span>
|
|
||||||
<input type="button" class="btn cbi-button cbi-button-apply" id="btn_action" name="action" value="<%:Force Re-Download%>"
|
|
||||||
onclick="button_action(this)" />
|
|
||||||
<span id="btn_action_spinner" class="btn_spinner"></span>
|
|
||||||
<input type="button" class="btn cbi-button cbi-button-reset" id="btn_stop" name="stop" value="<%:Stop%>"
|
|
||||||
onclick="button_action(this)" />
|
|
||||||
<span id="btn_stop_spinner" class="btn_spinner"></span>
|
|
||||||
 
|
|
||||||
 
|
|
||||||
 
|
|
||||||
 
|
|
||||||
<input type="button" class="btn cbi-button cbi-button-apply" id="btn_enable" name="enable" value="<%:Enable%>"
|
|
||||||
onclick="button_action(this)" />
|
|
||||||
<span id="btn_enable_spinner" class="btn_spinner"></span>
|
|
||||||
<input type="button" class="btn cbi-button cbi-button-reset" id="btn_disable" name="disable" value="<%:Disable%>"
|
|
||||||
onclick="button_action(this)" />
|
|
||||||
<span id="btn_disable_spinner" class="btn_spinner"></span>
|
|
||||||
<%+cbi/valuefooter%>
|
|
||||||
|
|
||||||
<%-if not btn_start_status then%>
|
|
||||||
<script type="text/javascript">document.getElementById("btn_start").disabled = true;</script>
|
|
||||||
<%-end%>
|
|
||||||
<%-if not btn_action_status then%>
|
|
||||||
<script type="text/javascript">document.getElementById("btn_action").disabled = true;</script>
|
|
||||||
<%-end%>
|
|
||||||
<%-if not btn_stop_status then%>
|
|
||||||
<script type="text/javascript">document.getElementById("btn_stop").disabled = true;</script>
|
|
||||||
<%-end%>
|
|
||||||
<%-if not btn_enable_status then%>
|
|
||||||
<script type="text/javascript">document.getElementById("btn_enable").disabled = true;</script>
|
|
||||||
<%-end%>
|
|
||||||
<%-if not btn_disable_status then%>
|
|
||||||
<script type="text/javascript">document.getElementById("btn_disable").disabled = true;</script>
|
|
||||||
<%-end%>
|
|
|
@ -1,9 +0,0 @@
|
||||||
<style type="text/css">
|
|
||||||
.btn_spinner
|
|
||||||
{
|
|
||||||
display: inline-block;
|
|
||||||
width: 0px;
|
|
||||||
height: 16px;
|
|
||||||
margin: 0 0px;
|
|
||||||
}
|
|
||||||
</style>
|
|
|
@ -1,13 +0,0 @@
|
||||||
<%#
|
|
||||||
Copyright 2017-2019 Stan Grishin (stangri@melmac.net)
|
|
||||||
This is free software, licensed under the Apache License, Version 2.0
|
|
||||||
-%>
|
|
||||||
|
|
||||||
<%+cbi/valueheader%>
|
|
||||||
|
|
||||||
<textarea rows="<%=select(2, self:cfgvalue(section):gsub('\n', '\n'))%>"
|
|
||||||
style="border:none;box-shadow:none;background:transparent;font-weight:bold;line-height:20px;width:50em;padding:none;margin:6px;resize:none;overflow:hidden;"
|
|
||||||
disabled="disabled"><%=self:cfgvalue(section):gsub('\n', '\n')%>
|
|
||||||
</textarea>
|
|
||||||
|
|
||||||
<%+cbi/valuefooter%>
|
|
|
@ -1,59 +0,0 @@
|
||||||
<script type="text/javascript">
|
|
||||||
//<![CDATA[
|
|
||||||
function button_action(action) {
|
|
||||||
var xhr = new XHR(false);
|
|
||||||
var btn_start = document.getElementById("btn_start");
|
|
||||||
var btn_action = document.getElementById("btn_action");
|
|
||||||
var btn_stop = document.getElementById("btn_stop");
|
|
||||||
var btn_enable = document.getElementById("btn_enable");
|
|
||||||
var btn_disable = document.getElementById("btn_disable");
|
|
||||||
var btn_spinner;
|
|
||||||
switch (action.name) {
|
|
||||||
case "start":
|
|
||||||
btn_spinner = document.getElementById("btn_start_spinner");
|
|
||||||
break;
|
|
||||||
case "action":
|
|
||||||
btn_spinner = document.getElementById("btn_action_spinner");
|
|
||||||
break;
|
|
||||||
case "stop":
|
|
||||||
btn_spinner = document.getElementById("btn_stop_spinner");
|
|
||||||
break;
|
|
||||||
case "enable":
|
|
||||||
btn_spinner = document.getElementById("btn_enable_spinner");
|
|
||||||
break;
|
|
||||||
case "disable":
|
|
||||||
btn_spinner = document.getElementById("btn_disable_spinner");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
btn_start.disabled = true;
|
|
||||||
btn_action.disabled = true;
|
|
||||||
btn_stop.disabled = true;
|
|
||||||
btn_enable.disabled = true;
|
|
||||||
btn_disable.disabled = true;
|
|
||||||
spinner(btn_spinner, 1);
|
|
||||||
xhr.get('<%=luci.dispatcher.build_url("admin", "services", "simple-adblock", "action")%>/' + action.name, null,
|
|
||||||
function (x) {
|
|
||||||
if (!x) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
btn_start.disabled = false;
|
|
||||||
btn_action.disabled = false;
|
|
||||||
btn_stop.disabled = false;
|
|
||||||
btn_enable.disabled = false;
|
|
||||||
btn_disable.disabled = false;
|
|
||||||
spinner(btn_spinner, 0);
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function spinner(element, state) {
|
|
||||||
if (state === 1) {
|
|
||||||
element.style.width = "16px";
|
|
||||||
element.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" />';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
element.style.width = "0px";
|
|
||||||
element.innerHTML = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//]]>
|
|
||||||
</script>
|
|
|
@ -1,12 +0,0 @@
|
||||||
<%#
|
|
||||||
Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
|
|
||||||
This is free software, licensed under the Apache License, Version 2.0
|
|
||||||
-%>
|
|
||||||
|
|
||||||
<%+cbi/valueheader%>
|
|
||||||
|
|
||||||
<div style="font-weight:bold;">
|
|
||||||
<%=self:cfgvalue(section):gsub('\n', '<br />' )%>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<%+cbi/valuefooter%>
|
|
|
@ -1,191 +1,184 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:250
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:90
|
||||||
msgid "%s Error: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:248
|
|
||||||
msgid "%s Error: %s %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:161
|
|
||||||
msgid "%s is not installed or not found"
|
msgid "%s is not installed or not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:336
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:99
|
||||||
|
msgid "Active"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:106
|
||||||
msgid "Add IPv6 entries"
|
msgid "Add IPv6 entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:334
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:104
|
||||||
msgid "Add IPv6 entries to block-list."
|
msgid "Add IPv6 entries to block-list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:296
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:33
|
||||||
msgid "Advanced Configuration"
|
msgid "Advanced Configuration"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:375
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:145
|
||||||
msgid "Allowed Domain URLs"
|
msgid "Allowed Domain URLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:371
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:142
|
||||||
msgid "Allowed Domains"
|
msgid "Allowed Domains"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:369
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:141
|
||||||
msgid "Allowed and Blocked Lists Management"
|
msgid "Allowed and Blocked Lists Management"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:358
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:129
|
||||||
msgid ""
|
msgid ""
|
||||||
"Attempt to create a compressed cache of block-list in the persistent memory."
|
"Attempt to create a compressed cache of block-list in the persistent memory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:265
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:35
|
||||||
msgid "Automatic Config Update"
|
msgid "Automatic Config Update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:263
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:32
|
||||||
msgid "Basic Configuration"
|
msgid "Basic Configuration"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:383
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:151
|
||||||
msgid "Blocked Domain URLs"
|
msgid "Blocked Domain URLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:379
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:148
|
||||||
msgid "Blocked Domains"
|
msgid "Blocked Domains"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:387
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:154
|
||||||
msgid "Blocked Hosts URLs"
|
msgid "Blocked Hosts URLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:231
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:109
|
||||||
msgid "Blocking %s domains (with %s)."
|
msgid "Blocking %s domains (with %s)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:221
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:129
|
||||||
msgid "Cache file containing %s domains found."
|
msgid "Cache file found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:241
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:111
|
||||||
msgid "Collected Errors"
|
msgid "Compressed cache file created."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:225
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:132
|
||||||
msgid "Compressed cache file found."
|
msgid "Compressed cache file found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:261
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:42
|
||||||
msgid "Configuration"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:270
|
|
||||||
msgid "Controls system log and console output verbosity."
|
msgid "Controls system log and console output verbosity."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:349
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:117
|
||||||
msgid "Curl download retry"
|
msgid "Curl download retry"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:317
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:86
|
||||||
msgid "DNS Service"
|
msgid "DNS Service"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:319
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:65
|
||||||
msgid "DNSMASQ Additional Hosts"
|
msgid "DNS resolution option, see the %sREADME%s for details."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:320
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:251
|
||||||
msgid "DNSMASQ Config"
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:37
|
||||||
msgstr ""
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:39
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:322
|
|
||||||
msgid "DNSMASQ Ipset"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:325
|
|
||||||
msgid "DNSMASQ Nft Set"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:327
|
|
||||||
msgid "DNSMASQ Servers File"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:341
|
|
||||||
msgid "Delay (in seconds) for on-boot start"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:266
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/view/simple-adblock/buttons.htm:68
|
|
||||||
msgid "Disable"
|
msgid "Disable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:364
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:136
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:138
|
||||||
msgid "Disable Debugging"
|
msgid "Disable Debugging"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:335
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:247
|
||||||
|
msgid "Disabling %s service"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:105
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:109
|
||||||
msgid "Do not add IPv6 entries"
|
msgid "Do not add IPv6 entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:359
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:130
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:132
|
||||||
msgid "Do not store compressed cache"
|
msgid "Do not store compressed cache"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:354
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:124
|
||||||
msgid "Do not use simultaneous processing"
|
msgid "Do not use simultaneous processing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:345
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:112
|
||||||
msgid "Download time-out (in seconds)"
|
msgid "Download time-out (in seconds)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:166
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:95
|
||||||
msgid "Downloading"
|
msgid "Downloading"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:267
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:240
|
||||||
#: applications/luci-app-simple-adblock/luasrc/view/simple-adblock/buttons.htm:65
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:38
|
||||||
msgid "Enable"
|
msgid "Enable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:363
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:134
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:365
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:137
|
||||||
msgid "Enable Debugging"
|
msgid "Enable Debugging"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:363
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:135
|
||||||
msgid "Enables debug output to /tmp/simple-adblock.log."
|
msgid "Enables debug output to /tmp/simple-adblock.log."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:167
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:236
|
||||||
|
msgid "Enabling %s service"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:96
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:169
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:98
|
||||||
msgid "Fail"
|
msgid "Fail"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/view/simple-adblock/buttons.htm:55
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:114
|
||||||
|
msgid "Force DNS ports:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:218
|
||||||
msgid "Force Re-Download"
|
msgid "Force Re-Download"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:165
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:94
|
||||||
msgid "Force Reloading"
|
msgid "Force Reloading"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:276
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:48
|
||||||
msgid "Force Router DNS"
|
msgid "Force Router DNS"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:278
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:51
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:52
|
||||||
msgid "Force Router DNS server to all local devices"
|
msgid "Force Router DNS server to all local devices"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:276
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:214
|
||||||
|
msgid "Force re-downloading %s block lists"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:49
|
||||||
msgid "Forces Router DNS use on local devices, also known as DNS Hijacking."
|
msgid "Forces Router DNS use on local devices, also known as DNS Hijacking."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -193,270 +186,287 @@ msgstr ""
|
||||||
msgid "Grant UCI and file access for luci-app-simple-adblock"
|
msgid "Grant UCI and file access for luci-app-simple-adblock"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:334
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:103
|
||||||
msgid "IPv6 Support"
|
msgid "IPv6 Support"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:349
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:118
|
||||||
msgid ""
|
msgid ""
|
||||||
"If curl is installed and detected, it would retry download this many times "
|
"If curl is installed and detected, it would retry download this many times "
|
||||||
"on timeout/fail."
|
"on timeout/fail."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:371
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:143
|
||||||
msgid "Individual domains to be allowed."
|
msgid "Individual domains to be allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:379
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:149
|
||||||
msgid "Individual domains to be blocked."
|
msgid "Individual domains to be blocked."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:219
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:56
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:223
|
|
||||||
msgid "Info"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:287
|
|
||||||
msgid "LED to indicate status"
|
msgid "LED to indicate status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:353
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:123
|
||||||
msgid ""
|
msgid ""
|
||||||
"Launch all lists downloads and processing simultaneously, reducing service "
|
"Launch all lists downloads and processing simultaneously, reducing service "
|
||||||
"start time."
|
"start time."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:277
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:50
|
||||||
msgid "Let local devices use their own DNS servers if set"
|
msgid "Let local devices use their own DNS servers if set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/view/simple-adblock/js.htm:51
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:146
|
||||||
msgid "Loading"
|
msgid "Not installed or not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:236
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:41
|
||||||
msgid "Message"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:270
|
|
||||||
msgid "Output Verbosity Setting"
|
msgid "Output Verbosity Setting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:265
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:36
|
||||||
msgid "Perform config update before downloading the block/allow-lists."
|
msgid "Perform config update before downloading the block/allow-lists."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:298
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:57
|
||||||
msgid ""
|
|
||||||
"Pick the DNS resolution option to create the adblock list for, see the "
|
|
||||||
"%sREADME%s for details."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:288
|
|
||||||
msgid "Pick the LED not already used in %sSystem LED Configuration%s."
|
msgid "Pick the LED not already used in %sSystem LED Configuration%s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:301
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:68
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:302
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:69
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:303
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:70
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:304
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:71
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:307
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:75
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:310
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:78
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:314
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:82
|
||||||
msgid "Please note that %s is not supported on this system."
|
msgid "Please note that %s is not supported on this system."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:164
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:93
|
||||||
msgid "Restarting"
|
msgid "Restarting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:341
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:285
|
||||||
msgid "Run service after set delay on boot."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:256
|
|
||||||
msgid "Service Control"
|
msgid "Service Control"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:205
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:185
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:215
|
msgid "Service Errors"
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:228
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:103
|
||||||
msgid "Service Status"
|
msgid "Service Status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:199
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:154
|
||||||
msgid "Service Status [%s %s]"
|
msgid "Service Warnings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/controller/simple-adblock.lua:4
|
|
||||||
#: applications/luci-app-simple-adblock/root/usr/share/luci/menu.d/luci-app-simple-adblock.json:3
|
#: applications/luci-app-simple-adblock/root/usr/share/luci/menu.d/luci-app-simple-adblock.json:3
|
||||||
msgid "Simple AdBlock"
|
msgid "Simple AdBlock"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:193
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:30
|
||||||
msgid "Simple AdBlock Settings"
|
msgid "Simple AdBlock - Configuration"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:353
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:102
|
||||||
|
msgid "Simple AdBlock - Status"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:122
|
||||||
msgid "Simultaneous processing"
|
msgid "Simultaneous processing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:272
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:44
|
||||||
msgid "Some output"
|
msgid "Some output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/view/simple-adblock/buttons.htm:52
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:207
|
||||||
msgid "Start"
|
msgid "Start"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:163
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:92
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/view/simple-adblock/buttons.htm:58
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:203
|
||||||
|
msgid "Starting %s service"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:229
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:345
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:113
|
||||||
msgid "Stop the download if it is stalled for set number of seconds."
|
msgid "Stop the download if it is stalled for set number of seconds."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:162
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:91
|
||||||
msgid "Stopped"
|
msgid "Stopped"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:360
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:225
|
||||||
|
msgid "Stopping %s service"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:131
|
||||||
msgid "Store compressed cache"
|
msgid "Store compressed cache"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:358
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:128
|
||||||
msgid "Store compressed cache file on router"
|
msgid "Store compressed cache file on router"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:170
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:43
|
||||||
msgid "Success"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:271
|
|
||||||
msgid "Suppress output"
|
msgid "Suppress output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:209
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:146
|
||||||
msgid "Task"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:375
|
|
||||||
msgid "URLs to lists of domains to be allowed."
|
msgid "URLs to lists of domains to be allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:383
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:152
|
||||||
msgid "URLs to lists of domains to be blocked."
|
msgid "URLs to lists of domains to be blocked."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:387
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:155
|
||||||
msgid "URLs to lists of hosts to be blocked."
|
msgid "URLs to lists of hosts to be blocked."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:330
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:125
|
||||||
msgid "Unbound AdBlock List"
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:126
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:355
|
|
||||||
msgid "Use simultaneous processing"
|
msgid "Use simultaneous processing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:273
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:45
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:46
|
||||||
msgid "Verbose output"
|
msgid "Verbose output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:168
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:105
|
||||||
|
msgid "Version: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:97
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:173
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:126
|
||||||
|
msgid "disabled"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:88
|
||||||
|
msgid "dnsmasq additional hosts"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:89
|
||||||
|
msgid "dnsmasq config"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:91
|
||||||
|
msgid "dnsmasq ipset"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:94
|
||||||
|
msgid "dnsmasq nft set"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:96
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:101
|
||||||
|
msgid "dnsmasq servers file"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:165
|
||||||
msgid "failed to access shared memory"
|
msgid "failed to access shared memory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:171
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:163
|
||||||
msgid "failed to create '%s' file"
|
msgid "failed to create '%s' file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:183
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:175
|
||||||
msgid "failed to create block-list or restart DNS resolver"
|
msgid "failed to create block-list or restart DNS resolver"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:179
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:171
|
||||||
msgid "failed to create compressed cache"
|
msgid "failed to create compressed cache"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:191
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:183
|
||||||
msgid "failed to create output/cache/gzip file directory"
|
msgid "failed to create output/cache/gzip file directory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:187
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:179
|
||||||
msgid "failed to download"
|
msgid "failed to download"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:186
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:178
|
||||||
msgid "failed to download Config Update file"
|
msgid "failed to download Config Update file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:177
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:169
|
||||||
msgid "failed to format data file"
|
msgid "failed to format data file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:182
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:174
|
||||||
msgid "failed to move '%s' to '%s'"
|
msgid "failed to move '%s' to '%s'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:178
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:170
|
||||||
msgid "failed to move temporary data file to '%s'"
|
msgid "failed to move temporary data file to '%s'"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:175
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:167
|
||||||
msgid "failed to optimize data file"
|
msgid "failed to optimize data file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:189
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:181
|
||||||
msgid "failed to parse"
|
msgid "failed to parse"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:188
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:180
|
||||||
msgid "failed to parse Config Update file"
|
msgid "failed to parse Config Update file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:176
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:168
|
||||||
msgid "failed to process allow-list"
|
msgid "failed to process allow-list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:185
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:177
|
||||||
msgid "failed to reload/restart DNS resolver"
|
msgid "failed to reload/restart DNS resolver"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:180
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:172
|
||||||
msgid "failed to remove temporary files"
|
msgid "failed to remove temporary files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:172
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:164
|
||||||
msgid "failed to restart/reload DNS resolver"
|
msgid "failed to restart/reload DNS resolver"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:174
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:166
|
||||||
msgid "failed to sort data file"
|
msgid "failed to sort data file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:184
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:176
|
||||||
msgid "failed to stop %s"
|
msgid "failed to stop %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:181
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:173
|
||||||
msgid "failed to unpack compressed cache"
|
msgid "failed to unpack compressed cache"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:190
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:182
|
||||||
msgid "no HTTPS/SSL support on device"
|
msgid "no HTTPS/SSL support on device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:290
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:59
|
||||||
msgid "none"
|
msgid "none"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:99
|
||||||
|
msgid "unbound adblock list"
|
||||||
|
msgstr ""
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
rm -rf /var/luci-modulecache/; rm -f /var/luci-indexcache;
|
rm -rf /var/luci-modulecache/; rm -f /var/luci-indexcache;
|
||||||
[ -x /etc/init.d/rpcd ] && /etc/init.d/rpcd reload
|
[ -x /etc/init.d/rpcd ] && /etc/init.d/rpcd reload;
|
||||||
exit 0
|
exit 0
|
||||||
|
|
312
applications/luci-app-simple-adblock/root/usr/libexec/rpcd/luci.simple-adblock
Executable file
312
applications/luci-app-simple-adblock/root/usr/libexec/rpcd/luci.simple-adblock
Executable file
|
@ -0,0 +1,312 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright 2022 Stan Grishin (stangri@melmac.ca)
|
||||||
|
# shellcheck disable=SC1091,SC2018,SC2019,SC2039,SC3043,SC3057,SC3060
|
||||||
|
|
||||||
|
# TechRef: https://openwrt.org/docs/techref/rpcd
|
||||||
|
# TESTS
|
||||||
|
# ubus -v list luci.simple-adblock
|
||||||
|
# ubus -S call luci.simple-adblock getInitList '{"name": "simple-adblock" }'
|
||||||
|
# ubus -S call luci.simple-adblock getInitStatus '{"name": "simple-adblock" }'
|
||||||
|
# ubus -S call luci.simple-adblock getPlatformSupport '{"name": "simple-adblock" }'
|
||||||
|
|
||||||
|
. /lib/functions.sh
|
||||||
|
. /lib/functions/network.sh
|
||||||
|
. /usr/share/libubox/jshn.sh
|
||||||
|
|
||||||
|
readonly packageName="simple-adblock"
|
||||||
|
readonly dnsmasqAddnhostsFile="/var/run/${packageName}/dnsmasq.addnhosts"
|
||||||
|
readonly dnsmasqAddnhostsCache="/var/run/${packageName}/dnsmasq.addnhosts.cache"
|
||||||
|
readonly dnsmasqAddnhostsGzip="/etc/${packageName}.dnsmasq.addnhosts.gz"
|
||||||
|
readonly dnsmasqConfFile="/tmp/dnsmasq.d/${packageName}"
|
||||||
|
readonly dnsmasqConfCache="/var/run/${packageName}/dnsmasq.conf.cache"
|
||||||
|
readonly dnsmasqConfGzip="/etc/${packageName}.dnsmasq.conf.gz"
|
||||||
|
readonly dnsmasqIpsetFile="/tmp/dnsmasq.d/${packageName}.ipset"
|
||||||
|
readonly dnsmasqIpsetCache="/var/run/${packageName}/dnsmasq.ipset.cache"
|
||||||
|
readonly dnsmasqIpsetGzip="/etc/${packageName}.dnsmasq.ipset.gz"
|
||||||
|
readonly dnsmasqNftsetFile="/tmp/dnsmasq.d/${packageName}.nftset"
|
||||||
|
readonly dnsmasqNftsetCache="/var/run/${packageName}/dnsmasq.nftset.cache"
|
||||||
|
readonly dnsmasqNftsetGzip="/etc/${packageName}.dnsmasq.nftset.gz"
|
||||||
|
readonly dnsmasqServersFile="/var/run/${packageName}/dnsmasq.servers"
|
||||||
|
readonly dnsmasqServersCache="/var/run/${packageName}/dnsmasq.servers.cache"
|
||||||
|
readonly dnsmasqServersGzip="/etc/${packageName}.dnsmasq.servers.gz"
|
||||||
|
readonly unboundFile="/var/lib/unbound/adb_list.${packageName}"
|
||||||
|
readonly unboundCache="/var/run/${packageName}/unbound.cache"
|
||||||
|
readonly unboundGzip="/etc/${packageName}.unbound.gz"
|
||||||
|
readonly jsonFile="/var/run/${packageName}/${packageName}.json"
|
||||||
|
|
||||||
|
str_contains() { [ -n "$1" ] &&[ -n "$2" ] && [ "${1//$2}" != "$1" ]; }
|
||||||
|
str_contains_word() { echo "$1" | grep -q -w "$2"; }
|
||||||
|
str_to_lower() { echo "$1" | tr 'A-Z' 'a-z'; }
|
||||||
|
str_to_upper() { echo "$1" | tr 'a-z' 'A-Z'; }
|
||||||
|
is_enabled() { uci -q get "${1}.config.enabled"; }
|
||||||
|
get_version() { grep -m1 -A2 -w "^Package: $1$" /usr/lib/opkg/status | sed -n 's/Version: //p'; }
|
||||||
|
print_json_bool() { json_init; json_add_boolean "$1" "$2"; json_dump; json_cleanup; }
|
||||||
|
print_json_string() { json_init; json_add_string "$1" "$2"; json_dump; json_cleanup; }
|
||||||
|
logger() { /usr/bin/logger -t "$packageName" "$@"; }
|
||||||
|
ubus_get_status() { ubus call service list "{ 'name': '$packageName' }" | jsonfilter -e "@['${packageName}'].instances.main.data.${1}"; }
|
||||||
|
ubus_get_ports() { ubus call service list "{ 'name': '$packageName' }" | jsonfilter -e "@['${packageName}'].instances.main.data.firewall.*.dest_port"; }
|
||||||
|
json() {
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
local action="$1" param="$2" value="$3" i
|
||||||
|
if [ -s "$jsonFile" ]; then
|
||||||
|
json_load_file "$jsonFile" 2>/dev/null
|
||||||
|
json_select 'data' 2>/dev/null
|
||||||
|
for i in status message error stats reload restart; do
|
||||||
|
json_get_var $i "$i" 2>/dev/null
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
case "$action" in
|
||||||
|
get)
|
||||||
|
case "$param" in
|
||||||
|
*)
|
||||||
|
printf "%b" "$(eval echo "\$$param")"; return;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
get_init_list() {
|
||||||
|
local name
|
||||||
|
name="$(basename "$1")"
|
||||||
|
name="${name:-$packageName}"
|
||||||
|
json_init
|
||||||
|
json_add_object "$name"
|
||||||
|
json_add_boolean 'enabled' "$(is_enabled "$name")"
|
||||||
|
if is_running "$name"; then
|
||||||
|
json_add_boolean 'running' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'running' '0'
|
||||||
|
fi
|
||||||
|
json_close_object
|
||||||
|
json_dump
|
||||||
|
json_cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
set_init_action() {
|
||||||
|
local name action="$2" cmd
|
||||||
|
name="$(basename "$1")"
|
||||||
|
name="${name:-$packageName}"
|
||||||
|
if [ ! -f "/etc/init.d/$name" ]; then
|
||||||
|
print_json_string 'error' 'Init script not found!'
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
case $action in
|
||||||
|
enable)
|
||||||
|
cmd="uci -q set ${name}.config.enabled=1 && uci commit $name";;
|
||||||
|
disable)
|
||||||
|
cmd="uci -q set ${name}.config.enabled=0 && uci commit $name";;
|
||||||
|
start|stop|reload|restart)
|
||||||
|
cmd="/etc/init.d/${name} ${action}";;
|
||||||
|
esac
|
||||||
|
if [ -n "$cmd" ] && eval "${cmd}" 1>/dev/null 2>&1; then
|
||||||
|
print_json_bool "result" '1'
|
||||||
|
else
|
||||||
|
print_json_bool "result" '0'
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
get_init_status() {
|
||||||
|
local name
|
||||||
|
name="$(basename "$1")"
|
||||||
|
name="${name:-$packageName}"
|
||||||
|
local errors ports dns outputFile outputCache outputGzip
|
||||||
|
local i
|
||||||
|
errors="$(ubus_get_status errors)"
|
||||||
|
ports="$(ubus_get_ports)"
|
||||||
|
dns="$(uci -q get $packageName.config.dns)"
|
||||||
|
case "$dns" in
|
||||||
|
dnsmasq.addnhosts)
|
||||||
|
outputFile="$dnsmasqAddnhostsFile"
|
||||||
|
outputCache="$dnsmasqAddnhostsCache"
|
||||||
|
outputGzip="$dnsmasqAddnhostsGzip"
|
||||||
|
;;
|
||||||
|
dnsmasq.conf)
|
||||||
|
outputFile="$dnsmasqConfFile"
|
||||||
|
outputCache="$dnsmasqConfCache"
|
||||||
|
outputGzip="$dnsmasqConfGzip"
|
||||||
|
;;
|
||||||
|
dnsmasq.ipset)
|
||||||
|
outputFile="$dnsmasqIpsetFile"
|
||||||
|
outputCache="$dnsmasqIpsetCache"
|
||||||
|
outputGzip="$dnsmasqIpsetGzip"
|
||||||
|
;;
|
||||||
|
dnsmasq.nftset)
|
||||||
|
outputFile="$dnsmasqNftsetFile"
|
||||||
|
outputCache="$dnsmasqNftsetCache"
|
||||||
|
outputGzip="$dnsmasqNftsetGzip"
|
||||||
|
;;
|
||||||
|
dnsmasq.servers)
|
||||||
|
outputFile="$dnsmasqServersFile"
|
||||||
|
outputCache="$dnsmasqServersCache"
|
||||||
|
outputGzip="$dnsmasqServersGzip"
|
||||||
|
;;
|
||||||
|
unbound.adb_list)
|
||||||
|
outputFile="$unboundFile"
|
||||||
|
outputCache="$unboundCache"
|
||||||
|
outputGzip="$unboundGzip"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
json_init
|
||||||
|
json_add_object "$name"
|
||||||
|
json_add_boolean 'enabled' "$(is_enabled "$name")"
|
||||||
|
i="$(json 'get' 'status')"
|
||||||
|
json_add_string 'status' "$i"
|
||||||
|
if [ "$i" = 'statusSuccess' ]; then
|
||||||
|
json_add_boolean 'running' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'running' '0'
|
||||||
|
fi
|
||||||
|
json_add_string 'version' "$(get_version "$name")"
|
||||||
|
json_add_array 'errors'
|
||||||
|
for i in $errors; do json_add_string '' "$i"; done
|
||||||
|
json_close_array
|
||||||
|
if [ -n "$ports" ]; then
|
||||||
|
json_add_boolean 'force_dns_active' '1'
|
||||||
|
json_add_array 'force_dns_ports'
|
||||||
|
for i in $ports; do json_add_int '' "$i"; done
|
||||||
|
json_close_array
|
||||||
|
else
|
||||||
|
json_add_boolean 'force_dns_active' '0'
|
||||||
|
fi
|
||||||
|
json_add_int 'entries' "$(ubus_get_status entries)"
|
||||||
|
json_add_string 'dns' "$dns"
|
||||||
|
json_add_string 'outputFile' "$outputFile"
|
||||||
|
json_add_string 'outputCache' "$outputCache"
|
||||||
|
json_add_string 'outputGzip' "$outputGzip"
|
||||||
|
if [ -s "$outputFile" ]; then
|
||||||
|
json_add_boolean 'outputFileExists' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'outputFileExists' '0'
|
||||||
|
fi
|
||||||
|
if [ -s "$outputCache" ]; then
|
||||||
|
json_add_boolean 'outputCacheExists' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'outputCacheExists' '0'
|
||||||
|
fi
|
||||||
|
if [ -s "$outputGzip" ]; then
|
||||||
|
json_add_boolean 'outputGzipExists' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'outputGzipExists' '0'
|
||||||
|
fi
|
||||||
|
json_add_array 'leds'
|
||||||
|
for i in /sys/class/leds/*; do json_add_string '' "$(basename "$i")"; done
|
||||||
|
json_close_array
|
||||||
|
json_close_object
|
||||||
|
json_dump
|
||||||
|
json_cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
check_ipset() { { command -v ipset && /usr/sbin/ipset help hash:net; } >/dev/null 2>&1; }
|
||||||
|
check_nft() { command -v nft >/dev/null 2>&1; }
|
||||||
|
check_dnsmasq() { command -v dnsmasq >/dev/null 2>&1; }
|
||||||
|
check_unbound() { command -v unbound >/dev/null 2>&1; }
|
||||||
|
check_dnsmasq_ipset() {
|
||||||
|
local o;
|
||||||
|
check_dnsmasq || return 1
|
||||||
|
o="$(dnsmasq -v 2>/dev/null)"
|
||||||
|
check_ipset && ! echo "$o" | grep -q 'no-ipset' && echo "$o" | grep -q 'ipset'
|
||||||
|
}
|
||||||
|
check_dnsmasq_nftset() {
|
||||||
|
local o;
|
||||||
|
check_dnsmasq || return 1
|
||||||
|
o="$(dnsmasq -v 2>/dev/null)"
|
||||||
|
check_nft && ! echo "$o" | grep -q 'no-nftset' && echo "$o" | grep -q 'nftset'
|
||||||
|
}
|
||||||
|
|
||||||
|
get_platform_support() {
|
||||||
|
local name
|
||||||
|
name="$(basename "$1")"
|
||||||
|
name="${name:-$packageName}"
|
||||||
|
json_init
|
||||||
|
json_add_object "$name"
|
||||||
|
if check_ipset; then
|
||||||
|
json_add_boolean 'ipset_installed' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'ipset_installed' '0'
|
||||||
|
fi
|
||||||
|
if check_nft; then
|
||||||
|
json_add_boolean 'nft_installed' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'nft_installed' '0'
|
||||||
|
fi
|
||||||
|
if check_dnsmasq; then
|
||||||
|
json_add_boolean 'dnsmasq_installed' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'dnsmasq_installed' '0'
|
||||||
|
fi
|
||||||
|
if check_unbound; then
|
||||||
|
json_add_boolean 'unbound_installed' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'unbound_installed' '0'
|
||||||
|
fi
|
||||||
|
if check_dnsmasq_ipset; then
|
||||||
|
json_add_boolean 'dnsmasq_ipset_support' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'dnsmasq_ipset_support' '0'
|
||||||
|
fi
|
||||||
|
if check_dnsmasq_nftset; then
|
||||||
|
json_add_boolean 'dnsmasq_nftset_support' '1'
|
||||||
|
else
|
||||||
|
json_add_boolean 'dnsmasq_nftset_support' '0'
|
||||||
|
fi
|
||||||
|
json_add_array 'leds'
|
||||||
|
for i in /sys/class/leds/*; do json_add_string '' "$(basename "$i")"; done
|
||||||
|
json_close_array
|
||||||
|
json_close_object
|
||||||
|
json_dump
|
||||||
|
json_cleanup
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
list)
|
||||||
|
json_init
|
||||||
|
json_add_object "getInitList"
|
||||||
|
json_add_string 'name' 'name'
|
||||||
|
json_close_object
|
||||||
|
json_add_object "getInitStatus"
|
||||||
|
json_add_string 'name' 'name'
|
||||||
|
json_close_object
|
||||||
|
json_add_object "getPlatformSupport"
|
||||||
|
json_add_string 'name' 'name'
|
||||||
|
json_close_object
|
||||||
|
json_add_object "setInitAction"
|
||||||
|
json_add_string 'name' 'name'
|
||||||
|
json_add_string 'action' 'action'
|
||||||
|
json_close_object
|
||||||
|
json_dump
|
||||||
|
json_cleanup
|
||||||
|
;;
|
||||||
|
call)
|
||||||
|
case "$2" in
|
||||||
|
getInitList)
|
||||||
|
read -r input
|
||||||
|
json_load "$input"
|
||||||
|
json_get_var name 'name'
|
||||||
|
json_cleanup
|
||||||
|
get_init_list "$name"
|
||||||
|
;;
|
||||||
|
getInitStatus)
|
||||||
|
read -r input
|
||||||
|
json_load "$input"
|
||||||
|
json_get_var name 'name'
|
||||||
|
json_cleanup
|
||||||
|
get_init_status "$name"
|
||||||
|
;;
|
||||||
|
getPlatformSupport)
|
||||||
|
read -r input
|
||||||
|
json_load "$input"
|
||||||
|
json_get_var name 'name'
|
||||||
|
json_cleanup
|
||||||
|
get_platform_support "$name"
|
||||||
|
;;
|
||||||
|
setInitAction)
|
||||||
|
read -r input
|
||||||
|
json_load "$input"
|
||||||
|
json_get_var name 'name'
|
||||||
|
json_get_var action 'action'
|
||||||
|
json_cleanup
|
||||||
|
set_init_action "$name" "$action"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
|
@ -2,13 +2,16 @@
|
||||||
"admin/services/simple-adblock": {
|
"admin/services/simple-adblock": {
|
||||||
"title": "Simple AdBlock",
|
"title": "Simple AdBlock",
|
||||||
"action": {
|
"action": {
|
||||||
"type": "cbi",
|
"type": "view",
|
||||||
"path": "simple-adblock",
|
"path": "simple-adblock/overview"
|
||||||
"post": { "cbi.submit": true }
|
|
||||||
},
|
},
|
||||||
"depends": {
|
"depends": {
|
||||||
"acl": [ "luci-app-simple-adblock" ],
|
"acl": [
|
||||||
"uci": { "simple-adblock": true }
|
"luci-app-simple-adblock"
|
||||||
|
],
|
||||||
|
"uci": {
|
||||||
|
"simple-adblock": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,30 +2,11 @@
|
||||||
"luci-app-simple-adblock": {
|
"luci-app-simple-adblock": {
|
||||||
"description": "Grant UCI and file access for luci-app-simple-adblock",
|
"description": "Grant UCI and file access for luci-app-simple-adblock",
|
||||||
"read": {
|
"read": {
|
||||||
"cgi-io": [
|
"ubus": {
|
||||||
"exec"
|
"luci.simple-adblock": [
|
||||||
],
|
"getInitList",
|
||||||
"file": {
|
"getInitStatus",
|
||||||
"/usr/lib/opkg/status": [
|
"getPlatformSupport"
|
||||||
"read"
|
|
||||||
],
|
|
||||||
"/sys/class/leds/*": [
|
|
||||||
"read"
|
|
||||||
],
|
|
||||||
"/var/run/simple-adblock.*": [
|
|
||||||
"read"
|
|
||||||
],
|
|
||||||
"/etc/init.d/simple-adblock *": [
|
|
||||||
"exec"
|
|
||||||
],
|
|
||||||
"/usr/sbin/dnsmasq *": [
|
|
||||||
"exec"
|
|
||||||
],
|
|
||||||
"/usr/sbin/unbound *": [
|
|
||||||
"exec"
|
|
||||||
],
|
|
||||||
"/usr/sbin/ipset *": [
|
|
||||||
"exec"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"uci": [
|
"uci": [
|
||||||
|
@ -35,7 +16,12 @@
|
||||||
"write": {
|
"write": {
|
||||||
"uci": [
|
"uci": [
|
||||||
"simple-adblock"
|
"simple-adblock"
|
||||||
|
],
|
||||||
|
"ubus": {
|
||||||
|
"luci.simple-adblock": [
|
||||||
|
"setInitAction"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue