luci-app-adblock-fast: initial commit
* Depends on https://github.com/openwrt/packages/pull/21943 Signed-off-by: Stan Grishin <stangri@melmac.ca>
This commit is contained in:
parent
324f5a3f79
commit
81fc75739c
47 changed files with 1562 additions and 1130 deletions
|
@ -1,15 +1,15 @@
|
|||
# Copyright 2017-2022 Stan Grishin (stangri@melmac.ca)
|
||||
# Copyright 2023 MOSSDeF, 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.5-3
|
||||
PKG_VERSION:=1.0.0-1
|
||||
|
||||
LUCI_TITLE:=Simple Adblock Web UI
|
||||
LUCI_DESCRIPTION:=Provides Web UI for simple-adblock service.
|
||||
LUCI_DEPENDS:=+luci-base +simple-adblock +jsonfilter
|
||||
LUCI_TITLE:=AdBlock-Fast Web UI
|
||||
LUCI_DESCRIPTION:=Provides Web UI for adblock-fast service.
|
||||
LUCI_DEPENDS:=+luci-base +adblock-fast +jsonfilter
|
||||
LUCI_PKGARCH:=all
|
||||
|
||||
include ../../luci.mk
|
|
@ -0,0 +1,479 @@
|
|||
// Copyright MOSSDeF, 2023 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 "adblock-fast";
|
||||
},
|
||||
get URL() {
|
||||
return "https://docs.openwrt.melmac.net/" + pkg.Name + "/";
|
||||
},
|
||||
};
|
||||
|
||||
var getFileUrlFilesizes = rpc.declare({
|
||||
object: "luci." + pkg.Name,
|
||||
method: "getFileUrlFilesizes",
|
||||
params: ["name", "url"],
|
||||
});
|
||||
|
||||
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 (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 (event, data) {
|
||||
this.listeners.forEach(function (listener) {
|
||||
if (listener.event === event) {
|
||||
listener.callback(data);
|
||||
}
|
||||
});
|
||||
},
|
||||
setInitAction: function (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(pkg.Name), {})]).then(
|
||||
function (data) {
|
||||
var reply = {
|
||||
status: (data[0] && data[0][pkg.Name]) || {
|
||||
enabled: false,
|
||||
status: null,
|
||||
running: null,
|
||||
version: null,
|
||||
errors: [],
|
||||
warnings: [],
|
||||
force_dns_active: null,
|
||||
force_dns_ports: [],
|
||||
entries: null,
|
||||
dns: null,
|
||||
outputFile: null,
|
||||
outputCache: null,
|
||||
outputGzip: null,
|
||||
outputFileExists: null,
|
||||
outputCacheExists: null,
|
||||
outputGzipExists: null,
|
||||
leds: [],
|
||||
},
|
||||
};
|
||||
var text = "";
|
||||
var outputFile = reply.status.outputFile;
|
||||
var outputCache = reply.status.outputCache;
|
||||
var statusTable = {
|
||||
statusNoInstall: _("%s is not installed or not found").format(
|
||||
pkg.Name
|
||||
),
|
||||
statusStopped: _("Stopped"),
|
||||
statusStarting: _("Starting"),
|
||||
statusProcessing: _("Processing lists"),
|
||||
statusRestarting: _("Restarting"),
|
||||
statusForceReloading: _("Force Reloading"),
|
||||
statusDownloading: _("Downloading lists"),
|
||||
statusError: _("Error"),
|
||||
statusWarning: _("Warning"),
|
||||
statusFail: _("Fail"),
|
||||
statusSuccess: _("Active"),
|
||||
};
|
||||
|
||||
var header = E("h2", {}, _("AdBlock-Fast - Status"));
|
||||
var statusTitle = E(
|
||||
"label",
|
||||
{ class: "cbi-value-title" },
|
||||
_("Service Status")
|
||||
);
|
||||
if (reply.status.version) {
|
||||
text += _("Version %s").format(reply.status.version) + " - ";
|
||||
switch (reply.status.status) {
|
||||
case "statusSuccess":
|
||||
text += statusTable[reply.status.status] + ".";
|
||||
text +=
|
||||
"<br />" +
|
||||
_("Blocking %s domains (with %s).").format(
|
||||
reply.status.entries,
|
||||
reply.status.dns
|
||||
);
|
||||
if (reply.status.outputGzipExists) {
|
||||
text += "<br />" + _("Compressed cache file created.");
|
||||
}
|
||||
if (reply.status.force_dns_active) {
|
||||
text += "<br />" + _("Force DNS ports:");
|
||||
reply.status.force_dns_ports.forEach((element) => {
|
||||
text += " " + element;
|
||||
});
|
||||
text += ".";
|
||||
}
|
||||
break;
|
||||
case "statusStopped":
|
||||
if (reply.status.enabled) {
|
||||
text += statusTable[reply.status.status] + ".";
|
||||
} else {
|
||||
text +=
|
||||
statusTable[reply.status.status] +
|
||||
" (" +
|
||||
_("Disabled") +
|
||||
").";
|
||||
}
|
||||
if (reply.status.outputCacheExists) {
|
||||
text += "<br />" + _("Cache file found.");
|
||||
} else if (reply.status.outputGzipExists) {
|
||||
text += "<br />" + _("Compressed cache file found.");
|
||||
}
|
||||
break;
|
||||
case "statusRestarting":
|
||||
case "statusForceReloading":
|
||||
case "statusDownloading":
|
||||
case "statusProcessing":
|
||||
text += statusTable[reply.status.status] + "...";
|
||||
break;
|
||||
default:
|
||||
text += statusTable[reply.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 (reply.status.warnings && reply.status.warnings.length) {
|
||||
var warningTable = {
|
||||
warningExternalDnsmasqConfig: _(
|
||||
"Use of external dnsmasq config file detected, please set '%s' option to '%s'"
|
||||
).format("dns", "dnsmasq.conf"),
|
||||
warningMissingRecommendedPackages: _(
|
||||
"Some recommended packages are missing"
|
||||
),
|
||||
};
|
||||
var warningsTitle = E(
|
||||
"label",
|
||||
{ class: "cbi-value-title" },
|
||||
_("Service Warnings")
|
||||
);
|
||||
var text = "";
|
||||
reply.status.warnings.forEach((element) => {
|
||||
text +=
|
||||
warningTable[element.id].format(element.extra || " ") + "<br />";
|
||||
});
|
||||
var warningsText = E("div", {}, text);
|
||||
var warningsField = E(
|
||||
"div",
|
||||
{ class: "cbi-value-field" },
|
||||
warningsText
|
||||
);
|
||||
warningsDiv = E("div", { class: "cbi-value" }, [
|
||||
warningsTitle,
|
||||
warningsField,
|
||||
]);
|
||||
}
|
||||
|
||||
var errorsDiv = [];
|
||||
if (reply.status.errors && reply.status.errors.length) {
|
||||
var errorTable = {
|
||||
errorConfigValidationFail: _(
|
||||
"Config (%s) validation failure!"
|
||||
).format("/etc/config/" + pkg.Name),
|
||||
errorServiceDisabled: _("%s is currently disabled").format(
|
||||
pkg.Name
|
||||
),
|
||||
errorNoDnsmasqIpset: _(
|
||||
"The dnsmasq ipset support is enabled, but dnsmasq is either not installed or installed dnsmasq does not support ipset"
|
||||
),
|
||||
errorNoIpset: _(
|
||||
"The dnsmasq ipset support is enabled, but ipset is either not installed or installed ipset does not support '%s' type"
|
||||
).format("hash:net"),
|
||||
errorNoDnsmasqNftset: _(
|
||||
"The dnsmasq nft set support is enabled, but dnsmasq is either not installed or installed dnsmasq does not support nft set"
|
||||
),
|
||||
errorNoNft: _(
|
||||
"The dnsmasq nft sets support is enabled, but nft is not installed"
|
||||
),
|
||||
errorNoWanGateway: _(
|
||||
"The %s failed to discover WAN gateway"
|
||||
).format(pkg.Name),
|
||||
errorOutputDirCreate: _("Failed to create directory for %s file"),
|
||||
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 %s"),
|
||||
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 = "";
|
||||
reply.status.errors.forEach((element) => {
|
||||
text +=
|
||||
errorTable[element.id].format(element.extra || " ") + "<br />";
|
||||
});
|
||||
text += _("Errors encountered, please check the %sREADME%s!").format(
|
||||
"<a href='" + pkg.URL + '" target="_blank">',
|
||||
"</a><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 (reply.status.enabled) {
|
||||
btn_enable.disabled = true;
|
||||
btn_disable.disabled = false;
|
||||
switch (reply.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 = false;
|
||||
btn_action.disabled = true;
|
||||
btn_stop.disabled = false;
|
||||
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 (reply.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,
|
||||
getFileUrlFilesizes: getFileUrlFilesizes,
|
||||
getPlatformSupport: getPlatformSupport,
|
||||
});
|
|
@ -0,0 +1,385 @@
|
|||
// Copyright 2023 MOSSDeF, Stan Grishin <stangri@melmac.ca>
|
||||
// This code wouldn't have been possible without help from:
|
||||
// - [@stokito](https://github.com/stokito)
|
||||
// - [@vsviridov](https://github.com/vsviridov)
|
||||
|
||||
"use strict";
|
||||
"require form";
|
||||
"require uci";
|
||||
"require view";
|
||||
"require adblock-fast.status as adb";
|
||||
|
||||
var pkg = {
|
||||
get Name() {
|
||||
return "adblock-fast";
|
||||
},
|
||||
get URL() {
|
||||
return "https://docs.openwrt.melmac.net/" + pkg.Name + "/";
|
||||
},
|
||||
humanFileSize: function (bytes, si = false, dp = 2) {
|
||||
return `%${si ? 1000 : 1024}.${dp ?? 0}mB`.format(bytes);
|
||||
},
|
||||
};
|
||||
|
||||
return view.extend({
|
||||
load: function () {
|
||||
return Promise.all([
|
||||
L.resolveDefault(adb.getFileUrlFilesizes(pkg.Name), {}),
|
||||
L.resolveDefault(adb.getPlatformSupport(pkg.Name), {}),
|
||||
uci.load(pkg.Name),
|
||||
uci.load("dhcp"),
|
||||
]);
|
||||
},
|
||||
|
||||
render: function (data) {
|
||||
var reply = {
|
||||
sizes: (data[0] && data[0][pkg.Name] && data[0][pkg.Name]["sizes"]) || [],
|
||||
platform: (data[1] && data[1][pkg.Name]) || {
|
||||
ipset_installed: false,
|
||||
nft_installed: false,
|
||||
dnsmasq_installed: false,
|
||||
unbound_installed: false,
|
||||
dnsmasq_ipset_support: false,
|
||||
dnsmasq_nftset_support: false,
|
||||
leds: [],
|
||||
},
|
||||
};
|
||||
var status, m, s1, s2, s3, o;
|
||||
|
||||
status = new adb.status();
|
||||
m = new form.Map(pkg.Name, _("AdBlock-Fast - Configuration"));
|
||||
s1 = m.section(form.NamedSection, "config", pkg.Name);
|
||||
s1.tab("tab_basic", _("Basic Configuration"));
|
||||
s1.tab("tab_advanced", _("Advanced Configuration"));
|
||||
|
||||
var text = _(
|
||||
"DNS resolution option, see the %sREADME%s for details."
|
||||
).format(
|
||||
'<a href="' + pkg.URL + '#dns-resolver-option" target="_blank">',
|
||||
"</a>"
|
||||
);
|
||||
if (!reply.platform.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 (!reply.platform.dnsmasq_ipset_support) {
|
||||
text +=
|
||||
"<br />" +
|
||||
_("Please note that %s is not supported on this system.").format(
|
||||
"<i>dnsmasq.ipset</i>"
|
||||
);
|
||||
}
|
||||
if (!reply.platform.dnsmasq_nftset_support) {
|
||||
text +=
|
||||
"<br />" +
|
||||
_("Please note that %s is not supported on this system.").format(
|
||||
"<i>dnsmasq.nftset</i>"
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!reply.platform.unbound_installed) {
|
||||
text =
|
||||
text +
|
||||
"<br />" +
|
||||
_("Please note that %s is not supported on this system.").format(
|
||||
"<i>unbound.adb_list</i>"
|
||||
);
|
||||
}
|
||||
|
||||
o = s1.taboption(
|
||||
"tab_basic",
|
||||
form.ListValue,
|
||||
"dns",
|
||||
_("DNS Service"),
|
||||
text
|
||||
);
|
||||
if (reply.platform.dnsmasq_installed) {
|
||||
o.value("dnsmasq.addnhosts", _("dnsmasq additional hosts"));
|
||||
o.value("dnsmasq.conf", _("dnsmasq config"));
|
||||
if (reply.platform.dnsmasq_ipset_support) {
|
||||
o.value("dnsmasq.ipset", _("dnsmasq ipset"));
|
||||
}
|
||||
if (reply.platform.dnsmasq_nftset_support) {
|
||||
o.value("dnsmasq.nftset", _("dnsmasq nft set"));
|
||||
}
|
||||
o.value("dnsmasq.servers", _("dnsmasq servers file"));
|
||||
}
|
||||
if (reply.platform.unbound_installed) {
|
||||
o.value("unbound.adb_list", _("unbound adblock list"));
|
||||
}
|
||||
o.default = ("dnsmasq.servers", _("dnsmasq servers file"));
|
||||
|
||||
o = s1.taboption(
|
||||
"tab_basic",
|
||||
form.Value,
|
||||
"dnsmasq_config_file_url",
|
||||
_("Dnsmasq Config File URL"),
|
||||
_(
|
||||
"URL to the external dnsmasq config file, see the %sREADME%s for details."
|
||||
).format(
|
||||
'<a href="' + pkg.URL + '#dnsmasq_config_file_url" target="_blank">',
|
||||
"</a>"
|
||||
)
|
||||
);
|
||||
o.depends("dns", "dnsmasq.conf");
|
||||
|
||||
o = s1.taboption(
|
||||
"tab_basic",
|
||||
form.ListValue,
|
||||
"dnsmasq_instance",
|
||||
_("Use AdBlocking on the dnsmasq instance(s)"),
|
||||
_(
|
||||
"You can limit the AdBlocking to a specific dnsmasq instance(s) (%smore information%s)."
|
||||
).format(
|
||||
'<a href="' + pkg.URL + "#dnsmasq_instance" + '" target="_blank">',
|
||||
"</a>"
|
||||
)
|
||||
);
|
||||
o.value("*", _("AdBlock on all instances"));
|
||||
var sections = uci.sections("dhcp", "dnsmasq");
|
||||
sections.forEach((element) => {
|
||||
var description;
|
||||
var key;
|
||||
if (element[".name"] === uci.resolveSID("dhcp", element[".name"])) {
|
||||
key = element[".index"];
|
||||
description = "dnsmasq[" + element[".index"] + "]";
|
||||
} else {
|
||||
key = element[".name"];
|
||||
description = element[".name"];
|
||||
}
|
||||
o.value(key, _("AdBlock on %s only").format(description));
|
||||
});
|
||||
o.value("-", _("No AdBlock on dnsmasq"));
|
||||
o.default = "*";
|
||||
o.depends("dns", "dnsmasq.addnhosts");
|
||||
o.depends("dns", "dnsmasq.servers");
|
||||
o.retain = true;
|
||||
|
||||
o = s1.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"));
|
||||
|
||||
o = s1.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"));
|
||||
|
||||
if (reply.platform.leds.length) {
|
||||
o = s1.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"));
|
||||
reply.platform.leds.forEach((element) => {
|
||||
o.value(element);
|
||||
});
|
||||
}
|
||||
o = s1.taboption(
|
||||
"tab_advanced",
|
||||
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 = s1.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.retain = true;
|
||||
|
||||
o = s1.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 = "20";
|
||||
o.datatype = "range(1,60)";
|
||||
|
||||
o = s1.taboption(
|
||||
"tab_advanced",
|
||||
form.Value,
|
||||
"curl_max_file_size",
|
||||
_("Curl maximum file size (in bytes)"),
|
||||
_(
|
||||
"If curl is installed and detected, it would not download files bigger than this."
|
||||
)
|
||||
);
|
||||
o.default = "";
|
||||
o.datatype = "uinteger";
|
||||
o.rmempty = true;
|
||||
|
||||
o = s1.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 = s1.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 = s1.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 = s1.taboption(
|
||||
"tab_advanced",
|
||||
form.Value,
|
||||
"compressed_cache_dir",
|
||||
_("Directory for compressed cache file"),
|
||||
_(
|
||||
"Directory for compressed cache file of block-list in the persistent memory."
|
||||
)
|
||||
);
|
||||
o.datatype = "string";
|
||||
o.rmempty = true;
|
||||
o.default = "/etc";
|
||||
o.depends("compressed_cache", "1");
|
||||
o.retain = true;
|
||||
|
||||
o = s1.taboption(
|
||||
"tab_advanced",
|
||||
form.ListValue,
|
||||
"debug",
|
||||
_("Enable Debugging"),
|
||||
_("Enables debug output to /tmp/adblock-fast.log.")
|
||||
);
|
||||
o.value("0", _("Disable Debugging"));
|
||||
o.value("1", _("Enable Debugging"));
|
||||
o.default = ("0", _("Disable Debugging"));
|
||||
|
||||
s2 = m.section(
|
||||
form.NamedSection,
|
||||
"config",
|
||||
"adblock-fast",
|
||||
_("AdBlock-Fast - Allowed and Blocked Domains")
|
||||
);
|
||||
o.addremove = true;
|
||||
o.rmempty = true;
|
||||
o = s2.option(
|
||||
form.DynamicList,
|
||||
"allowed_domain",
|
||||
_("Allowed Domains"),
|
||||
_("Individual domains to be allowed.")
|
||||
);
|
||||
|
||||
o.addremove = true;
|
||||
o = s2.option(
|
||||
form.DynamicList,
|
||||
"blocked_domain",
|
||||
_("Blocked Domains"),
|
||||
_("Individual domains to be blocked.")
|
||||
);
|
||||
o.addremove = true;
|
||||
|
||||
s3 = m.section(
|
||||
form.GridSection,
|
||||
"file_url",
|
||||
_("AdBlock-Fast - Allowed and Blocked Lists URLs"),
|
||||
_("URLs to file(s) containing lists to be allowed or blocked.")
|
||||
);
|
||||
s3.rowcolors = true;
|
||||
s3.sortable = true;
|
||||
s3.anonymous = true;
|
||||
s3.addremove = true;
|
||||
o = s3.option(form.DummyValue, "_size", "Size");
|
||||
o.modalonly = false;
|
||||
o.cfgvalue = function (section_id) {
|
||||
let url = uci.get(pkg.Name, section_id, "url");
|
||||
let ret = _("Unknown");
|
||||
reply.sizes.forEach((element) => {
|
||||
if (element.url === url) {
|
||||
ret = element.size === 0 ? ret : pkg.humanFileSize(element.size);
|
||||
}
|
||||
});
|
||||
return _("Size: %s").format(ret);
|
||||
};
|
||||
o = s3.option(form.Flag, "enabled", _("Enable"));
|
||||
o.editable = true;
|
||||
o.default = "1";
|
||||
o = s3.option(form.ListValue, "action", _("Action"));
|
||||
o.value("allow", _("Allow"));
|
||||
o.value("block", _("Block"));
|
||||
o.default = "block";
|
||||
o = s3.option(form.Value, "url", _("URL"));
|
||||
o.optional = false;
|
||||
|
||||
return Promise.all([status.render(), m.render()]);
|
||||
},
|
||||
});
|
586
applications/luci-app-adblock-fast/po/templates/adblock-fast.pot
Normal file
586
applications/luci-app-adblock-fast/po/templates/adblock-fast.pot
Normal file
|
@ -0,0 +1,586 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:223
|
||||
msgid "%s is currently disabled"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:106
|
||||
msgid "%s is not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:376
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:118
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/root/usr/share/luci/menu.d/luci-app-adblock-fast.json:3
|
||||
msgid "AdBlock Fast"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:168
|
||||
msgid "AdBlock on %s only"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:156
|
||||
msgid "AdBlock on all instances"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:331
|
||||
msgid "AdBlock-Fast - Allowed and Blocked Domains"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:354
|
||||
msgid "AdBlock-Fast - Allowed and Blocked Lists URLs"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:50
|
||||
msgid "AdBlock-Fast - Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:121
|
||||
msgid "AdBlock-Fast - Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:233
|
||||
msgid "Add IPv6 entries"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:230
|
||||
msgid "Add IPv6 entries to block-list."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:53
|
||||
msgid "Advanced Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:377
|
||||
msgid "Allow"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:338
|
||||
msgid "Allowed Domains"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:294
|
||||
msgid ""
|
||||
"Attempt to create a compressed cache of block-list in the persistent memory."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:218
|
||||
msgid "Automatic Config Update"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:52
|
||||
msgid "Basic Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:378
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:346
|
||||
msgid "Blocked Domains"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:134
|
||||
msgid "Blocking %s domains (with %s)."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:160
|
||||
msgid "Cache file found."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:139
|
||||
msgid "Compressed cache file created."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:162
|
||||
msgid "Compressed cache file found."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:221
|
||||
msgid "Config (%s) validation failure!"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:192
|
||||
msgid "Controls system log and console output verbosity."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:267
|
||||
msgid "Curl download retry"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:254
|
||||
msgid "Curl maximum file size (in bytes)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:111
|
||||
msgid "DNS Service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:56
|
||||
msgid "DNS resolution option, see the %sREADME%s for details."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:305
|
||||
msgid "Directory for compressed cache file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:307
|
||||
msgid ""
|
||||
"Directory for compressed cache file of block-list in the persistent memory."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:400
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:221
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:223
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:323
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:325
|
||||
msgid "Disable Debugging"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:156
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:394
|
||||
msgid "Disabling %s service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:134
|
||||
msgid "Dnsmasq Config File URL"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:232
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:236
|
||||
msgid "Do not add IPv6 entries"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:297
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:299
|
||||
msgid "Do not store compressed cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:284
|
||||
msgid "Do not use simultaneous processing"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:244
|
||||
msgid "Download time-out (in seconds)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:114
|
||||
msgid "Downloading lists"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:381
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:222
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:373
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:320
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:324
|
||||
msgid "Enable Debugging"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:321
|
||||
msgid "Enables debug output to /tmp/adblock-fast.log."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:375
|
||||
msgid "Enabling %s service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:115
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:289
|
||||
msgid "Errors encountered, please check the %sREADME%s!"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:117
|
||||
msgid "Fail"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:246
|
||||
msgid "Failed to access shared memory"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:242
|
||||
msgid "Failed to create '%s' file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:264
|
||||
msgid "Failed to create block-list or restart DNS resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:255
|
||||
msgid "Failed to create compressed cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:241
|
||||
msgid "Failed to create directory for %s file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:276
|
||||
msgid "Failed to create output/cache/gzip file directory"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:271
|
||||
msgid "Failed to download %s"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:269
|
||||
msgid "Failed to download Config Update file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:250
|
||||
msgid "Failed to format data file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:259
|
||||
msgid "Failed to move '%s' to '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:252
|
||||
msgid "Failed to move temporary data file to '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:248
|
||||
msgid "Failed to optimize data file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:273
|
||||
msgid "Failed to parse"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:272
|
||||
msgid "Failed to parse Config Update file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:249
|
||||
msgid "Failed to process allow-list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:267
|
||||
msgid "Failed to reload/restart DNS resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:257
|
||||
msgid "Failed to remove temporary files"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:245
|
||||
msgid "Failed to restart/reload DNS resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:247
|
||||
msgid "Failed to sort data file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:266
|
||||
msgid "Failed to stop %s"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:258
|
||||
msgid "Failed to unpack compressed cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:142
|
||||
msgid "Force DNS ports:"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:343
|
||||
msgid "Force Re-Download"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:113
|
||||
msgid "Force Reloading"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:180
|
||||
msgid "Force Router DNS"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:184
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:185
|
||||
msgid "Force Router DNS server to all local devices"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:337
|
||||
msgid "Force re-downloading %s block lists"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:181
|
||||
msgid "Forces Router DNS use on local devices, also known as DNS Hijacking."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/root/usr/share/rpcd/acl.d/luci-app-adblock-fast.json:3
|
||||
msgid "Grant UCI and file access for luci-app-adblock-fast"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:229
|
||||
msgid "IPv6 Support"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:256
|
||||
msgid ""
|
||||
"If curl is installed and detected, it would not download files bigger than "
|
||||
"this."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:269
|
||||
msgid ""
|
||||
"If curl is installed and detected, it would retry download this many times "
|
||||
"on timeout/fail."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:339
|
||||
msgid "Individual domains to be allowed."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:347
|
||||
msgid "Individual domains to be blocked."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:204
|
||||
msgid "LED to indicate status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:281
|
||||
msgid ""
|
||||
"Launch all lists downloads and processing simultaneously, reducing service "
|
||||
"start time."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:183
|
||||
msgid "Let local devices use their own DNS servers if set"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:170
|
||||
msgid "No AdBlock on dnsmasq"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:274
|
||||
msgid "No HTTPS/SSL support on device"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:176
|
||||
msgid "Not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:191
|
||||
msgid "Output Verbosity Setting"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:219
|
||||
msgid "Perform config update before downloading the block/allow-lists."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:206
|
||||
msgid "Pick the LED not already used in %sSystem LED Configuration%s."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:64
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:69
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:74
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:79
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:86
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:93
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:102
|
||||
msgid "Please note that %s is not supported on this system."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:111
|
||||
msgid "Processing lists"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:112
|
||||
msgid "Restarting"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:437
|
||||
msgid "Service Control"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:282
|
||||
msgid "Service Errors"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:125
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:198
|
||||
msgid "Service Warnings"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:279
|
||||
msgid "Simultaneous processing"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:371
|
||||
msgid "Size: %s"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:195
|
||||
msgid "Some output"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:192
|
||||
msgid "Some recommended packages are missing"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:324
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:110
|
||||
msgid "Starting"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:318
|
||||
msgid "Starting %s service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:362
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:245
|
||||
msgid "Stop the download if it is stalled for set number of seconds."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:109
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:356
|
||||
msgid "Stopping %s service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:298
|
||||
msgid "Store compressed cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:292
|
||||
msgid "Store compressed cache file on router"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:194
|
||||
msgid "Suppress output"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:239
|
||||
msgid "The %s failed to discover WAN gateway"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:227
|
||||
msgid ""
|
||||
"The dnsmasq ipset support is enabled, but dnsmasq is either not installed or "
|
||||
"installed dnsmasq does not support ipset"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:230
|
||||
msgid ""
|
||||
"The dnsmasq ipset support is enabled, but ipset is either not installed or "
|
||||
"installed ipset does not support '%s' type"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:233
|
||||
msgid ""
|
||||
"The dnsmasq nft set support is enabled, but dnsmasq is either not installed "
|
||||
"or installed dnsmasq does not support nft set"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:236
|
||||
msgid "The dnsmasq nft sets support is enabled, but nft is not installed"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:380
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:136
|
||||
msgid ""
|
||||
"URL to the external dnsmasq config file, see the %sREADME%s for details."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:355
|
||||
msgid "URLs to file(s) containing lists to be allowed or blocked."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:365
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:148
|
||||
msgid "Use AdBlocking on the dnsmasq instance(s)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:189
|
||||
msgid ""
|
||||
"Use of external dnsmasq config file detected, please set '%s' option to '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:285
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:286
|
||||
msgid "Use simultaneous processing"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:196
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:197
|
||||
msgid "Verbose output"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:128
|
||||
msgid "Version %s"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:116
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:150
|
||||
msgid ""
|
||||
"You can limit the AdBlocking to a specific dnsmasq instance(s) (%smore "
|
||||
"information%s)."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:115
|
||||
msgid "dnsmasq additional hosts"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:116
|
||||
msgid "dnsmasq config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:118
|
||||
msgid "dnsmasq ipset"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:121
|
||||
msgid "dnsmasq nft set"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:123
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:128
|
||||
msgid "dnsmasq servers file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:209
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:126
|
||||
msgid "unbound adblock list"
|
||||
msgstr ""
|
|
@ -1,21 +1,22 @@
|
|||
#!/bin/sh
|
||||
# Copyright 2022 Stan Grishin (stangri@melmac.ca)
|
||||
# Copyright 2023 MOSSDeF, 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 setInitAction '{"name": "simple-adblock", "action": "start" }'
|
||||
# ubus -S call luci.simple-adblock setInitAction '{"name": "simple-adblock", "action": "stop" }'
|
||||
# ubus -S call luci.simple-adblock getPlatformSupport '{"name": "simple-adblock" }'
|
||||
# ubus -v list luci.adblock-fast
|
||||
# ubus -S call luci.adblock-fast getFileUrlFilesizes '{"name": "adblock-fast" }'
|
||||
# ubus -S call luci.adblock-fast getInitList '{"name": "adblock-fast" }'
|
||||
# ubus -S call luci.adblock-fast getInitStatus '{"name": "adblock-fast" }'
|
||||
# ubus -S call luci.adblock-fast getPlatformSupport '{"name": "adblock-fast" }'
|
||||
# ubus -S call luci.adblock-fast setInitAction '{"name": "adblock-fast", "action": "start" }'
|
||||
# ubus -S call luci.adblock-fast setInitAction '{"name": "adblock-fast", "action": "stop" }'
|
||||
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/network.sh
|
||||
. /usr/share/libubox/jshn.sh
|
||||
|
||||
readonly packageName="simple-adblock"
|
||||
readonly packageName="adblock-fast"
|
||||
readonly dnsmasqAddnhostsFile="/var/run/${packageName}/dnsmasq.addnhosts"
|
||||
readonly dnsmasqAddnhostsCache="/var/run/${packageName}/dnsmasq.addnhosts.cache"
|
||||
readonly dnsmasqAddnhostsGzip="${packageName}.dnsmasq.addnhosts.gz"
|
||||
|
@ -34,7 +35,7 @@ readonly dnsmasqServersGzip="${packageName}.dnsmasq.servers.gz"
|
|||
readonly unboundFile="/var/lib/unbound/adb_list.${packageName}"
|
||||
readonly unboundCache="/var/run/${packageName}/unbound.cache"
|
||||
readonly unboundGzip="${packageName}.unbound.gz"
|
||||
readonly jsonFile="/var/run/${packageName}/${packageName}.json"
|
||||
readonly jsonFile="/dev/shm/$packageName-status.json"
|
||||
|
||||
str_contains() { [ -n "$1" ] &&[ -n "$2" ] && [ "${1//$2}" != "$1" ]; }
|
||||
str_contains_word() { echo "$1" | grep -q -w "$2"; }
|
||||
|
@ -43,10 +44,12 @@ 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_int() { json_init; json_add_int "$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"; }
|
||||
is_present() { command -v "$1" >/dev/null 2>&1; }
|
||||
sanitize_dir() { [ -d "$(readlink -fn "$1")" ] && readlink -fn "$1"; }
|
||||
json() {
|
||||
# shellcheck disable=SC2034
|
||||
|
@ -68,6 +71,39 @@ json() {
|
|||
esac
|
||||
}
|
||||
|
||||
get_url_filesize() {
|
||||
local url="$1" size size_command
|
||||
[ -n "$url" ] || { print_json_int 'size' '0'; return 0; }
|
||||
is_present 'curl' || { print_json_int 'size' '0'; return 0; }
|
||||
size_command='curl --silent --insecure --fail --head --request GET'
|
||||
size="$($size_command "$url" | grep -i 'content-length:' | awk '{print $2}'; )"
|
||||
echo "$size"
|
||||
}
|
||||
|
||||
_get_file_url_size() {
|
||||
local url size
|
||||
config_get url "$1" 'url'
|
||||
config_get size "$1" 'size'
|
||||
[ -n "$size" ] || size="$(get_url_filesize "$url")"
|
||||
json_add_object
|
||||
json_add_string 'url' "$url"
|
||||
json_add_int 'size' "$size"
|
||||
json_close_object
|
||||
}
|
||||
|
||||
get_file_url_filesizes() {
|
||||
local name="$1" i
|
||||
json_init
|
||||
json_add_object "$name"
|
||||
json_add_array 'sizes'
|
||||
config_load "$name"
|
||||
config_foreach _get_file_url_size 'file_url'
|
||||
json_close_array
|
||||
json_close_object
|
||||
json_dump
|
||||
json_cleanup
|
||||
}
|
||||
|
||||
get_init_list() {
|
||||
local name
|
||||
name="$(basename "$1")"
|
||||
|
@ -123,9 +159,6 @@ get_init_status() {
|
|||
else
|
||||
compressed_cache_dir="/etc"
|
||||
fi
|
||||
errors="$(ubus_get_status errors)"
|
||||
warnings="$(ubus_get_status warnings)"
|
||||
ports="$(ubus_get_ports)"
|
||||
if [ -n "$(uci -q get $packageName.config.dnsmasq_config_file_url)" ]; then
|
||||
dns="dnsmasq.conf"
|
||||
else
|
||||
|
@ -178,6 +211,7 @@ get_init_status() {
|
|||
json_add_boolean 'running' '0'
|
||||
fi
|
||||
json_add_string 'version' "$(get_version "$name")"
|
||||
errors="$(ubus_get_status errors)"
|
||||
json_add_array 'errors'
|
||||
if [ -n "$errors" ]; then
|
||||
for i in $errors; do
|
||||
|
@ -195,6 +229,7 @@ get_init_status() {
|
|||
done
|
||||
fi
|
||||
json_close_array
|
||||
warnings="$(ubus_get_status warnings)"
|
||||
json_add_array 'warnings'
|
||||
if [ -n "$warnings" ]; then
|
||||
for i in $warnings; do
|
||||
|
@ -213,6 +248,7 @@ get_init_status() {
|
|||
fi
|
||||
json_close_array
|
||||
|
||||
ports="$(ubus_get_ports)"
|
||||
if [ -n "$ports" ]; then
|
||||
json_add_boolean 'force_dns_active' '1'
|
||||
json_add_array 'force_dns_ports'
|
||||
|
@ -313,6 +349,9 @@ get_platform_support() {
|
|||
case "$1" in
|
||||
list)
|
||||
json_init
|
||||
json_add_object "getFileUrlFilesizes"
|
||||
json_add_string 'name' 'name'
|
||||
json_close_object
|
||||
json_add_object "getInitList"
|
||||
json_add_string 'name' 'name'
|
||||
json_close_object
|
||||
|
@ -331,6 +370,13 @@ case "$1" in
|
|||
;;
|
||||
call)
|
||||
case "$2" in
|
||||
getFileUrlFilesizes)
|
||||
read -r input
|
||||
json_load "$input"
|
||||
json_get_var name 'name'
|
||||
json_cleanup
|
||||
get_file_url_filesizes "$name"
|
||||
;;
|
||||
getInitList)
|
||||
read -r input
|
||||
json_load "$input"
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"admin/services/adblock-fast": {
|
||||
"title": "AdBlock Fast",
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "adblock-fast/overview"
|
||||
},
|
||||
"depends": {
|
||||
"acl": [
|
||||
"luci-app-adblock-fast"
|
||||
],
|
||||
"uci": {
|
||||
"adblock-fast": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"luci-app-adblock-fast": {
|
||||
"description": "Grant UCI and file access for luci-app-adblock-fast",
|
||||
"read": {
|
||||
"file": {
|
||||
"/dev/shm/adblock-fast-status.json": [ "list", "read" ]
|
||||
},
|
||||
"ubus": {
|
||||
"luci.adblock-fast": [
|
||||
"getFileUrlFilesizes",
|
||||
"getInitList",
|
||||
"getInitStatus",
|
||||
"getPlatformSupport"
|
||||
]
|
||||
},
|
||||
"uci": [
|
||||
"adblock-fast",
|
||||
"dhcp"
|
||||
]
|
||||
},
|
||||
"write": {
|
||||
"uci": [
|
||||
"adblock-fast"
|
||||
],
|
||||
"ubus": {
|
||||
"luci.adblock-fast": [
|
||||
"setInitAction"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,323 +0,0 @@
|
|||
// 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(pkg.Name), {}),
|
||||
]).then(function (data) {
|
||||
var replyStatus = data[0];
|
||||
var text ="";
|
||||
var reply = replyStatus[pkg.Name];
|
||||
var outputFile = reply.outputFile;
|
||||
var outputCache = reply.outputCache;
|
||||
var statusTable = {
|
||||
statusNoInstall: _("%s is not installed or not found").format(pkg.Name),
|
||||
statusStopped: _("Stopped"),
|
||||
statusStarting: _("Starting"),
|
||||
statusProcessing: _("Processing lists"),
|
||||
statusRestarting: _("Restarting"),
|
||||
statusForceReloading: _("Force Reloading"),
|
||||
statusDownloading: _("Downloading lists"),
|
||||
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 (reply.version) {
|
||||
text += _("Version %s").format(reply.version) + " - ";
|
||||
switch (reply.status) {
|
||||
case 'statusSuccess':
|
||||
text += statusTable[reply.status] + ".";
|
||||
text += "<br />" + _("Blocking %s domains (with %s).").format(reply.entries, reply.dns);
|
||||
if (reply.outputGzipExists) {
|
||||
text += "<br />" + _("Compressed cache file created.");
|
||||
}
|
||||
if (reply.force_dns_active) {
|
||||
text += "<br />" + _("Force DNS ports:");
|
||||
reply.force_dns_ports.forEach(element => {
|
||||
text += " " + element;
|
||||
});
|
||||
text += ".";
|
||||
}
|
||||
break;
|
||||
case 'statusStopped':
|
||||
if (reply.enabled) {
|
||||
text += statusTable[reply.status] + ".";
|
||||
}
|
||||
else {
|
||||
text += statusTable[reply.status] + _("disabled") + "."
|
||||
}
|
||||
if (reply.outputCacheExists) {
|
||||
text += "<br />" + _("Cache file found.");
|
||||
}
|
||||
else if (reply.outputGzipExists) {
|
||||
text += "<br />" + _("Compressed cache file found.");
|
||||
}
|
||||
break;
|
||||
case 'statusRestarting':
|
||||
case 'statusForceReloading':
|
||||
case 'statusDownloading':
|
||||
case 'statusProcessing':
|
||||
text += statusTable[reply.status] + "...";
|
||||
break;
|
||||
default:
|
||||
text += statusTable[reply.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 (reply.warnings && reply.warnings.length) {
|
||||
var warningTable = {
|
||||
warningExternalDnsmasqConfig: _("use of external dnsmasq config file detected, please set '%s' option to '%s'").format("dns", "dnsmasq.conf"),
|
||||
warningMissingRecommendedPackages: _("some recommended packages are missing")
|
||||
}
|
||||
var warningsTitle = E('label', { class: 'cbi-value-title' }, _("Service Warnings"));
|
||||
var text = "";
|
||||
(reply.warnings).forEach(element => {
|
||||
text += (warningTable[element.id]).format(element.extra || ' ') + "<br />";
|
||||
});
|
||||
var warningsText = E('div', {}, text);
|
||||
var warningsField = E('div', { class: 'cbi-value-field' }, warningsText);
|
||||
warningsDiv = E('div', { class: 'cbi-value' }, [warningsTitle, warningsField]);
|
||||
}
|
||||
|
||||
var errorsDiv = [];
|
||||
if (reply.errors && reply.errors.length) {
|
||||
var errorTable = {
|
||||
errorConfigValidationFail: _("config (%s) validation failure!").format('/etc/config/' + pkg.Name),
|
||||
errorServiceDisabled: _("%s is currently disabled").format(pkg.Name),
|
||||
errorNoDnsmasqIpset: _("dnsmasq ipset support is enabled, but dnsmasq is either not installed or installed dnsmasq does not support ipset"),
|
||||
errorNoIpset: _("dnsmasq ipset support is enabled, but ipset is either not installed or installed ipset does not support '%s' type").format("hash:net"),
|
||||
errorNoDnsmasqNftset: _("dnsmasq nft set support is enabled, but dnsmasq is either not installed or installed dnsmasq does not support nft set"),
|
||||
errorNoNft: _("dnsmasq nft sets support is enabled, but nft is not installed"),
|
||||
errorNoWanGateway: _("the %s failed to discover WAN gateway").format(pkg.Name),
|
||||
errorOutputDirCreate: _("failed to create directory for %s file"),
|
||||
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 = "";
|
||||
(reply.errors).forEach(element => {
|
||||
text += (errorTable[element.id]).format(element.extra || ' ') + "<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 (reply.enabled) {
|
||||
btn_enable.disabled = true;
|
||||
btn_disable.disabled = false;
|
||||
switch (reply.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 = false;
|
||||
btn_action.disabled = true;
|
||||
btn_stop.disabled = false;
|
||||
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 (reply.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
|
||||
});
|
|
@ -1,187 +0,0 @@
|
|||
// 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(pkg.Name), {}),
|
||||
]).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);
|
||||
});
|
||||
}
|
||||
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 += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.ipset</i>");
|
||||
}
|
||||
if (!(replyPlatform[pkg.Name].dnsmasq_nftset_support)) {
|
||||
text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.nftset</i>");
|
||||
}
|
||||
}
|
||||
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 = "20";
|
||||
o.datatype = "range(1,60)";
|
||||
|
||||
o = s.taboption("tab_advanced", form.Value, "curl_max_file_size", _("Curl maximum file size (in bytes)"),
|
||||
_("If curl is installed and detected, it would not download files bigger than this."));
|
||||
o.default = "";
|
||||
o.datatype = "uinteger";
|
||||
o.rmempty = true;
|
||||
|
||||
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.Value, "compressed_cache_dir", _("Directory for compressed cache file"),
|
||||
_("Directory for compressed cache file of block-list in the persistent memory."));
|
||||
o.datatype = 'string';
|
||||
o.rmempty = true;
|
||||
o.default = ("/etc");
|
||||
o.depends('compressed_cache', '1');
|
||||
|
||||
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.Value, "dnsmasq_config_file_url", _("Dnsmasq Config File URL"),
|
||||
_("URL to the external dnsmasq config file, see the %sREADME%s for details.")
|
||||
.format("<a href=\"" + pkg.URL + "#dnsmasq_config_file_url\" target=\"_blank\">", "</a>"));
|
||||
o.addremove = true;
|
||||
o.rmempty = true;
|
||||
o = s.option(form.DynamicList, "allowed_domain", _("Allowed Domains"),
|
||||
_("Individual domains to be allowed."));
|
||||
o.depends('dnsmasq_config_file_url', '');
|
||||
o.addremove = true;
|
||||
o = s.option(form.DynamicList, "allowed_domains_url", _("Allowed Domain URLs"),
|
||||
_("URLs to lists of domains to be allowed."));
|
||||
o.depends('dnsmasq_config_file_url', '');
|
||||
o.addremove = true;
|
||||
o = s.option(form.DynamicList, "blocked_adblockplus_url", _("Blocked AdBlockPlus-style URLs"),
|
||||
_("URLs to lists of AdBlockPlus-style formatted domains to be blocked."));
|
||||
o.depends('dnsmasq_config_file_url', '');
|
||||
o.addremove = true;
|
||||
o = s.option(form.DynamicList, "blocked_domain", _("Blocked Domains"),
|
||||
_("Individual domains to be blocked."));
|
||||
o.depends('dnsmasq_config_file_url', '');
|
||||
o.addremove = true;
|
||||
o = s.option(form.DynamicList, "blocked_domains_url", _("Blocked Domain URLs"),
|
||||
_("URLs to lists of domains to be blocked."));
|
||||
o.depends('dnsmasq_config_file_url', '');
|
||||
o.addremove = true;
|
||||
o = s.option(form.DynamicList, "blocked_hosts_url", _("Blocked Hosts URLs"),
|
||||
_("URLs to lists of hosts to be blocked."));
|
||||
o.depends('dnsmasq_config_file_url', '');
|
||||
o.addremove = true;
|
||||
|
||||
return Promise.all([status.render(), m.render()]);
|
||||
})
|
||||
}
|
||||
});
|
|
@ -1,559 +0,0 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:174
|
||||
msgid "%s is currently disabled"
|
||||
msgstr ""
|
||||
|
||||
#: 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/htdocs/luci-static/resources/simple-adblock/status.js:100
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:105
|
||||
msgid "Add IPv6 entries"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:103
|
||||
msgid "Add IPv6 entries to block-list."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:33
|
||||
msgid "Advanced Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:163
|
||||
msgid "Allowed Domain URLs"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:159
|
||||
msgid "Allowed Domains"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:153
|
||||
msgid "Allowed and Blocked Lists Management"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:134
|
||||
msgid ""
|
||||
"Attempt to create a compressed cache of block-list in the persistent memory."
|
||||
msgstr ""
|
||||
|
||||
#: 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/htdocs/luci-static/resources/view/simple-adblock/overview.js:32
|
||||
msgid "Basic Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:167
|
||||
msgid "Blocked AdBlockPlus-style URLs"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:175
|
||||
msgid "Blocked Domain URLs"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:171
|
||||
msgid "Blocked Domains"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:179
|
||||
msgid "Blocked Hosts URLs"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:110
|
||||
msgid "Blocking %s domains (with %s)."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:130
|
||||
msgid "Cache file found."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:112
|
||||
msgid "Compressed cache file created."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:133
|
||||
msgid "Compressed cache file found."
|
||||
msgstr ""
|
||||
|
||||
#: 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/htdocs/luci-static/resources/view/simple-adblock/overview.js:122
|
||||
msgid "Curl download retry"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:116
|
||||
msgid "Curl maximum file size (in bytes)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:85
|
||||
msgid "DNS Service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:64
|
||||
msgid "DNS resolution option, see the %sREADME%s for details."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:139
|
||||
msgid "Directory for compressed cache file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:140
|
||||
msgid ""
|
||||
"Directory for compressed cache file of block-list in the persistent memory."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:269
|
||||
#: 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/htdocs/luci-static/resources/view/simple-adblock/overview.js:148
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:150
|
||||
msgid "Disable Debugging"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:265
|
||||
msgid "Disabling %s service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:154
|
||||
msgid "Dnsmasq Config File URL"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:104
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:108
|
||||
msgid "Do not add IPv6 entries"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:135
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:137
|
||||
msgid "Do not store compressed cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:129
|
||||
msgid "Do not use simultaneous processing"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:111
|
||||
msgid "Download time-out (in seconds)"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:96
|
||||
msgid "Downloading lists"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:258
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:38
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:146
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:149
|
||||
msgid "Enable Debugging"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:147
|
||||
msgid "Enables debug output to /tmp/simple-adblock.log."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:254
|
||||
msgid "Enabling %s service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:97
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:99
|
||||
msgid "Fail"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:115
|
||||
msgid "Force DNS ports:"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:236
|
||||
msgid "Force Re-Download"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:95
|
||||
msgid "Force Reloading"
|
||||
msgstr ""
|
||||
|
||||
#: 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/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/htdocs/luci-static/resources/simple-adblock/status.js:232
|
||||
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 ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/root/usr/share/rpcd/acl.d/luci-app-simple-adblock.json:3
|
||||
msgid "Grant UCI and file access for luci-app-simple-adblock"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:102
|
||||
msgid "IPv6 Support"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:117
|
||||
msgid ""
|
||||
"If curl is installed and detected, it would not download files bigger than "
|
||||
"this."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:123
|
||||
msgid ""
|
||||
"If curl is installed and detected, it would retry download this many times "
|
||||
"on timeout/fail."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:160
|
||||
msgid "Individual domains to be allowed."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:172
|
||||
msgid "Individual domains to be blocked."
|
||||
msgstr ""
|
||||
|
||||
#: 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/htdocs/luci-static/resources/view/simple-adblock/overview.js:128
|
||||
msgid ""
|
||||
"Launch all lists downloads and processing simultaneously, reducing service "
|
||||
"start time."
|
||||
msgstr ""
|
||||
|
||||
#: 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/htdocs/luci-static/resources/simple-adblock/status.js:148
|
||||
msgid "Not installed or not found"
|
||||
msgstr ""
|
||||
|
||||
#: 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/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/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/htdocs/luci-static/resources/view/simple-adblock/overview.js:67
|
||||
#: 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:74
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:77
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:81
|
||||
msgid "Please note that %s is not supported on this system."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:93
|
||||
msgid "Processing lists"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:94
|
||||
msgid "Restarting"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:303
|
||||
msgid "Service Control"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:203
|
||||
msgid "Service Errors"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:104
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:160
|
||||
msgid "Service Warnings"
|
||||
msgstr ""
|
||||
|
||||
#: 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/htdocs/luci-static/resources/view/simple-adblock/overview.js:30
|
||||
msgid "Simple AdBlock - Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:103
|
||||
msgid "Simple AdBlock - Status"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:127
|
||||
msgid "Simultaneous processing"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:44
|
||||
msgid "Some output"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:225
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:92
|
||||
msgid "Starting"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:221
|
||||
msgid "Starting %s service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:247
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:112
|
||||
msgid "Stop the download if it is stalled for set number of seconds."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:91
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:243
|
||||
msgid "Stopping %s service"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:136
|
||||
msgid "Store compressed cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:133
|
||||
msgid "Store compressed cache file on router"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:43
|
||||
msgid "Suppress output"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:155
|
||||
msgid ""
|
||||
"URL to the external dnsmasq config file, see the %sREADME%s for details."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:168
|
||||
msgid "URLs to lists of AdBlockPlus-style formatted domains to be blocked."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:164
|
||||
msgid "URLs to lists of domains to be allowed."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:176
|
||||
msgid "URLs to lists of domains to be blocked."
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:180
|
||||
msgid "URLs to lists of hosts to be blocked."
|
||||
msgstr ""
|
||||
|
||||
#: 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:131
|
||||
msgid "Use simultaneous processing"
|
||||
msgstr ""
|
||||
|
||||
#: 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/htdocs/luci-static/resources/simple-adblock/status.js:106
|
||||
msgid "Version %s"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:98
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:173
|
||||
msgid "config (%s) validation failure!"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:127
|
||||
msgid "disabled"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:87
|
||||
msgid "dnsmasq additional hosts"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:88
|
||||
msgid "dnsmasq config"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:90
|
||||
msgid "dnsmasq ipset"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:175
|
||||
msgid ""
|
||||
"dnsmasq ipset support is enabled, but dnsmasq is either not installed or "
|
||||
"installed dnsmasq does not support ipset"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:176
|
||||
msgid ""
|
||||
"dnsmasq ipset support is enabled, but ipset is either not installed or "
|
||||
"installed ipset does not support '%s' type"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:93
|
||||
msgid "dnsmasq nft set"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:177
|
||||
msgid ""
|
||||
"dnsmasq nft set support is enabled, but dnsmasq is either not installed or "
|
||||
"installed dnsmasq does not support nft set"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:178
|
||||
msgid "dnsmasq nft sets support is enabled, but nft is not installed"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:95
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:100
|
||||
msgid "dnsmasq servers file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:183
|
||||
msgid "failed to access shared memory"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:181
|
||||
msgid "failed to create '%s' file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:193
|
||||
msgid "failed to create block-list or restart DNS resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:189
|
||||
msgid "failed to create compressed cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:180
|
||||
msgid "failed to create directory for %s file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:201
|
||||
msgid "failed to create output/cache/gzip file directory"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:197
|
||||
msgid "failed to download"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:196
|
||||
msgid "failed to download Config Update file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:187
|
||||
msgid "failed to format data file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:192
|
||||
msgid "failed to move '%s' to '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:188
|
||||
msgid "failed to move temporary data file to '%s'"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:185
|
||||
msgid "failed to optimize data file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:199
|
||||
msgid "failed to parse"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:198
|
||||
msgid "failed to parse Config Update file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:186
|
||||
msgid "failed to process allow-list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:195
|
||||
msgid "failed to reload/restart DNS resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:190
|
||||
msgid "failed to remove temporary files"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:182
|
||||
msgid "failed to restart/reload DNS resolver"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:184
|
||||
msgid "failed to sort data file"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:194
|
||||
msgid "failed to stop %s"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:191
|
||||
msgid "failed to unpack compressed cache"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:200
|
||||
msgid "no HTTPS/SSL support on device"
|
||||
msgstr ""
|
||||
|
||||
#: 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/simple-adblock/status.js:158
|
||||
msgid "some recommended packages are missing"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:179
|
||||
msgid "the %s failed to discover WAN gateway"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:98
|
||||
msgid "unbound adblock list"
|
||||
msgstr ""
|
||||
|
||||
#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:157
|
||||
msgid ""
|
||||
"use of external dnsmasq config file detected, please set '%s' option to '%s'"
|
||||
msgstr ""
|
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
"admin/services/simple-adblock": {
|
||||
"title": "Simple AdBlock",
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "simple-adblock/overview"
|
||||
},
|
||||
"depends": {
|
||||
"acl": [
|
||||
"luci-app-simple-adblock"
|
||||
],
|
||||
"uci": {
|
||||
"simple-adblock": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
"luci-app-simple-adblock": {
|
||||
"description": "Grant UCI and file access for luci-app-simple-adblock",
|
||||
"read": {
|
||||
"ubus": {
|
||||
"luci.simple-adblock": [
|
||||
"getInitList",
|
||||
"getInitStatus",
|
||||
"getPlatformSupport"
|
||||
]
|
||||
},
|
||||
"uci": [
|
||||
"simple-adblock"
|
||||
]
|
||||
},
|
||||
"write": {
|
||||
"uci": [
|
||||
"simple-adblock"
|
||||
],
|
||||
"ubus": {
|
||||
"luci.simple-adblock": [
|
||||
"setInitAction"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue