luci-app-simple-adblock: convert to js
Thanks @dibdot, @jow-! Signed-off-by: Stan Grishin <stangri@melmac.ca> Update applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js Co-authored-by: Vasili Sviridov <vsviridov@exceede.com> Signed-off-by: Stan Grishin <stangri@melmac.ca> Thanks @dibdot, @jow-, @vsviridov! * this includes changes made during review Co-authored-by: Vasili Sviridov <vsviridov@exceede.com> Signed-off-by: Stan Grishin <stangri@melmac.ca>
This commit is contained in:
parent
0dd0114a9d
commit
0b895b1794
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.
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
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_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
|
||||
|
||||
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 ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:250
|
||||
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
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:90
|
||||
msgid "%s is not installed or not found"
|
||||
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"
|
||||
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."
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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 ""
|
||||
"Attempt to create a compressed cache of block-list in the persistent memory."
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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)."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:221
|
||||
msgid "Cache file containing %s domains found."
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:129
|
||||
msgid "Cache file found."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:241
|
||||
msgid "Collected Errors"
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:111
|
||||
msgid "Compressed cache file created."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:261
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:270
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:42
|
||||
msgid "Controls system log and console output verbosity."
|
||||
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"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:319
|
||||
msgid "DNSMASQ Additional Hosts"
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:65
|
||||
msgid "DNS resolution option, see the %sREADME%s for details."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:320
|
||||
msgid "DNSMASQ Config"
|
||||
msgstr ""
|
||||
|
||||
#: 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
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:251
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:37
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:39
|
||||
msgid "Disable"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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)"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:267
|
||||
#: applications/luci-app-simple-adblock/luasrc/view/simple-adblock/buttons.htm:65
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:240
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:38
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:363
|
||||
#: 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:134
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:137
|
||||
msgid "Enable Debugging"
|
||||
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."
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
|
@ -193,270 +186,287 @@ msgstr ""
|
|||
msgid "Grant UCI and file access for luci-app-simple-adblock"
|
||||
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"
|
||||
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 ""
|
||||
"If curl is installed and detected, it would retry download this many times "
|
||||
"on timeout/fail."
|
||||
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."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:219
|
||||
#: 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
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:56
|
||||
msgid "LED to indicate status"
|
||||
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 ""
|
||||
"Launch all lists downloads and processing simultaneously, reducing service "
|
||||
"start time."
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/view/simple-adblock/js.htm:51
|
||||
msgid "Loading"
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:146
|
||||
msgid "Not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:236
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:270
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:41
|
||||
msgid "Output Verbosity Setting"
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:298
|
||||
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
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:57
|
||||
msgid "Pick the LED not already used in %sSystem LED Configuration%s."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:301
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:302
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:303
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:304
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:307
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:310
|
||||
#: 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:68
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:69
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:70
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:71
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:75
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:78
|
||||
#: 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."
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:341
|
||||
msgid "Run service after set delay on boot."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:256
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:285
|
||||
msgid "Service Control"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:205
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:215
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:228
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:185
|
||||
msgid "Service Errors"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:103
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:199
|
||||
msgid "Service Status [%s %s]"
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:154
|
||||
msgid "Service Warnings"
|
||||
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
|
||||
msgid "Simple AdBlock"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:193
|
||||
msgid "Simple AdBlock Settings"
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:30
|
||||
msgid "Simple AdBlock - Configuration"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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."
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:170
|
||||
msgid "Success"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:271
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:43
|
||||
msgid "Suppress output"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:209
|
||||
msgid "Task"
|
||||
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:146
|
||||
msgid "URLs to lists of domains to be allowed."
|
||||
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."
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:330
|
||||
msgid "Unbound AdBlock List"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/luasrc/model/cbi/simple-adblock.lua:355
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:125
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:126
|
||||
msgid "Use simultaneous processing"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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'"
|
||||
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'"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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
|
||||
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
|
||||
|
|
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": {
|
||||
"title": "Simple AdBlock",
|
||||
"action": {
|
||||
"type": "cbi",
|
||||
"path": "simple-adblock",
|
||||
"post": { "cbi.submit": true }
|
||||
"type": "view",
|
||||
"path": "simple-adblock/overview"
|
||||
},
|
||||
"depends": {
|
||||
"acl": [ "luci-app-simple-adblock" ],
|
||||
"uci": { "simple-adblock": true }
|
||||
"acl": [
|
||||
"luci-app-simple-adblock"
|
||||
],
|
||||
"uci": {
|
||||
"simple-adblock": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,40 +2,26 @@
|
|||
"luci-app-simple-adblock": {
|
||||
"description": "Grant UCI and file access for luci-app-simple-adblock",
|
||||
"read": {
|
||||
"cgi-io": [
|
||||
"exec"
|
||||
],
|
||||
"file": {
|
||||
"/usr/lib/opkg/status": [
|
||||
"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"
|
||||
"ubus": {
|
||||
"luci.simple-adblock": [
|
||||
"getInitList",
|
||||
"getInitStatus",
|
||||
"getPlatformSupport"
|
||||
]
|
||||
},
|
||||
"uci": [
|
||||
"uci": [
|
||||
"simple-adblock"
|
||||
]
|
||||
},
|
||||
"write": {
|
||||
"uci": [
|
||||
"simple-adblock"
|
||||
]
|
||||
],
|
||||
"ubus": {
|
||||
"luci.simple-adblock": [
|
||||
"setInitAction"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue