luci-app-https-dns-proxy: rewrite in javascript
authorStan Grishin <stangri@melmac.ca>
Tue, 29 Aug 2023 18:42:10 +0000 (18:42 +0000)
committerStan Grishin <stangri@melmac.ca>
Sun, 3 Sep 2023 20:57:04 +0000 (20:57 +0000)
Signed-off-by: Stan Grishin <stangri@melmac.ca>
(cherry picked from commit 6df7b92a50485d7a7c61c38c5abeaf96ad69a28c)

139 files changed:
applications/luci-app-https-dns-proxy/Makefile
applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js [new file with mode: 0644]
applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js [new file with mode: 0644]
applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns1.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns2.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.jp.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.family.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.private.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.protected.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.switch.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.360.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.edu.tsinghua.tuna.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.rubyfish.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/co.osxz.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.ahadns.blitz.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.alidns.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-ch.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-de.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-fi.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-jp.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-sg.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.family.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.security.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.family.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads-social.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p0.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p1.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p2.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p3.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.unfiltered.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.decloudus.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnsforfamily.dns-doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnslify.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.familyshield.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.pumplex.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.rethinkdns.basic.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/de.dnsforge.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/fi.lelux.resolver-eu.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-family.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-nonfiltering.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.nextdns.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.seby.doh-2.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/jp.iij.dns.public.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/lu.restena.kaitain.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.au.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.chi.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.es.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.in.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.it.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.la.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.nl.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.no.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.ny.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.pl.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.applied-privacy.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.cfiec.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ffmuc.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.he.ordns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.idnet.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.adblocker.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.east.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.snopyta.dns.doh.fi.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/pub.doh.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/sb.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/tw.twnic.dns.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua [deleted file]
applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm [deleted file]
applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm [deleted file]
applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm [deleted file]
applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm [deleted file]
applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm [deleted file]
applications/luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot
applications/luci-app-https-dns-proxy/root/usr/libexec/rpcd/luci.https-dns-proxy [new file with mode: 0755]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/app.tiarap.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ca.cira.canadianshield.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ch.switch.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cn.360.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cn.rubyfish.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/co.oszx.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.adguard.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.ahadns.blitz.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.alidns.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.blahdns.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.cloudflare-dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.controld.freedns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.decloudus.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.dnsforfamily.dns-doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.dnslify.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.opendns.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.rethinkdns.sky.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cz.nic.odvr.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/de.dnsforge.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/fi.lelux.resolver-eu.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/google.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/gr.libredns.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/io.nextdns.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/io.seby.doh-2.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/jp.iij.dns.public.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/lu.restena.kaitain.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.ahadns.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.applied-privacy.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.cfiec.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.ffmuc.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.he.ordns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.idnet.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.mullvad.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.quad9.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/one.comss.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/org.cleanbrowsing.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/org.snopyta.dns.doh.fi.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/pub.doh.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/sb.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/tw.twnic.dns.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json [new file with mode: 0644]
applications/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json

index 6661542eae9f2e461c9726214b453f25275a2e5a..4ed8b88163b30ff00db9d9d72aea5feab26032b0 100644 (file)
@@ -5,11 +5,11 @@ include $(TOPDIR)/rules.mk
 
 PKG_LICENSE:=GPL-3.0-or-later
 PKG_MAINTAINER:=Stan Grishin <stangri@melmac.ca>
-PKG_VERSION:=2022-10-15-14
+PKG_VERSION:=2023-05-25-4
 
 LUCI_TITLE:=DNS Over HTTPS Proxy Web UI
 LUCI_DESCRIPTION:=Provides Web UI for DNS Over HTTPS Proxy
-LUCI_DEPENDS:=+luci-compat +luci-base +https-dns-proxy
+LUCI_DEPENDS:=+luci-base +https-dns-proxy
 LUCI_PKGARCH:=all
 
 include ../../luci.mk
diff --git a/applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js b/applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js
new file mode 100644 (file)
index 0000000..bdc99fc
--- /dev/null
@@ -0,0 +1,436 @@
+// Copyright MOSSDeF, 2023 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)
+
+"require ui";
+"require rpc";
+"require uci";
+"require form";
+"require baseclass";
+
+var pkg = {
+       get Name() {
+               return "https-dns-proxy";
+       },
+       get URL() {
+               return "https://docs.openwrt.melmac.net/" + pkg.Name + "/";
+       },
+       templateToRegexp: function (template) {
+               return RegExp(
+                       "^" +
+                               template
+                                       .split(/(\{\w+\})/g)
+                                       .map((part) => {
+                                               let placeholder = part.match(/^\{(\w+)\}$/);
+                                               if (placeholder) return `(?<${placeholder[1]}>.*?)`;
+                                               else return part.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+                                       })
+                                       .join("") +
+                               "$"
+               );
+       },
+};
+
+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 getProviders = rpc.declare({
+       object: "luci." + pkg.Name,
+       method: "getProviders",
+       params: ["name"],
+});
+
+var getRuntime = rpc.declare({
+       object: "luci." + pkg.Name,
+       method: "getRuntime",
+       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);
+                       }
+               });
+       },
+       getInitList: function (name) {
+               getInitList(name).then(
+                       function (result) {
+                               this.emit("getInitList", result);
+                       }.bind(this)
+               );
+       },
+       getInitStatus: function (name) {
+               getInitStatus(name).then(
+                       function (result) {
+                               this.emit("getInitStatus", result);
+                       }.bind(this)
+               );
+       },
+       getPlatformSupport: function (name) {
+               getPlatformSupport(name).then(
+                       function (result) {
+                               this.emit("getPlatformSupport", result);
+                       }.bind(this)
+               );
+       },
+       getProviders: function (name) {
+               getProviders(name).then(
+                       function (result) {
+                               this.emit("getProviders", result);
+                       }.bind(this)
+               );
+       },
+       getRuntime: function (name) {
+               getRuntime(name).then(
+                       function (result) {
+                               this.emit("getRuntime", result);
+                       }.bind(this)
+               );
+       },
+       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), {}),
+                       L.resolveDefault(getProviders(pkg.Name), {}),
+                       L.resolveDefault(getRuntime(pkg.Name), {}),
+               ]).then(function (data) {
+                       var text;
+                       var reply = {
+                               status: (data[0] && data[0][pkg.Name]) || {
+                                       enabled: null,
+                                       running: null,
+                                       force_dns_active: null,
+                                       version: null,
+                               },
+                               providers: (data[1] && data[1][pkg.Name]) || { providers: [] },
+                               runtime: (data[2] && data[2][pkg.Name]) || { instances: [] },
+                       };
+                       reply.providers.sort(function (a, b) {
+                               return _(a.title).localeCompare(_(b.title));
+                       });
+                       reply.providers.push({
+                               title: "Custom",
+                               template: "{option}",
+                               params: { option: { type: "text" } },
+                       });
+
+                       var header = E("h2", {}, _("HTTPS DNS Proxy - Status"));
+                       var statusTitle = E(
+                               "label",
+                               { class: "cbi-value-title" },
+                               _("Service Status")
+                       );
+                       if (reply.status.version) {
+                               if (reply.status.running) {
+                                       text = _("Version %s - Running.").format(reply.status.version);
+                                       if (reply.status.force_dns_active) {
+                                               text += "<br />" + _("Force DNS ports:");
+                                               reply.status.force_dns_ports.forEach((element) => {
+                                                       text += " " + element;
+                                               });
+                                               text += ".";
+                                       }
+                               } else {
+                                       if (reply.status.enabled) {
+                                               text = _("Version %s - Stopped.").format(reply.status.version);
+                                       } else {
+                                               text = _("Version %s - Stopped (Disabled).").format(
+                                                       reply.status.version
+                                               );
+                                       }
+                               }
+                       } 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 instancesDiv = [];
+                       if (reply.runtime.instances) {
+                               var instancesTitle = E(
+                                       "label",
+                                       { class: "cbi-value-title" },
+                                       _("Service Instances")
+                               );
+                               text = _("See the %sREADME%s for details.").format(
+                                       '<a href="' +
+                                               pkg.URL +
+                                               '#a-word-about-default-routing " target="_blank">',
+                                       "</a>"
+                               );
+                               var instancesDescr = E("div", { class: "cbi-value-description" }, "");
+
+                               text = "";
+                               Object.values(reply.runtime.instances).forEach((element) => {
+                                       var resolver;
+                                       var address;
+                                       var port;
+                                       var name;
+                                       var option;
+                                       var found;
+                                       element.command.forEach((param, index, arr) => {
+                                               if (param === "-r") resolver = arr[index + 1];
+                                               if (param === "-a") address = arr[index + 1];
+                                               if (param === "-p") port = arr[index + 1];
+                                       });
+                                       resolver = resolver || "Unknown";
+                                       address = address || "127.0.0.1";
+                                       port = port || "Unknown";
+                                       reply.providers.forEach((prov) => {
+                                               let regexp = pkg.templateToRegexp(prov.template);
+                                               if (!found && regexp.test(resolver)) {
+                                                       found = true;
+                                                       name = _(prov.title);
+                                                       let match = resolver.match(regexp);
+                                                       if (match[1] != null) {
+                                                               if (
+                                                                       prov.params &&
+                                                                       prov.params.option &&
+                                                                       prov.params.option.options
+                                                               ) {
+                                                                       prov.params.option.options.forEach((opt) => {
+                                                                               if (opt.value === match[1]) option = _(opt.description);
+                                                                       });
+                                                                       name += " (" + option + ")";
+                                                               } else {
+                                                                       if (match[1] != "") name += " (" + match[1] + ")";
+                                                               }
+                                                       }
+                                               }
+                                       });
+                                       if (address === "127.0.0.1")
+                                               text += _("%s%s%s proxy on port %s.%s").format(
+                                                       "<strong>",
+                                                       name,
+                                                       "</strong>",
+                                                       port,
+                                                       "<br />"
+                                               );
+                                       else
+                                               text += _("%s%s%s proxy at %s on port %s.%s").format(
+                                                       "<strong>",
+                                                       name,
+                                                       "</strong>",
+                                                       address,
+                                                       port,
+                                                       "<br />"
+                                               );
+                               });
+                               var instancesText = E("div", {}, text);
+                               var instancesField = E("div", { class: "cbi-value-field" }, [
+                                       instancesText,
+                                       instancesDescr,
+                               ]);
+                               instancesDiv = E("div", { class: "cbi-value" }, [
+                                       instancesTitle,
+                                       instancesField,
+                               ]);
+                       }
+
+                       var btn_gap = E("span", {}, "&#160;&#160;");
+                       var btn_gap_long = E(
+                               "span",
+                               {},
+                               "&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;"
+                       );
+                       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" },
+                                                               _("Restarting %s service").format(pkg.Name)
+                                                       ),
+                                               ]);
+                                               return RPC.setInitAction(pkg.Name, "restart");
+                                       },
+                               },
+                               _("Restart")
+                       );
+
+                       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;
+                               if (reply.status.running) {
+                                       btn_start.disabled = true;
+                                       btn_action.disabled = false;
+                                       btn_stop.disabled = false;
+                               } else {
+                                       btn_start.disabled = false;
+                                       btn_action.disabled = true;
+                                       btn_stop.disabled = true;
+                               }
+                       } else {
+                               btn_start.disabled = true;
+                               btn_action.disabled = true;
+                               btn_stop.disabled = true;
+                               btn_enable.disabled = false;
+                               btn_disable.disabled = true;
+                       }
+
+                       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);
+                       var buttonsDiv = reply.status.version ?
+                               E('div', {class: 'cbi-value'}, [
+                                       buttonsTitle,
+                                       buttonsField,
+                               ]) : '';
+                       return E("div", {}, [header, statusDiv, instancesDiv, buttonsDiv]);
+               });
+       },
+});
+
+RPC.on("setInitAction", function (reply) {
+       ui.hideModal();
+       location.reload();
+});
+
+return L.Class.extend({
+       status: status,
+       getPlatformSupport: getPlatformSupport,
+       getProviders: getProviders,
+       getRuntime: getRuntime,
+});
diff --git a/applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js b/applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js
new file mode 100644 (file)
index 0000000..a0d809c
--- /dev/null
@@ -0,0 +1,383 @@
+// Copyright 2023 MOSSDeF, Stan Grishin <stangri@melmac.ca>
+// This code wouldn't have been possible without help from:
+// - [@jow-](https://github.com/jow-)
+// - [@stokito](https://github.com/stokito)
+// - [@vsviridov](https://github.com/vsviridov)
+
+"use strict";
+"require form";
+"require rpc";
+"require uci";
+"require view";
+"require https-dns-proxy.status as hdp";
+
+var pkg = {
+       get Name() {
+               return "https-dns-proxy";
+       },
+       get URL() {
+               return "https://docs.openwrt.melmac.net/" + pkg.Name + "/";
+       },
+       templateToRegexp: function (template) {
+               return RegExp(
+                       "^" +
+                               template
+                                       .split(/(\{\w+\})/g)
+                                       .map((part) => {
+                                               let placeholder = part.match(/^\{(\w+)\}$/);
+                                               if (placeholder) return `(?<${placeholder[1]}>.*?)`;
+                                               else return part.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+                                       })
+                                       .join("") +
+                               "$"
+               );
+       },
+       templateToResolver: function (template, args) {
+               return template.replace(/{(\w+)}/g, (_, v) => args[v]);
+       },
+};
+
+return view.extend({
+       load: function () {
+               return Promise.all([
+                       L.resolveDefault(hdp.getPlatformSupport(pkg.Name), {}),
+                       L.resolveDefault(hdp.getProviders(pkg.Name), {}),
+                       uci.load(pkg.Name),
+                       uci.load("dhcp"),
+               ]);
+       },
+
+       render: function (data) {
+               var reply = {
+                       platform: (data[0] && data[0][pkg.Name]) || {
+                               http2_support: null,
+                               http3_support: null,
+                       },
+                       providers: (data[1] && data[1][pkg.Name]) || { providers: [] },
+               };
+               reply.providers.sort(function (a, b) {
+                       return _(a.title).localeCompare(_(b.title));
+               });
+               reply.providers.push({
+                       title: "Custom",
+                       template: "{option}",
+                       params: { option: { type: "text" } },
+               });
+
+               var status, m, s, o, p;
+               var text;
+
+               status = new hdp.status();
+
+               m = new form.Map(pkg.Name, _("HTTPS DNS Proxy - Configuration"));
+
+               s = m.section(form.NamedSection, "config", pkg.Name);
+               o = s.option(
+                       form.ListValue,
+                       "dnsmasq_config_update",
+                       _("Update DNSMASQ Config on Start/Stop"),
+                       _(
+                               "If update option is selected, the %s'DNS forwardings' section of DHCP and DNS%s will be automatically updated to use selected DoH providers (%smore information%s)."
+                       ).format(
+                               '<a href="' + L.url("admin", "network", "dhcp") + '">',
+                               "</a>",
+                               '<a href="' + pkg.URL + "#default-settings" + '" target="_blank">',
+                               "</a>"
+                       )
+               );
+               o.value("*", _("Update all configs"));
+               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, _("Update %s only").format(description));
+               });
+               o.value("-", _("Do not update configs"));
+               o.default = "*";
+
+               o = s.option(
+                       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";
+
+               o = s.option(
+                       form.ListValue,
+                       "canary_domains_icloud",
+                       _("Canary Domains iCloud"),
+                       _(
+                               "Blocks access to iCloud Private Relay resolvers, forcing local devices to use router for DNS resolution (%smore information%s)."
+                       ).format(
+                               '<a href="' + pkg.URL + "#canary_domains_icloud" + '" target="_blank">',
+                               "</a>"
+                       )
+               );
+               o.value("0", _("Let local devices use iCloud Private Relay"));
+               o.value("1", _("Force Router DNS server to all local devices"));
+               o.depends("force_dns", "1");
+               o.default = "1";
+
+               o = s.option(
+                       form.ListValue,
+                       "canary_domains_mozilla",
+                       _("Canary Domains Mozilla"),
+                       _(
+                               "Blocks access to Mozilla Encrypted resolvers, forcing local devices to use router for DNS resolution (%smore information%s)."
+                       ).format(
+                               '<a href="' +
+                                       pkg.URL +
+                                       "#canary_domains_mozilla" +
+                                       '" target="_blank">',
+                               "</a>"
+                       )
+               );
+               o.value("0", _("Let local devices use Mozilla Private Relay"));
+               o.value("1", _("Force Router DNS server to all local devices"));
+               o.depends("force_dns", "1");
+               o.default = "1";
+
+               text = "";
+               if (!reply.platform.http2_support)
+                       text +=
+                               _(
+                                       "Please note that %s is not supported on this system (%smore information%s)."
+                               ).format(
+                                       "<i>HTTP/2</i>",
+                                       '<a href="' + pkg.URL + "#http2-support" + '" target="_blank">',
+                                       "</a>"
+                               ) + "<br />";
+               if (!reply.platform.http3_support)
+                       text +=
+                               _(
+                                       "Please note that %s is not supported on this system (%smore information%s)."
+                               ).format(
+                                       "<i>HTTP/3 (QUIC)</i>",
+                                       '<a href="' + pkg.URL + "#http3-quic-support" + '" target="_blank">',
+                                       "</a>"
+                               ) + "<br />";
+
+               s = m.section(
+                       form.GridSection,
+                       "https-dns-proxy",
+                       _("HTTPS DNS Proxy - Instances"),
+                       text
+               );
+               s.rowcolors = true;
+               s.sortable = true;
+               s.anonymous = true;
+               s.addremove = true;
+
+               s.sectiontitle = (section_id) => {
+                       var provText;
+                       var found;
+                       reply.providers.forEach((prov) => {
+                               var option;
+                               let regexp = pkg.templateToRegexp(prov.template);
+                               let resolver = uci.get(pkg.Name, section_id, "resolver_url");
+                               resolver = resolver === undefined ? null : resolver;
+                               if (!found && resolver && regexp.test(resolver)) {
+                                       found = true;
+                                       provText = _(prov.title);
+                                       let match = resolver.match(regexp);
+                                       if (match[1] != null) {
+                                               if (
+                                                       prov.params &&
+                                                       prov.params.option &&
+                                                       prov.params.option.options
+                                               ) {
+                                                       prov.params.option.options.forEach((opt) => {
+                                                               if (opt.value === match[1]) {
+                                                                       option = _(opt.description);
+                                                               }
+                                                       });
+                                                       provText += " (" + option + ")";
+                                               } else {
+                                                       if (match[1] !== "") provText += " (" + match[1] + ")";
+                                               }
+                                       }
+                               }
+                       });
+                       return provText || _("Unknown");
+               };
+
+               var _provider;
+               _provider = s.option(form.ListValue, "_provider", _("Provider"));
+               _provider.modalonly = true;
+               _provider.cfgvalue = function (section_id) {
+                       let resolver = this.map.data.get(
+                               this.map.config,
+                               section_id,
+                               "resolver_url"
+                       );
+                       if (resolver === undefined || resolver === null) return null;
+                       let found;
+                       let ret;
+                       reply.providers.forEach((prov, i) => {
+                               let regexp = pkg.templateToRegexp(prov.template);
+                               if (!found && regexp.test(resolver)) {
+                                       found = true;
+                                       ret = prov.template;
+                               }
+                       });
+                       return ret || "";
+               };
+               _provider.write = function (section_id, formvalue) {
+                       uci.set(pkg.Name, section_id, "resolver_url", formvalue);
+               };
+
+               reply.providers.forEach((prov, i) => {
+                       if (prov.http2_only && !reply.platform.http2_support) return;
+                       if (prov.http3_only && !reply.platform.http3_support) return;
+                       _provider.value(prov.template, _(prov.title));
+                       if (
+                               prov.params &&
+                               prov.params.option &&
+                               prov.params.option.type &&
+                               prov.params.option.type === "select"
+                       ) {
+                               let optName = prov.params.option.description || _("Parameter");
+                               var _paramList = s.option(form.ListValue, "_paramList_" + i, optName);
+                               _paramList.template = prov.template;
+                               _paramList.modalonly = true;
+                               if (prov.params.option.default) {
+                                       _paramList.default = prov.params.option.default;
+                               }
+                               prov.params.option.options.forEach((opt) => {
+                                       let val = opt.value || "";
+                                       let descr = opt.description || "";
+                                       _paramList.value(val, descr);
+                               });
+                               _paramList.depends("_provider", prov.template);
+                               _paramList.write = function (section_id, formvalue) {
+                                       let template = this.map.data.get(
+                                               this.map.config,
+                                               section_id,
+                                               "resolver_url"
+                                       );
+                                       if (_paramList.template !== template) return 0;
+                                       let resolver = pkg.templateToResolver(template, {
+                                               option: formvalue || "",
+                                       });
+                                       uci.set(pkg.Name, section_id, "resolver_url", resolver);
+                               };
+                               _paramList.remove = _paramList.write;
+                       } else if (
+                               prov.params &&
+                               prov.params.option &&
+                               prov.params.option.type &&
+                               prov.params.option.type === "text"
+                       ) {
+                               let optName = prov.params.option.description || _("Parameter");
+                               var _paramText = s.option(form.Value, "_paramText_" + i, optName);
+                               _paramText.template = prov.template;
+                               _paramText.modalonly = true;
+                               _paramText.depends("_provider", prov.template);
+                               _paramText.optional = !(
+                                       prov.params.option.default && prov.params.option.default !== ""
+                               );
+                               _paramText.cfgvalue = function (section_id) {
+                                       let resolver = this.map.data.get(
+                                               this.map.config,
+                                               section_id,
+                                               "resolver_url"
+                                       );
+                                       if (resolver === undefined || resolver === null) return null;
+                                       let regexp = pkg.templateToRegexp(prov.template);
+                                       let match = resolver.match(regexp);
+                                       return (match && match[1]) || null;
+                               };
+                               _paramText.write = function (section_id, formvalue) {
+                                       let template = this.map.data.get(
+                                               this.map.config,
+                                               section_id,
+                                               "resolver_url"
+                                       );
+                                       if (_paramText.template !== template) return 0;
+                                       let resolver = pkg.templateToResolver(template, {
+                                               option: formvalue || "",
+                                       });
+                                       uci.set(pkg.Name, section_id, "resolver_url", resolver);
+                               };
+                               _paramText.remove = _paramText.write;
+                       }
+               });
+
+               o = s.option(form.Value, "bootstrap_dns", _("Bootstrap DNS"));
+               o.default = "";
+               o.modalonly = true;
+               o.optional = true;
+               o = s.option(form.Value, "listen_addr", _("Listen Address"));
+               o.datatype = "ipaddr";
+               o.default = "";
+               o.optional = true;
+               o.placeholder = "127.0.0.1";
+               var n = 0;
+               o = s.option(form.Value, "listen_port", _("Listen Port"));
+               o.datatype = "port";
+               o.default = "";
+               o.optional = true;
+               o.placeholder = n + 5053;
+               o = s.option(form.Value, "user", _("Run As User"));
+               o.default = "";
+               o.modalonly = true;
+               o.optional = true;
+               o = s.option(form.Value, "group", _("Run As Group"));
+               o.default = "";
+               o.modalonly = true;
+               o.optional = true;
+               o = s.option(form.Value, "dscp_codepoint", _("DSCP Codepoint"));
+               o.datatype = "and(uinteger, range(0,63))";
+               o.default = "";
+               o.modalonly = true;
+               o.optional = true;
+               o = s.option(form.Value, "verbosity", _("Logging Verbosity"));
+               o.datatype = "and(uinteger, range(0,4))";
+               o.default = "";
+               o.modalonly = true;
+               o.optional = true;
+               o = s.option(form.Value, "logfile", _("Logging File Path"));
+               o.default = "";
+               o.modalonly = true;
+               o.optional = true;
+               o = s.option(form.Value, "polling_interval", _("Polling Interval"));
+               o.datatype = "and(uinteger, range(5,3600))";
+               o.default = "";
+               o.modalonly = true;
+               o.optional = true;
+               o = s.option(form.Value, "proxy_server", _("Proxy Server"));
+               o.default = "";
+               o.modalonly = true;
+               o.optional = true;
+               o = s.option(form.ListValue, "use_http1", _("Use HTTP/1"));
+               o.modalonly = true;
+               o.optional = true;
+               o.rmempty = true;
+               o.value("", _("Use negotiated HTTP version"));
+               o.value("1", _("Force use of HTTP/1"));
+               o.default = "";
+               o = s.option(
+                       form.ListValue,
+                       "use_ipv6_resolvers_only",
+                       _("Use IPv6 resolvers")
+               );
+               o.modalonly = true;
+               o.optional = true;
+               o.rmempty = true;
+               o.value("", _("Use any family DNS resolvers"));
+               o.value("1", _("Force use of IPv6 DNS resolvers"));
+               o.default = "";
+
+               return Promise.all([status.render(), m.render()]);
+       },
+});
diff --git a/applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua b/applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua
deleted file mode 100644 (file)
index f7122df..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-module("luci.controller.https-dns-proxy", package.seeall)
-function index()
-       if nixio.fs.access("/etc/config/https-dns-proxy") then
-               entry({"admin", "services", "https-dns-proxy"}, cbi("https-dns-proxy"), _("DNS HTTPS Proxy")).acl_depends = { "luci-app-https-dns-proxy" }
-               entry({"admin", "services", "https-dns-proxy", "action"}, call("https_dns_proxy_action"), nil).leaf = true
-       end
-end
-
-function https_dns_proxy_action(name)
-       local packageName = "https-dns-proxy"
-       local http = require "luci.http"
-       local sys = require "luci.sys"
-       local util = require "luci.util"
-       if name == "start" then
-               sys.init.start(packageName)
-       elseif name == "action" then
-               util.exec("/etc/init.d/" .. packageName .. " reload >/dev/null 2>&1")
-       elseif name == "stop" then
-               sys.init.stop(packageName)
-       elseif name == "enable" then
-               sys.init.enable(packageName)
-       elseif name == "disable" then
-               sys.init.disable(packageName)
-       end
-       http.prepare_content("text/plain")
-       http.write("0")
-end
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns1.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns1.lua
deleted file mode 100644 (file)
index 2fa9985..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return{
-       name="DnsCryptCa-DNS1",
-       label=_("DNSCrypt.ca (DNS1)"),
-       resolver_url="https://dns1.dnscrypt.ca:453/dns-query",
-       bootstrap_dns="45.76.37.222,185.112.145.13,93.95.226.53,2001:19f0:5001:185a:5400:ff:fe50:56d5",
-       help_link="https://dnscrypt.ca/",
-       help_link_text="dnscrypt.ca"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns2.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns2.lua
deleted file mode 100644 (file)
index f31dd38..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return{
-       name="DnsCryptCa-DNS2",
-       label=_("DNSCrypt.ca (DNS2)"),
-       resolver_url="https://dns2.dnscrypt.ca:453/dns-query",
-       bootstrap_dns="45.76.37.222,185.112.145.13,93.95.226.53,2001:19f0:5001:185a:5400:ff:fe50:56d5",
-       help_link="https://dnscrypt.ca/",
-       help_link_text="dnscrypt.ca"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.doh.lua
deleted file mode 100644 (file)
index e3d8d1e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.tiar.app",
-       label = _("Tiarap Public DNS - SG"),
-       resolver_url = "https://doh.tiar.app/dns-query",
-       bootstrap_dns = "174.138.21.128,2400:6180:0:d0::5f6e:4001",
-       help_link = "https://tiarap.org/",
-       help_link_text = "Tiarap.org"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.jp.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.jp.lua
deleted file mode 100644 (file)
index 0688562..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.tiar.jp",
-       label = _("Tiarap Public DNS - JP"),
-       resolver_url = "https://doh.tiar.jp/dns-query",
-       bootstrap_dns = "172.104.93.80,2400:8902::f03c:91ff:feda:c514",
-       help_link = "https://tiarap.org/",
-       help_link_text = "Tiarap.org"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.family.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.family.lua
deleted file mode 100644 (file)
index dfe1af4..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "family.canadianshield.cira.ca",
-       label = _("CIRA Canadian Shield (Family)"),
-       resolver_url = "https://family.canadianshield.cira.ca/dns-query",
-       bootstrap_dns = "149.112.121.30,149.112.122.30,2620:10A:80BB::30,2620:10A:80BC::30",
-       help_link = "https://www.cira.ca/cybersecurity-services/canadian-shield/",
-       help_link_text = "CIRA Canadian Shield"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.private.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.private.lua
deleted file mode 100644 (file)
index 5b37a9a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "private.canadianshield.cira.ca",
-       label = _("CIRA Canadian Shield (Private)"),
-       resolver_url = "https://private.canadianshield.cira.ca/dns-query",
-       bootstrap_dns = "149.112.121.10,149.112.122.10,2620:10A:80BB::10,2620:10A:80BC::10",
-       help_link = "https://www.cira.ca/cybersecurity-services/canadian-shield/",
-       help_link_text = "CIRA Canadian Shield"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.protected.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.protected.lua
deleted file mode 100644 (file)
index 810f479..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "protected.canadianshield.cira.ca",
-       label = _("CIRA Canadian Shield (Protected)"),
-       resolver_url = "https://protected.canadianshield.cira.ca/dns-query",
-       bootstrap_dns = "149.112.121.20,149.112.122.20,2620:10A:80BB::20,2620:10A:80BC::20",
-       help_link = "https://www.cira.ca/cybersecurity-services/canadian-shield/",
-       help_link_text = "CIRA Canadian Shield"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.lua
deleted file mode 100644 (file)
index 3253cf4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-return {
-       name = "dns.digitale-gesellschaft.ch",
-       label = _("Digitale Gesellschaft - CH"),
-       resolver_url = "https://dns.digitale-gesellschaft.ch/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       http2_only = true,
-       help_link = "https://www.digitale-gesellschaft.ch/dns/",
-       help_link_text = "Digitale Gesellschaft"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.switch.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.switch.dns.lua
deleted file mode 100644 (file)
index 9f0c594..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns.switch.ch",
-       label = _("Switch DNS - CH"),
-       resolver_url = "https://dns.switch.ch/dns-query",
-       bootstrap_dns = "130.59.31.248,2001:620:0:ff::2",
-       help_link = "https://www.switch.ch/security/info/public-dns/",
-       help_link_text = "Switch.ch"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.360.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.360.doh.lua
deleted file mode 100644 (file)
index f582a82..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-return {
-       name = "doh.360.cn",
-       label = _("360 Secure DNS - CN"),
-       resolver_url = "https://doh.360.cn/dns-query",
-       bootstrap_dns = "101.226.4.6,218.30.118.6,123.125.81.6,140.207.198.6"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.edu.tsinghua.tuna.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.edu.tsinghua.tuna.dns.lua
deleted file mode 100644 (file)
index 6e40de3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-return {
-       name = "dns.tuna.tsinghua.edu.cn",
-       label = _("Tsinghua University Secure DNS - CN"),
-       resolver_url = "https://dns.tuna.tsinghua.edu.cn:8443/dns-query",
-       bootstrap_dns = "208.67.222.222,208.67.220.220",
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.rubyfish.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.rubyfish.dns.lua
deleted file mode 100644 (file)
index b64bd9c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-return {
-       name = "dns.rubyfish.cn",
-       label = _("rubyfish.cn"),
-       resolver_url = "https://dns.rubyfish.cn/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       http2_only = true
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/co.osxz.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/co.osxz.dns.lua
deleted file mode 100644 (file)
index f54c912..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns.oszx.co",
-       label = _("OSZX DNS - UK"),
-       resolver_url = "https://dns.oszx.co/dns-query",
-       bootstrap_dns = "51.38.83.141,2001:41d0:801:2000::d64",
-       help_link = "https://dns.oszx.co/#mdoh",
-       help_link_text = "OSZX.co"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua
deleted file mode 100644 (file)
index 0c2a4d8..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns-family.adguard.com",
-       label = _("AdGuard (Family Protection)"),
-       resolver_url = "https://dns-family.adguard.com/dns-query",
-       bootstrap_dns = "176.103.130.132,176.103.130.134",
-       help_link = "https://adguard.com/en/adguard-dns/overview.html",
-       help_link_text = "AdGuard.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua
deleted file mode 100644 (file)
index 79db202..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns.adguard.com",
-       label = _("AdGuard (Standard)"),
-       resolver_url = "https://dns.adguard.com/dns-query",
-       bootstrap_dns = "176.103.130.130,176.103.130.131",
-       help_link = "https://adguard.com/en/adguard-dns/overview.html",
-       help_link_text = "AdGuard.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.ahadns.blitz.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.ahadns.blitz.lua
deleted file mode 100644 (file)
index 5a67fcb..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "blitz.ahadns.com",
-       label = _("AhaDNS Blitz (Configurable)"),
-       resolver_url = "https://blitz.ahadns.com/",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://blitz-setup.ahadns.com/",
-       help_link_text = "AhaDNS Blitz"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.alidns.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.alidns.dns.lua
deleted file mode 100644 (file)
index 1654fea..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return { 
-       name="dns.alidns.com",
-       label=_("AliDNS - CN"),
-       resolver_url="https://dns.alidns.com/dns-query",
-       bootstrap_dns="223.5.5.5,223.6.6.6,2400:3200::1,2400:3200:baba::1",
-       help_link = "https://alidns.com/",
-       help_link_text = "AliDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-ch.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-ch.lua
deleted file mode 100644 (file)
index 8e22f59..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh-ch.blahdns.com",
-       label = _("BlahDNS - CH"),
-       resolver_url = "https://doh-ch.blahdns.com/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://blahdns.com/",
-       help_link_text = "BlahDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-de.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-de.lua
deleted file mode 100644 (file)
index d252c52..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh-de.blahdns.com",
-       label = _("BlahDNS - DE"),
-       resolver_url = "https://doh-de.blahdns.com/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://blahdns.com/",
-       help_link_text = "BlahDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-fi.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-fi.lua
deleted file mode 100644 (file)
index 75f01ed..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh-fi.blahdns.com",
-       label = _("BlahDNS - FI"),
-       resolver_url = "https://doh-fi.blahdns.com/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://blahdns.com/",
-       help_link_text = "BlahDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-jp.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-jp.lua
deleted file mode 100644 (file)
index 3cb783d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh-jp.blahdns.com",
-       label = _("BlahDNS - JP"),
-       resolver_url = "https://doh-jp.blahdns.com/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://blahdns.com/",
-       help_link_text = "BlahDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-sg.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-sg.lua
deleted file mode 100644 (file)
index 32b684d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh-sg.blahdns.com",
-       label = _("BlahDNS - SG"),
-       resolver_url = "https://doh-sg.blahdns.com/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://blahdns.com/",
-       help_link_text = "BlahDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.family.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.family.lua
deleted file mode 100644 (file)
index 69fe4d2..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "family.cloudflare-dns.com",
-       label = _("Cloudflare (Family Protection)"),
-       resolver_url = "https://family.cloudflare-dns.com/dns-query",
-       bootstrap_dns = "1.1.1.3,1.0.0.3,2606:4700:4700::1113,2606:4700:4700::1003",
-       help_link = "https://one.one.one.one/family/",
-       help_link_text = "Cloudflare.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua
deleted file mode 100644 (file)
index eb78366..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-return {
-       name = "cloudflare-dns.com",
-       label = _("Cloudflare"),
-       resolver_url = "https://cloudflare-dns.com/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001",
-       help_link = "https://one.one.one.one/family/",
-       help_link_text = "Cloudflare.com",
-       default = true
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.security.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.security.lua
deleted file mode 100644 (file)
index 3013305..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "security.cloudflare-dns.com",
-       label = _("Cloudflare (Security Protection)"),
-       resolver_url = "https://security.cloudflare-dns.com/dns-query",
-       bootstrap_dns = "1.1.1.2,1.0.0.2,2606:4700:4700::1112,2606:4700:4700::1002",
-       help_link = "https://one.one.one.one/family/",
-       help_link_text = "Cloudflare.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.family.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.family.lua
deleted file mode 100644 (file)
index e7d6ffd..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "freedns.controld.com-family",
-       label = _("ControlD (Family)"),
-       resolver_url = "https://freedns.controld.com/family",
-       bootstrap_dns = "76.76.2.4,2606:1a40::4",
-       help_link = "https://kb.controld.com/tutorials",
-       help_link_text = "ControlD.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads-social.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads-social.lua
deleted file mode 100644 (file)
index 4b8ee02..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "ControlD-Malware-Ads-Social",
-       label = _("ControlD (Block Malware + Ads + Social)"),
-       resolver_url = "https://freedns.controld.com/p3",
-       bootstrap_dns = "76.76.2.3,2606:1a40::3",
-       help_link = "https://kb.controld.com/tutorials",
-       help_link_text = "ControlD"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads.lua
deleted file mode 100644 (file)
index 947ed59..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "ControlD-Malware-Ads",
-       label = _("ControlD (Block Malware + Ads)"),
-       resolver_url = "https://freedns.controld.com/p2",
-       bootstrap_dns = "76.76.2.2,2606:1a40::2",
-       help_link = "https://kb.controld.com/tutorials",
-       help_link_text = "ControlD"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware.lua
deleted file mode 100644 (file)
index 77f062b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "ControlD-Malware",
-       label = _("ControlD (Block Malware)"),
-       resolver_url = "https://freedns.controld.com/p1",
-       bootstrap_dns = "76.76.2.1,2606:1a40::1",
-       help_link = "https://kb.controld.com/tutorials",
-       help_link_text = "ControlD"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p0.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p0.lua
deleted file mode 100644 (file)
index a520c96..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "freedns.controld.com-p0",
-       label = _("ControlD (Unfiltered)"),
-       resolver_url = "https://freedns.controld.com/p0",
-       bootstrap_dns = "76.76.2.0,2606:1a40::0",
-       help_link = "https://kb.controld.com/tutorials",
-       help_link_text = "ControlD.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p1.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p1.lua
deleted file mode 100644 (file)
index eac144e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "freedns.controld.com-p1",
-       label = _("ControlD (Block Malware)"),
-       resolver_url = "https://freedns.controld.com/p1",
-       bootstrap_dns = "76.76.2.1,2606:1a40::1",
-       help_link = "https://kb.controld.com/tutorials",
-       help_link_text = "ControlD.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p2.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p2.lua
deleted file mode 100644 (file)
index 0e7c846..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "freedns.controld.com-p2",
-       label = _("ControlD (Block Malware + Ads)"),
-       resolver_url = "https://freedns.controld.com/p2",
-       bootstrap_dns = "76.76.2.2,2606:1a40::2",
-       help_link = "https://kb.controld.com/tutorials",
-       help_link_text = "ControlD.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p3.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p3.lua
deleted file mode 100644 (file)
index 0249678..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "freedns.controld.com-p3",
-       label = _("ControlD (Block Malware + Ads + Social)"),
-       resolver_url = "https://freedns.controld.com/p3",
-       bootstrap_dns = "76.76.2.3,2606:1a40::3",
-       help_link = "https://kb.controld.com/tutorials",
-       help_link_text = "ControlD.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.unfiltered.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.unfiltered.lua
deleted file mode 100644 (file)
index d4128df..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "ControlD-Unfiltered",
-       label = _("ControlD (Unfiltered)"),
-       resolver_url = "https://freedns.controld.com/p0",
-       bootstrap_dns = "76.76.2.0,2606:1a40::0",
-       help_link = "https://kb.controld.com/tutorials",
-       help_link_text = "ControlD"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.decloudus.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.decloudus.dns.lua
deleted file mode 100644 (file)
index 1135c09..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns.decloudus.com",
-       label = _("DeCloudUs DNS"),
-       resolver_url = "https://dns.decloudus.com/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://decloudus.com/",
-       help_link_text = "DeCloudUs.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnsforfamily.dns-doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnsforfamily.dns-doh.lua
deleted file mode 100644 (file)
index 41b63ff..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dnsforfamily",
-       label = _("DNS For Family"),
-       resolver_url = "https://dns-doh.dnsforfamily.com/dns-query",
-       bootstrap_dns = "94.130.180.225,78.47.64.161",
-       help_link = "https://dnsforfamily.com/#DNS_Servers_DNS_Over_HTTPS",
-       help_link_text = "DNSForFamily.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnslify.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnslify.doh.lua
deleted file mode 100644 (file)
index e531bcc..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.dnslify.com",
-       label = _("DNSlify DNS"),
-       resolver_url = "https://doh.dnslify.com/dns-query",
-       bootstrap_dns = "185.235.81.1,185.235.81.2,2a0d:4d00:81::1,2a0d:4d00:81::2",
-       help_link = "https://www.dnslify.com/services/doh/",
-       help_link_text = "DNSlify.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.doh.lua
deleted file mode 100644 (file)
index 16a8331..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.opendns.com",
-       label = _("OpenDNS"),
-       resolver_url = "https://doh.opendns.com/dns-query",
-       bootstrap_dns = "208.67.222.222,208.67.220.220",
-       help_link = "https://support.opendns.com/hc/en-us/articles/360038086532-Using-DNS-over-HTTPS-DoH-with-OpenDNS",
-       help_link_text = "OpenDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.familyshield.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.familyshield.doh.lua
deleted file mode 100644 (file)
index 8686d8c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.familyshield.opendns.com",
-       label = _("OpenDNS (Family Shield)"),
-       resolver_url = "https://doh.familyshield.opendns.com/dns-query",
-       bootstrap_dns = "208.67.222.123,208.67.220.123",
-       help_link = "https://support.opendns.com/hc/en-us/articles/360038086532-Using-DNS-over-HTTPS-DoH-with-OpenDNS",
-       help_link_text = "OpenDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.pumplex.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.pumplex.dns.lua
deleted file mode 100644 (file)
index b61630a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns.pumplex.com",
-       label = _("OSZX DNS (Pumplex)"),
-       resolver_url = "https://dns.pumplex.com/dns-query",
-       bootstrap_dns = "51.38.82.198,2001:41d0:801:2000::1b28",
-       help_link = "https://dns.oszx.co/#mdoh",
-       help_link_text = "OSZX.co"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.rethinkdns.basic.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.rethinkdns.basic.lua
deleted file mode 100644 (file)
index 966ccd7..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "basic.rethinkdns.com",
-       label = _("Rethink DNS (Configurable)"),
-       resolver_url = "https://basic.rethinkdns.com/",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://www.rethinkdns.com/configure",
-       help_link_text = "RethinkDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua
deleted file mode 100644 (file)
index 5568fc7..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "odvr.nic.cz",
-       label = _("ODVR (nic.cz)"),
-       resolver_url = "https://odvr.nic.cz/doh",
-       bootstrap_dns = "193.17.47.1,185.43.135.1,2001:148f:ffff::1,2001:148f:fffe::1",
-       help_link = "https://www.nic.cz/odvr/",
-       help_link_text = "nic.cz"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/de.dnsforge.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/de.dnsforge.lua
deleted file mode 100644 (file)
index a6fe548..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dnsforge.de",
-       label = _("DNS Forge - DE"),
-       resolver_url = "https://dnsforge.de/dns-query",
-       bootstrap_dns = "176.9.93.198,176.9.1.117,2a01:4f8:151:34aa::198,2a01:4f8:141:316d::117",
-       help_link = "https://dnsforge.de/",
-       help_link_text = "DNSForge.de"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/fi.lelux.resolver-eu.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/fi.lelux.resolver-eu.lua
deleted file mode 100644 (file)
index 5954ea7..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "resolver-eu.lelux.fi",
-       label = _("Lelux DNS - FI"),
-       resolver_url = "https://resolver-eu.lelux.fi/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://lelux.fi/resolver/",
-       help_link_text = "Lelux.fi"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua
deleted file mode 100644 (file)
index a23e9e5..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-return {
-       name = "dns.google",
-       label = _("Google"),
-       resolver_url = "https://dns.google/dns-query",
-       bootstrap_dns = "8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua
deleted file mode 100644 (file)
index 63e4290..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.libredns.gr-ads",
-       label = _("LibreDNS - GR (No Ads)"),
-       resolver_url = "https://doh.libredns.gr/ads",
-       bootstrap_dns = "116.202.176.26,1.1.1.1",
-       help_link = "https://libredns.gr/",
-       help_link_text = "LibreDNS.gr"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua
deleted file mode 100644 (file)
index 67f9e5f..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.libredns.gr",
-       label = _("LibreDNS - GR"),
-       resolver_url = "https://doh.libredns.gr/dns-query",
-       bootstrap_dns = "116.202.176.26,1.1.1.1",
-       help_link = "https://libredns.gr/",
-       help_link_text = "LibreDNS.gr"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-family.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-family.lua
deleted file mode 100644 (file)
index eecb562..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns-family.adguard.com",
-       label = _("AdGuard (Family Protection)"),
-       resolver_url = "https://dns-family.adguard.com/dns-query",
-       bootstrap_dns = "94.140.14.140,94.140.14.141,2a10:50c0::1:ff,2a10:50c0::2:ff",
-       help_link = "https://adguard-dns.io/en/public-dns.html",
-       help_link_text = "AdGuard.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-nonfiltering.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-nonfiltering.lua
deleted file mode 100644 (file)
index cfa938d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns-unfiltered.adguard.com",
-       label = _("AdGuard (Non-filtering)"),
-       resolver_url = "https://dns-unfiltered.adguard.com/dns-query",
-       bootstrap_dns = "94.140.14.140,94.140.14.141,2a10:50c0::1:ff,2a10:50c0::2:ff",
-       help_link = "https://adguard-dns.io/en/public-dns.html",
-       help_link_text = "AdGuard.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns.lua
deleted file mode 100644 (file)
index 9026950..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns.adguard.com",
-       label = _("AdGuard (Standard)"),
-       resolver_url = "https://dns.adguard.com/dns-query",
-       bootstrap_dns = "94.140.14.140,94.140.14.141,2a10:50c0::1:ff,2a10:50c0::2:ff",
-       help_link = "https://adguard-dns.io/en/public-dns.html",
-       help_link_text = "AdGuard.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.nextdns.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.nextdns.dns.lua
deleted file mode 100644 (file)
index 53aca92..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns.nextdns.io",
-       label = _("NextDNS.io (Configurable)"),
-       resolver_url = "https://dns.nextdns.io/",
-       bootstrap_dns = "45.90.28.49,45.90.30.49",
-       help_link = " https://my.nextdns.io",
-       help_link_text = "NextDNS.io"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.seby.doh-2.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.seby.doh-2.lua
deleted file mode 100644 (file)
index 6746e50..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh-2.seby.io",
-       label = _("Seby DNS - AU"),
-       resolver_url = "https://doh-2.seby.io/dns-query",
-       bootstrap_dns = "45.76.113.31,139.99.222.72",
-       help_link = "https://dns.seby.io/",
-       help_link_text = "Seby.io"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/jp.iij.dns.public.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/jp.iij.dns.public.lua
deleted file mode 100644 (file)
index bd7660e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "public.dns.iij.jp",
-       label = _("IIJ Public DNS - JP"),
-       resolver_url = "https://public.dns.iij.jp/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://www.iij.ad.jp/",
-       help_link_text = "IIJ.ad.jp"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/lu.restena.kaitain.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/lu.restena.kaitain.lua
deleted file mode 100644 (file)
index 474a47b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "kaitain.restena.lu",
-       label = _("Restena DNS - LU"),
-       resolver_url = "https://kaitain.restena.lu/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://www.restena.lu/en/service/public-dns-resolver",
-       help_link_text = "Restena.lu"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.au.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.au.doh.lua
deleted file mode 100644 (file)
index 4105111..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.au.ahadns.net",
-       label = _("AhaDNS - AU (Block Malware + Ads)"),
-       resolver_url = "https://doh.au.ahadns.net/dns-query",
-       bootstrap_dns = "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
-       help_link = "https://ahadns.com/dns-over-https/",
-       help_link_text = "AhaDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.chi.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.chi.doh.lua
deleted file mode 100644 (file)
index 382893e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.chi.ahadns.net",
-       label = _("AhaDNS - US/Chicago (Block Malware + Ads)"),
-       resolver_url = "https://doh.chi.ahadns.net/dns-query",
-       bootstrap_dns = "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
-       help_link = "https://ahadns.com/dns-over-https/",
-       help_link_text = "AhaDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.es.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.es.doh.lua
deleted file mode 100644 (file)
index 3ebbcc4..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.es.ahadns.net",
-       label = _("AhaDNS - ES (Block Malware + Ads)"),
-       resolver_url = "https://doh.es.ahadns.net/dns-query",
-       bootstrap_dns = "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
-       help_link = "https://ahadns.com/dns-over-https/",
-       help_link_text = "AhaDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.in.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.in.doh.lua
deleted file mode 100644 (file)
index c2a128e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.in.ahadns.net",
-       label = _("AhaDNS - IN (Block Malware + Ads)"),
-       resolver_url = "https://doh.in.ahadns.net/dns-query",
-       bootstrap_dns = "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
-       help_link = "https://ahadns.com/dns-over-https/",
-       help_link_text = "AhaDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.it.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.it.doh.lua
deleted file mode 100644 (file)
index 7c2d1a5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.it.ahadns.net",
-       label = _("AhaDNS - IT (Block Malware + Ads)"),
-       resolver_url = "https://doh.it.ahadns.net/dns-query",
-       bootstrap_dns = "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
-       help_link = "https://ahadns.com/dns-over-https/",
-       help_link_text = "AhaDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.la.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.la.doh.lua
deleted file mode 100644 (file)
index 7d643cf..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.la.ahadns.net",
-       label = _("AhaDNS - US/Los Angeles (Block Malware + Ads)"),
-       resolver_url = "https://doh.la.ahadns.net/dns-query",
-       bootstrap_dns = "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
-       help_link = "https://ahadns.com/dns-over-https/",
-       help_link_text = "AhaDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.nl.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.nl.doh.lua
deleted file mode 100644 (file)
index ce709d1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.nl.ahadns.net",
-       label = _("AhaDNS - NL (Block Malware + Ads)"),
-       resolver_url = "https://doh.nl.ahadns.net/dns-query",
-       bootstrap_dns = "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
-       help_link = "https://ahadns.com/dns-over-https/",
-       help_link_text = "AhaDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.no.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.no.doh.lua
deleted file mode 100644 (file)
index d89ccfb..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.no.ahadns.net",
-       label = _("AhaDNS - NO (Block Malware + Ads)"),
-       resolver_url = "https://doh.no.ahadns.net/dns-query",
-       bootstrap_dns = "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
-       help_link = "https://ahadns.com/dns-over-https/",
-       help_link_text = "AhaDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.ny.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.ny.doh.lua
deleted file mode 100644 (file)
index 6451ae9..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.ny.ahadns.net",
-       label = _("AhaDNS - US/New York (Block Malware + Ads)"),
-       resolver_url = "https://doh.ny.ahadns.net/dns-query",
-       bootstrap_dns = "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
-       help_link = "https://ahadns.com/dns-over-https/",
-       help_link_text = "AhaDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.pl.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.pl.doh.lua
deleted file mode 100644 (file)
index f5563a5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.pl.ahadns.net",
-       label = _("AhaDNS - PL (Block Malware + Ads)"),
-       resolver_url = "https://doh.pl.ahadns.net/dns-query",
-       bootstrap_dns = "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
-       help_link = "https://ahadns.com/dns-over-https/",
-       help_link_text = "AhaDNS.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.applied-privacy.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.applied-privacy.lua
deleted file mode 100644 (file)
index 11f738c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.applied-privacy.net",
-       label = _("Applied Privacy DNS - AT/DE"),
-       resolver_url = "https://doh.applied-privacy.net/query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://applied-privacy.net/services/dns/",
-       help_link_text = "Applied-Privacy.net"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.cfiec.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.cfiec.dns.lua
deleted file mode 100644 (file)
index d64f5c0..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-return {
-       name = "dns.cfiec.net",
-       label = _("CFIEC Public DNS (IPv6 Only)"),
-       resolver_url = "https://dns.cfiec.net/dns-query",
-       bootstrap_dns = "240C::6666,240C::6644"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ffmuc.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ffmuc.doh.lua
deleted file mode 100644 (file)
index 8358208..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.ffmuc.net",
-       label = _("FFMUC DNS - DE"),
-       resolver_url = "https://doh.ffmuc.net/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://ffmuc.net/wiki/doku.php?id=knb:dohdot",
-       help_link_text = "FFMUC.net"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.he.ordns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.he.ordns.lua
deleted file mode 100644 (file)
index 24a4f40..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "ordns.he.net",
-       label = _("Hurricane Electric"),
-       resolver_url = "https://ordns.he.net/dns-query",
-       bootstrap_dns = "74.82.42.42,2001:470:20::2",
-       help_link = "https://forums.he.net/index.php?topic=3996.0",
-       help_link_text = "he.net"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.idnet.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.idnet.doh.lua
deleted file mode 100644 (file)
index 9213b99..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-return{
-       name = "doh.idnet.net",
-       label = _("IDNet.net - UK"),
-       resolver_url = "https://doh.idnet.net/dns-query",
-       bootstrap_dns = "212.69.36.23,212.69.40.23"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.adblocker.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.adblocker.lua
deleted file mode 100644 (file)
index f5a37fa..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-return {
-       name="adblock.doh.mullvad.net",
-       label=_("Mullvad (AdBlock)"),
-       resolver_url="https://adblock.doh.mullvad.net/dns-query",
-       bootstrap_dns="1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link="https://mullvad.net/en/help/dns-over-https-and-dns-over-tls/",
-       help_link_text="Mullvad.net",
-       http2_only = true
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.lua
deleted file mode 100644 (file)
index 2857f64..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-return {
-       name="doh.mullvad.net",
-       label=_("Mullvad"),
-       resolver_url="https://doh.mullvad.net/dns-query",
-       bootstrap_dns="1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link="https://mullvad.net/en/help/dns-over-https-and-dns-over-tls/",
-       help_link_text="Mullvad.net",
-       http2_only = true
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua
deleted file mode 100644 (file)
index c627be3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns.quad9.net",
-       label = _("Quad 9 (Recommended)"),
-       resolver_url = "https://dns.quad9.net/dns-query",
-       bootstrap_dns = "9.9.9.9,149.112.112.112,2620:fe::fe,2620:fe::9",
-       help_link = "https://www.quad9.net/doh-quad9-dns-servers/",
-       help_link_text = "Quad9.net"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua
deleted file mode 100644 (file)
index 7abbdc4..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns10.quad9.net",
-       label = _("Quad 9 (Unsecured)"),
-       resolver_url = "https://dns10.quad9.net/dns-query",
-       bootstrap_dns = "9.9.9.10,149.112.112.10,2620:fe::10,2620:fe::fe:10",
-       help_link = "https://www.quad9.net/doh-quad9-dns-servers/",
-       help_link_text = "Quad9.net"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua
deleted file mode 100644 (file)
index 7e7dcdd..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns11.quad9.net",
-       label = _("Quad 9 (Secured with ECS Support)"),
-       resolver_url = "https://dns11.quad9.net/dns-query",
-       bootstrap_dns = "9.9.9.11,149.112.112.11,2620:fe::11,2620:fe::fe:11",
-       help_link = "https://www.quad9.net/doh-quad9-dns-servers/",
-       help_link_text = "Quad9.net"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua
deleted file mode 100644 (file)
index 6c2994a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns9.quad9.net",
-       label = _("Quad 9 (Secured)"),
-       resolver_url = "https://dns9.quad9.net/dns-query",
-       bootstrap_dns = "9.9.9.9,149.112.112.9,2620:fe::fe,2620:fe::9",
-       help_link = "https://www.quad9.net/doh-quad9-dns-servers/",
-       help_link_text = "Quad9.net"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.dns.lua
deleted file mode 100644 (file)
index fe42ae3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-return {
-       name = "dns.comss.one",
-       label = _("Comss.ru DNS (West)"),
-       resolver_url = "https://dns.comss.one/dns-query",
-       bootstrap_dns = "92.38.152.163,93.115.24.204,2a03:90c0:56::1a5,2a02:7b40:5eb0:e95d::1"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.east.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.east.dns.lua
deleted file mode 100644 (file)
index 9aff7f2..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-return {
-       name = "dns.east.comss.one",
-       label = _("Comss.ru DNS (East)"),
-       resolver_url = "https://dns.east.comss.one/dns-query",
-       bootstrap_dns = "92.223.109.31,91.230.211.67,2a03:90c0:b5::1a,2a04:2fc0:39::47"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua
deleted file mode 100644 (file)
index 09b3e25..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.cleanbrowsing.org-doh-adult-filter",
-       label = _("CleanBrowsing (Adult Filter)"),
-       resolver_url = "https://doh.cleanbrowsing.org/doh/adult-filter/",
-       bootstrap_dns = "185.228.168.168,1.1.1.1",
-       help_link = "https://cleanbrowsing.org/guides/dnsoverhttps",
-       help_link_text = "CleanBrowsing.org"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua
deleted file mode 100644 (file)
index cd55277..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.cleanbrowsing.org-doh-family-filter",
-       label = _("CleanBrowsing (Family Filter)"),
-       resolver_url = "https://doh.cleanbrowsing.org/doh/family-filter/",
-       bootstrap_dns = "185.228.168.168,1.1.1.1",
-       help_link = "https://cleanbrowsing.org/guides/dnsoverhttps",
-       help_link_text = "CleanBrowsing.org"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua
deleted file mode 100644 (file)
index 339a0c2..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "doh.cleanbrowsing.org-doh-security-filter",
-       label = _("CleanBrowsing (Security Filter)"),
-       resolver_url = "https://doh.cleanbrowsing.org/doh/security-filter/",
-       bootstrap_dns = "185.228.168.168,1.1.1.1",
-       help_link = "https://cleanbrowsing.org/guides/dnsoverhttps",
-       help_link_text = "CleanBrowsing.org"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.snopyta.dns.doh.fi.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.snopyta.dns.doh.fi.lua
deleted file mode 100644 (file)
index b89b27d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "fi.doh.dns.snopyta.org",
-       label = _("Snopyta DNS - FI"),
-       resolver_url = "https://fi.doh.dns.snopyta.org/dns-query",
-       bootstrap_dns = "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
-       help_link = "https://snopyta.org/service/dns/",
-       help_link_text = "Snopyta.org"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/pub.doh.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/pub.doh.lua
deleted file mode 100644 (file)
index 1dfee88..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return{
-       name = "doh.pub",
-       label = _("DNSPod Public DNS - CN"),
-       resolver_url = "https://doh.pub/dns-query",
-       bootstrap_dns = "119.29.29.29,119.28.28.28",
-       help_link = "https://www.dnspod.com/Products/Public.DNS",
-       help_link_text = "DNSPod.com"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/sb.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/sb.dns.lua
deleted file mode 100644 (file)
index 5b23d3d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-return {
-       name = "doh.dns.sb",
-       label = _("DNS.SB"),
-       resolver_url = "https://doh.dns.sb/dns-query",
-       bootstrap_dns = "185.222.222.222,185.184.222.222",
-       http2_only = true,
-       help_link = "https://dns.sb/doh/",
-       help_link_text = "DNS.sb"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/tw.twnic.dns.lua b/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/tw.twnic.dns.lua
deleted file mode 100644 (file)
index 628dd8b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-return {
-       name = "dns.twnic.tw",
-       label = _("Quad 101 - TW"),
-       resolver_url = "https://dns.twnic.tw/dns-query",
-       bootstrap_dns = "101.101.101.101,101.102.103.104,2001:de4::101,2001:de4::102",
-       help_link = "https://blog.twnic.tw/2018/12/28/1803/",
-       help_link_text = "TWNIC.tw"
-}
diff --git a/applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua b/applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua
deleted file mode 100644 (file)
index 8fa613a..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-local sys = require "luci.sys"
-local util = require "luci.util"
-local fs = require "nixio.fs"
-local dispatcher = require "luci.dispatcher"
-local i18n = require "luci.i18n"
-local uci = require("luci.model.uci").cursor()
-
-local packageName = "https-dns-proxy"
-local readmeURL = "https://docs.openwrt.melmac.net/" .. packageName .. "/"
-local providers_dir = "/usr/lib/lua/luci/" .. packageName .. "/providers/"
-local helperText = ""
-local http2Supported = false
-
-function getPackageVersion()
-       local opkgFile = "/usr/lib/opkg/status"
-       local line
-       local flag = false
-       for line in io.lines(opkgFile) do
-               if flag then
-                       return line:match('[%d%.$-]+') or ""
-               elseif line:find("Package: " .. packageName:gsub("%-", "%%%-")) then
-                       flag = true
-               end
-       end
-       return ""
-end
-
-function createHelperText()
-       local initText = translate("For more information on different options check") .. " "
-       for filename in fs.dir(providers_dir) do
-               local p_func = loadfile(providers_dir .. filename)
-               setfenv(p_func, { _ = i18n.translate })
-               local p = p_func()
-               if p.help_link and (not p.http2_only or http2Supported) then
-                       local url, domain
-                       url = p.help_link
-                       domain = p.help_link_text or url:match('^%w+://([^/]+)')
-                       if not helperText:find(domain) then
-                               if helperText == "" then
-                                       helperText = initText
-                               else
-                                       helperText = helperText .. ", "
-                               end
-                               helperText = helperText .. [[<a href="]] .. url .. [[" target="_blank">]] .. domain .. [[</a>]]
-                       end
-               end
-       end
-       if helperText ~= "" then
-               local a = helperText:gsub('(.*),%s.*$', '%1')
-               helperText = a .. " " .. translate("and") .. helperText:sub(#a + 2) .. "."
-       end
-end
-
-function getProviderName(value)
-       for filename in fs.dir(providers_dir) do
-               local p_func = loadfile(providers_dir .. filename)
-               setfenv(p_func, { _ = i18n.translate })
-               local p = p_func()
-               value = value:gsub('[%p%c%s]', '')
-               p.url_match = p.resolver_url:gsub('[%p%c%s]', '')
-               if value:match(p.url_match) then
-                       return p.label
-               end
-       end
-       return translate("Unknown Provider")
-end
-
-local packageStatus, packageStatusCode
-local ubusStatus = util.ubus("service", "list", { name = packageName })
-local packageVersion = getPackageVersion()
-
-if packageVersion == "" then
-       packageStatusCode, packageStatus = -1, translatef("%s is not installed or not found", packageName)
-else  
-       packageStatusCode, packageStatus = 1, ""
-       for n = 1,20 do
-               if ubusStatus and ubusStatus[packageName] and 
-                        ubusStatus[packageName]["instances"] and 
-                        ubusStatus[packageName]["instances"]["instance" .. n] and 
-                        ubusStatus[packageName]["instances"]["instance" .. n]["running"] then
-                       local value, k, v, url, url_flag, la, la_flag, lp, lp_flag
-                       for k, v in pairs(ubusStatus[packageName]["instances"]["instance" .. n]["command"]) do
-                               if la_flag then la, la_flag = v, false end
-                               if lp_flag then lp, lp_flag = v, false end
-                               if url_flag then url, url_flag = v, false end
-                               if v == "-a" then la_flag = true end
-                               if v == "-p" then lp_flag = true end
-                               if v == "-r" then url_flag = true end
-                       end
-                       la = la or "127.0.0.1"
-                       lp = lp or n + 5053
-                       packageStatus = packageStatus .. translatef("%s DoH at %s:%s", getProviderName(url), la, lp) .. "\n"
-               else
-                       break
-               end
-       end
-       if packageStatus == "" then
-               packageStatusCode = 0
-               packageStatus = translate("Stopped")
-               if not sys.init.enabled(packageName) then
-                       packageStatus = packageStatus .. " (" .. translate("disabled") .. ")"
-               end
-       end
-end
-
-if sys.call("grep -q 'Provides: libnghttp2' /usr/lib/opkg/status") == 0 then
-       http2Supported = true
-end
-
-m = Map("https-dns-proxy", translate("DNS HTTPS Proxy Settings"))
-
-h = m:section(TypedSection, "_dummy", translatef("Service Status [%s %s]", packageName, packageVersion))
-h.template = "cbi/nullsection"
-ss = h:option(DummyValue, "_dummy", translate("Service Status"))
-ss.template = packageName .. "/status"
-ss.value = packageStatus
-if packageStatusCode ~= -1 then
-       buttons = h:option(DummyValue, "_dummy", translate("Service Control"))
-       buttons.template = packageName .. "/buttons"
-end
-
-c = m:section(NamedSection, "config", "https-dns-proxy", translate("Configuration"))
-d1 = c:option(ListValue, "dnsmasq_config_update", translate("Update DNSMASQ Config on Start/Stop"), translatef("If update option is selected, the 'DNS forwardings' section of %sDHCP and DNS%s will be automatically updated to use selected DoH providers (%smore information%s).", "<a href=\"" .. dispatcher.build_url("admin/network/dhcp") .. "\">", "</a>", "<a href=\"" .. readmeURL .. "#default-settings" .. "\" target=\"_blank\">", "</a>"))
-d1:value('*', translate("Update all configs"))
-local dnsmasq_num = 0
-uci:foreach("dhcp", "dnsmasq", function(s)
-d1:value(tostring(dnsmasq_num), translatef("Update %s config", "dhcp.@dnsmasq[" .. tostring(dnsmasq_num) .. "]"))
-dnsmasq_num = dnsmasq_num + 1
-end)
-d1:value('-', translate("Do not update configs"))
-d1.default = '*'
-f1 = c:option(ListValue, "force_dns", translate("Force Router DNS"), translate("Forces Router DNS use on local devices, also known as DNS Hijacking."))
-f1:value("0", translate("Let local devices use their own DNS servers if set"))
-f1:value("1", translate("Force Router DNS server to all local devices"))
-f1.default = "1"
-cdi = c:option(ListValue, "canary_domains_icloud", translate("Canary Domains iCloud"), translatef("Blocks access to iCloud Private Relay resolvers, forcing local devices to use router for DNS resolution (%smore information%s).", "<a href=\"" .. readmeURL .. "#canary_domains_icloud" .. "\" target=\"_blank\">", "</a>"))
-cdi:value("0", translate("Let local devices use iCloud Private Relay"))
-cdi:value("1", translate("Force Router DNS server to all local devices"))
-cdi:depends({force_dns="1"}) 
-cdi.default = "1"
-cdm = c:option(ListValue, "canary_domains_mozilla", translate("Canary Domains Mozilla"), translatef("Blocks access to Mozilla resolvers, forcing local devices to use router for DNS resolution (%smore information%s).", "<a href=\"" .. readmeURL .. "#canary_domains_mozilla" .. "\" target=\"_blank\">", "</a>"))
-cdm:value("0", translate("Let local devices use Mozilla resolvers"))
-cdm:value("1", translate("Force Router DNS server to all local devices"))
-cdm:depends({force_dns="1"}) 
-cdm.default = "1"
-
-createHelperText()
-s3 = m:section(TypedSection, "https-dns-proxy", translate("Instances"), 
-       helperText)
-s3.template = "cbi/tblsection"
-s3.sortable  = false
-s3.anonymous = true
-s3.addremove = true
-
-prov = s3:option(ListValue, "resolver_url", translate("Resolver"))
-for filename in fs.dir(providers_dir) do
-       local p_func = loadfile(providers_dir .. filename)
-       setfenv(p_func, { _ = i18n.translate })
-       local p = p_func()
-       if not p.http2_only or http2Supported then
-               prov:value(p.resolver_url, p.label)
-       end
-       if p.default then
-               prov.default = p.resolver_url
-       end
-end
-prov.forcewrite = true
-prov.write = function(self, section, value)
-       if not value then return end
-       for filename in fs.dir(providers_dir) do
-               local p_func = loadfile(providers_dir .. filename)
-               setfenv(p_func, { _ = i18n.translate })
-               local p = p_func()
-               value = value:gsub('[%p%c%s]', '')
-               p.url_match = p.resolver_url:gsub('[%p%c%s]', '')
-               if value:match(p.url_match) then
-                       if p.bootstrap_dns then
-                               uci:set(packageName, section, "bootstrap_dns", p.bootstrap_dns)
-                       end
-                       if p.resolver_url then
-                               uci:set(packageName, section, "resolver_url", p.resolver_url)
-                       end
-               end
-       end
-       uci:save(packageName)
-end
-
-la = s3:option(Value, "listen_addr", translate("Listen Address"))
-la.datatype    = "host"
-la.placeholder = "127.0.0.1"
-la.rmempty     = true
-
-local n = 0
-uci:foreach(packageName, packageName, function(s)
-               if s[".name"] == section then
-                               return false
-               end
-               n = n + 1
-end)
-
-lp = s3:option(Value, "listen_port", translate("Listen Port"))
-lp.datatype = "port"
-lp.value    = n + 5053
-
-dscp = s3:option(Value, "dscp_codepoint", translate("DSCP Codepoint"))
-dscp.datatype = "range(0,63)"
-dscp.rmempty  = true
-
-ps = s3:option(Value, "proxy_server", translate("Proxy Server"))
-ps.rmempty  = true
-
-return m
diff --git a/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm b/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm
deleted file mode 100644 (file)
index 6fd7ebd..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<%# Copyright 2020 Stan Grishin <stangri@melmac.ca> -%>
-
-<%+https-dns-proxy/css%>
-<%+https-dns-proxy/js%>
-
-<%-
-       local packageName = "https-dns-proxy"
-       local serviceRunning, serviceEnabled = false, false;
-
-       serviceEnabled = luci.sys.init.enabled(packageName)
-       local ubusStatus = luci.util.ubus("service", "list", { name = packageName })
-       if ubusStatus and ubusStatus[packageName] then
-               serviceRunning = true
-       end
-
-       if serviceEnabled then
-               btn_start_status = true
-               btn_action_status = true
-               btn_stop_status = true
-               btn_enable_status = false
-               btn_disable_status = true
-       else
-               btn_start_status = false
-               btn_action_status = false
-               btn_stop_status = false
-               btn_enable_status = true
-               btn_disable_status = false
-       end
-       if serviceRunning then
-               btn_start_status = false
-               btn_action_status = true
-               btn_stop_status = true
-       else
-               btn_action_status = false
-               btn_stop_status = false
-       end
--%>
-
-<%+cbi/valueheader%>
-       <input type="button" class="btn cbi-button cbi-button-apply" id="btn_start" name="start" value="<%:Start%>"
-               onclick="button_action(this)" />
-       <span id="btn_start_spinner" class="btn_spinner"></span>
-       <input type="button" class="btn cbi-button cbi-button-apply" id="btn_action" name="action" value="<%:Reload%>"
-               onclick="button_action(this)" />
-       <span id="btn_action_spinner" class="btn_spinner"></span>
-       <input type="button" class="btn cbi-button cbi-button-reset" id="btn_stop" name="stop" value="<%:Stop%>"
-               onclick="button_action(this)" />
-       <span id="btn_stop_spinner" class="btn_spinner"></span>
-       &#160;
-       &#160;
-       &#160;
-       &#160;
-       <input type="button" class="btn cbi-button cbi-button-apply" id="btn_enable" name="enable" value="<%:Enable%>"
-               onclick="button_action(this)" />
-       <span id="btn_enable_spinner" class="btn_spinner"></span>
-       <input type="button" class="btn cbi-button cbi-button-reset" id="btn_disable" name="disable" value="<%:Disable%>"
-               onclick="button_action(this)" />
-       <span id="btn_disable_spinner" class="btn_spinner"></span>
-<%+cbi/valuefooter%>
-
-<%-if not btn_start_status then%>
-<script type="text/javascript">document.getElementById("btn_start").disabled = true;</script>
-<%-end%>
-<%-if not btn_action_status then%>
-<script type="text/javascript">document.getElementById("btn_action").disabled = true;</script>
-<%-end%>
-<%-if not btn_stop_status then%>
-<script type="text/javascript">document.getElementById("btn_stop").disabled = true;</script>
-<%-end%>
-<%-if not btn_enable_status then%>
-<script type="text/javascript">document.getElementById("btn_enable").disabled = true;</script>
-<%-end%>
-<%-if not btn_disable_status then%>
-<script type="text/javascript">document.getElementById("btn_disable").disabled = true;</script>
-<%-end%>
diff --git a/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm b/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm
deleted file mode 100644 (file)
index 6fb3d51..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<style type="text/css">
-       .btn_spinner
-       {
-               display: inline-block;
-               width: 0px;
-               height: 16px;
-               margin: 0 0px;
-       }
-</style>
diff --git a/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm b/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm
deleted file mode 100644 (file)
index fac92a3..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-
-<script type="text/javascript">
-//<![CDATA[
- function button_action(action) {
-       var xhr = new XHR(false);
-       var btn_start = document.getElementById("btn_start");
-       var btn_action = document.getElementById("btn_action");
-       var btn_stop = document.getElementById("btn_stop");
-       var btn_enable = document.getElementById("btn_enable");
-       var btn_disable = document.getElementById("btn_disable");
-       var btn_spinner;
-       switch (action.name) {
-               case "start":
-                       btn_spinner = document.getElementById("btn_start_spinner");
-                       break;
-               case "action":
-                       btn_spinner = document.getElementById("btn_action_spinner");
-                       break;
-               case "stop":
-                       btn_spinner = document.getElementById("btn_stop_spinner");
-                       break;
-               case "enable":
-                       btn_spinner = document.getElementById("btn_enable_spinner");
-                       break;
-               case "disable":
-                       btn_spinner = document.getElementById("btn_disable_spinner");
-                       break;
-       }
-       btn_start.disabled = true;
-       btn_action.disabled = true;
-       btn_stop.disabled = true;
-       btn_enable.disabled = true;
-       btn_disable.disabled = true;
-       spinner(btn_spinner, 1);
-       xhr.get('<%=luci.dispatcher.build_url("admin", "services", "https-dns-proxy", "action")%>/' + action.name, null,
-               function (x) {
-                       if (!x) {
-                               return;
-                       }
-                       btn_start.disabled = false;
-                       btn_action.disabled = false;
-                       btn_stop.disabled = false;
-                       btn_enable.disabled = false;
-                       btn_disable.disabled = false;
-                       spinner(btn_spinner, 0);
-                       location.reload();
-                });
-}
-function spinner(element, state) {
-       if (state === 1) {
-               element.style.width = "16px";
-               element.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" />';
-       }
-       else {
-               element.style.width = "0px";
-               element.innerHTML = '';
-       }
-}
-//]]>
-</script>
diff --git a/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm b/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm
deleted file mode 100644 (file)
index 3840cd1..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<%#
-Copyright 2017-2019 Stan Grishin (stangri@melmac.net)
-This is free software, licensed under the Apache License, Version 2.0
--%>
-
-<%+cbi/valueheader%>
-
-<textarea rows="<%=select(2, self:cfgvalue(section):gsub('\n', ''))%>"
-       style="border:none;box-shadow:none;background:transparent;font-weight:bold;line-height:20px;width:50em;padding:none;margin:6px;resize:none;overflow:hidden;"
-       disabled="disabled"><%=self:cfgvalue(section)%>
-</textarea>
-
-<%+cbi/valuefooter%>
diff --git a/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm b/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm
deleted file mode 100644 (file)
index b02c7fa..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<%#
-Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
-This is free software, licensed under the Apache License, Version 2.0
--%>
-
-<%+cbi/valueheader%>
-
-<div style="font-weight:bold;">
-       <%=self:cfgvalue(section):gsub('\n', '<br />' )%>
-</div>
-
-<%+cbi/valuefooter%>
index 13ad80e72471887e700814d14de2c9e06329d678..f2019142fb398bf64e27d602b509a8f0b4b73794 100644 (file)
 msgid ""
 msgstr "Content-Type: text/plain; charset=UTF-8"
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:92
-msgid "%s DoH at %s:%s"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:258
+msgid "%s%s%s proxy at %s on port %s.%s"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:73
-msgid "%s is not installed or not found"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:250
+msgid "%s%s%s proxy on port %s.%s"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.360.doh.lua:3
-msgid "360 Secure DNS - CN"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua:3
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-family.lua:3
-msgid "AdGuard (Family Protection)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-nonfiltering.lua:3
-msgid "AdGuard (Non-filtering)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua:3
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns.lua:3
-msgid "AdGuard (Standard)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.au.doh.lua:3
-msgid "AhaDNS - AU (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.es.doh.lua:3
-msgid "AhaDNS - ES (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.in.doh.lua:3
-msgid "AhaDNS - IN (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.it.doh.lua:3
-msgid "AhaDNS - IT (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.nl.doh.lua:3
-msgid "AhaDNS - NL (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.no.doh.lua:3
-msgid "AhaDNS - NO (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.pl.doh.lua:3
-msgid "AhaDNS - PL (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.chi.doh.lua:3
-msgid "AhaDNS - US/Chicago (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.la.doh.lua:3
-msgid "AhaDNS - US/Los Angeles (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.ny.doh.lua:3
-msgid "AhaDNS - US/New York (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.ahadns.blitz.lua:3
-msgid "AhaDNS Blitz (Configurable)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.alidns.dns.lua:3
-msgid "AliDNS - CN"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.applied-privacy.lua:3
-msgid "Applied Privacy DNS - AT/DE"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-ch.lua:3
-msgid "BlahDNS - CH"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-de.lua:3
-msgid "BlahDNS - DE"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-fi.lua:3
-msgid "BlahDNS - FI"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-jp.lua:3
-msgid "BlahDNS - JP"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-sg.lua:3
-msgid "BlahDNS - SG"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:141
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:136
 msgid ""
-"Blocks access to Mozilla resolvers, forcing local devices to use router for "
-"DNS resolution (%smore information%s)."
+"Blocks access to Mozilla Encrypted resolvers, forcing local devices to use "
+"router for DNS resolution (%smore information%s)."
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:136
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:120
 msgid ""
 "Blocks access to iCloud Private Relay resolvers, forcing local devices to "
 "use router for DNS resolution (%smore information%s)."
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.cfiec.dns.lua:3
-msgid "CFIEC Public DNS (IPv6 Only)"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:316
+msgid "Bootstrap DNS"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.family.lua:3
-msgid "CIRA Canadian Shield (Family)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.private.lua:3
-msgid "CIRA Canadian Shield (Private)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.protected.lua:3
-msgid "CIRA Canadian Shield (Protected)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:141
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:134
 msgid "Canary Domains Mozilla"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:136
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:118
 msgid "Canary Domains iCloud"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua:3
-msgid "CleanBrowsing (Adult Filter)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua:3
-msgid "CleanBrowsing (Family Filter)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua:3
-msgid "CleanBrowsing (Security Filter)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua:3
-msgid "Cloudflare"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.family.lua:3
-msgid "Cloudflare (Family Protection)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.security.lua:3
-msgid "Cloudflare (Security Protection)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.east.dns.lua:3
-msgid "Comss.ru DNS (East)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.dns.lua:3
-msgid "Comss.ru DNS (West)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:122
-msgid "Configuration"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads-social.lua:3
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p3.lua:3
-msgid "ControlD (Block Malware + Ads + Social)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads.lua:3
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p2.lua:3
-msgid "ControlD (Block Malware + Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware.lua:3
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p1.lua:3
-msgid "ControlD (Block Malware)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.family.lua:3
-msgid "ControlD (Family)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p0.lua:3
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.unfiltered.lua:3
-msgid "ControlD (Unfiltered)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnsforfamily.dns-doh.lua:3
-msgid "DNS For Family"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/de.dnsforge.lua:3
-msgid "DNS Forge - DE"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua:4
-msgid "DNS HTTPS Proxy"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:110
-msgid "DNS HTTPS Proxy Settings"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/sb.dns.lua:3
-msgid "DNS.SB"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns1.lua:3
-msgid "DNSCrypt.ca (DNS1)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns2.lua:3
-msgid "DNSCrypt.ca (DNS2)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/pub.doh.lua:3
-msgid "DNSPod Public DNS - CN"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnslify.doh.lua:3
-msgid "DNSlify DNS"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:205
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:339
 msgid "DSCP Codepoint"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.decloudus.dns.lua:3
-msgid "DeCloudUs DNS"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.lua:3
-msgid "Digitale Gesellschaft - CH"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:376
+msgid "Disable"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:56
-msgid "Disable"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:370
+msgid "Disabling %s service"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:130
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:102
 msgid "Do not update configs"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:53
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:357
 msgid "Enable"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ffmuc.doh.lua:3
-msgid "FFMUC DNS - DE"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:351
+msgid "Enabling %s service"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:29
-msgid "For more information on different options check"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:171
+msgid "Force DNS ports:"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:132
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:108
 msgid "Force Router DNS"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:134
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:138
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:143
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:112
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:127
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:146
 msgid "Force Router DNS server to all local devices"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:132
-msgid "Forces Router DNS use on local devices, also known as DNS Hijacking."
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:367
+msgid "Force use of HTTP/1"
+msgstr ""
+
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:378
+msgid "Force use of IPv6 DNS resolvers"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua:3
-msgid "Google"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:109
+msgid "Forces Router DNS use on local devices, also known as DNS Hijacking."
 msgstr ""
 
 #: applications/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json:3
 msgid "Grant UCI and file access for luci-app-https-dns-proxy"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.he.ordns.lua:3
-msgid "Hurricane Electric"
+#: applications/luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json:3
+msgid "HTTPS DNS Proxy"
+msgstr ""
+
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:72
+msgid "HTTPS DNS Proxy - Configuration"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.idnet.doh.lua:3
-msgid "IDNet.net - UK"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:173
+msgid "HTTPS DNS Proxy - Instances"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/jp.iij.dns.public.lua:3
-msgid "IIJ Public DNS - JP"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:161
+msgid "HTTPS DNS Proxy - Status"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:123
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:80
 msgid ""
-"If update option is selected, the 'DNS forwardings' section of %sDHCP and "
+"If update option is selected, the %s'DNS forwardings' section of DHCP and "
 "DNS%s will be automatically updated to use selected DoH providers (%smore "
 "information%s)."
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:148
-msgid "Instances"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/fi.lelux.resolver-eu.lua:3
-msgid "Lelux DNS - FI"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:145
+msgid "Let local devices use Mozilla Private Relay"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:142
-msgid "Let local devices use Mozilla resolvers"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:137
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:126
 msgid "Let local devices use iCloud Private Relay"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:133
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:111
 msgid "Let local devices use their own DNS servers if set"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua:3
-msgid "LibreDNS - GR"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua:3
-msgid "LibreDNS - GR (No Ads)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:188
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:320
 msgid "Listen Address"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:201
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:326
 msgid "Listen Port"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm:52
-msgid "Loading"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.lua:3
-msgid "Mullvad"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:349
+msgid "Logging File Path"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.adblocker.lua:3
-msgid "Mullvad (AdBlock)"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:344
+msgid "Logging Verbosity"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.nextdns.dns.lua:3
-msgid "NextDNS.io (Configurable)"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:187
+msgid "Not installed or not found"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua:3
-msgid "ODVR (nic.cz)"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:249
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:281
+msgid "Parameter"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.pumplex.dns.lua:3
-msgid "OSZX DNS (Pumplex)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/co.osxz.dns.lua:3
-msgid "OSZX DNS - UK"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:154
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:163
+msgid ""
+"Please note that %s is not supported on this system (%smore information%s)."
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.doh.lua:3
-msgid "OpenDNS"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:353
+msgid "Polling Interval"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.familyshield.doh.lua:3
-msgid "OpenDNS (Family Shield)"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:215
+msgid "Provider"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:209
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:358
 msgid "Proxy Server"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/tw.twnic.dns.lua:3
-msgid "Quad 101 - TW"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua:3
-msgid "Quad 9 (Recommended)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua:3
-msgid "Quad 9 (Secured with ECS Support)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua:3
-msgid "Quad 9 (Secured)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua:3
-msgid "Quad 9 (Unsecured)"
-msgstr ""
-
-#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:43
-msgid "Reload"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:319
+msgid "Restart"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:155
-msgid "Resolver"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:313
+msgid "Restarting %s service"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/lu.restena.kaitain.lua:3
-msgid "Restena DNS - LU"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:335
+msgid "Run As Group"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.rethinkdns.basic.lua:3
-msgid "Rethink DNS (Configurable)"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:331
+msgid "Run As User"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.seby.doh-2.lua:3
-msgid "Seby DNS - AU"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:203
+msgid "See the %sREADME%s for details."
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:118
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:402
 msgid "Service Control"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:114
-msgid "Service Status"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:201
+msgid "Service Instances"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:112
-msgid "Service Status [%s %s]"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:165
+msgid "Service Status"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.snopyta.dns.doh.fi.lua:3
-msgid "Snopyta DNS - FI"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:300
+msgid "Start"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:40
-msgid "Start"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:294
+msgid "Starting %s service"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm:46
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:338
 msgid "Stop"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:99
-msgid "Stopped"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:332
+msgid "Stopping %s service"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.switch.dns.lua:3
-msgid "Switch DNS - CH"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:211
+msgid "Unknown"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.jp.lua:3
-msgid "Tiarap Public DNS - JP"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:100
+msgid "Update %s only"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.doh.lua:3
-msgid "Tiarap Public DNS - SG"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:78
+msgid "Update DNSMASQ Config on Start/Stop"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.edu.tsinghua.tuna.dns.lua:3
-msgid "Tsinghua University Secure DNS - CN"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:88
+msgid "Update all configs"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:65
-msgid "Unknown Provider"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:362
+msgid "Use HTTP/1"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:127
-msgid "Update %s config"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:372
+msgid "Use IPv6 resolvers"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:123
-msgid "Update DNSMASQ Config on Start/Stop"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:377
+msgid "Use any family DNS resolvers"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:124
-msgid "Update all configs"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js:366
+msgid "Use negotiated HTTP version"
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:50
-msgid "and"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:169
+msgid "Version %s - Running."
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua:101
-msgid "disabled"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:181
+msgid "Version %s - Stopped (Disabled)."
 msgstr ""
 
-#: applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.rubyfish.dns.lua:3
-msgid "rubyfish.cn"
+#: applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js:179
+msgid "Version %s - Stopped."
 msgstr ""
diff --git a/applications/luci-app-https-dns-proxy/root/usr/libexec/rpcd/luci.https-dns-proxy b/applications/luci-app-https-dns-proxy/root/usr/libexec/rpcd/luci.https-dns-proxy
new file mode 100755 (executable)
index 0000000..8400af5
--- /dev/null
@@ -0,0 +1,206 @@
+#!/bin/sh
+# Copyright 2023 MOSSDeF, Stan Grishin (stangri@melmac.ca)
+# shellcheck disable=SC1091,SC2039,SC3043
+
+# TechRef: https://openwrt.org/docs/techref/rpcd
+
+# ubus -v list luci.https-dns-proxy
+# ubus -S call luci.https-dns-proxy getInitList '{"name": "https-dns-proxy" }'
+# ubus -S call luci.https-dns-proxy getInitStatus '{"name": "https-dns-proxy" }'
+# ubus -S call luci.https-dns-proxy getPlatformSupport '{"name": "https-dns-proxy" }'
+# ubus -S call luci.https-dns-proxy getProviders '{"name": "https-dns-proxy" }'
+# ubus -S call luci.https-dns-proxy getRuntime '{"name": "https-dns-proxy" }'
+
+readonly packageName="https-dns-proxy"
+readonly providersDir="/usr/share/${packageName}/providers"
+
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+
+is_enabled() { "/etc/init.d/${1}" enabled; }
+is_running() { [ "$(ubus call service list "{ 'name': '$1' }" | jsonfilter -q -e "@['$1'].instances[*].running" | uniq)" = 'true' ]; }
+get_version() { grep -m1 -A2 -w "^Package: $1$" /usr/lib/opkg/status | sed -n 's/Version: //p'; }
+check_http2() { grep -q 'Provides: libnghttp2' /usr/lib/opkg/status; }
+check_http3() { grep -q 'Provides: libnghttp3' /usr/lib/opkg/status; }
+ubus_get_ports() { ubus call service list "{ 'name': '$packageName' }" | jsonfilter -e "@['${packageName}'].instances[*].data.firewall.*.dest_port"; }
+logger() { /usr/bin/logger -t "$packageName" "$@"; }
+print_json_bool() { json_init; json_add_boolean "$1" "$2"; json_dump; json_cleanup; }
+
+get_init_list() {
+       local name="$1"
+       json_init
+       json_add_object "$name"
+       if is_enabled "$name"; then
+               json_add_boolean 'enabled' '1'
+       else
+               json_add_boolean 'enabled' '0'
+       fi
+       if is_running "$name"; then
+               json_add_boolean 'running' '1'
+       else
+               json_add_boolean 'running' '0'
+       fi
+       json_close_object
+       json_dump
+       json_cleanup
+}
+
+get_init_status() {
+       local name
+       local i ports
+       local version
+       name="$(basename "$1")"
+       name="${name:-$packageName}" 
+       ports="$(ubus_get_ports)"
+       [ -z "$version" ] && version="$(get_version "$name")"
+       json_init
+       json_add_object  "$name"
+       if is_enabled "$name"; then
+               json_add_boolean 'enabled' '1'
+       else
+               json_add_boolean 'enabled' '0'
+       fi
+       if is_running "$name"; then
+               json_add_boolean 'running' '1'
+       else
+               json_add_boolean 'running' '0'
+       fi
+       if [ -n "$ports" ]; then
+               json_add_boolean 'force_dns_active' '1'
+               json_add_array 'force_dns_ports'
+                       for i in $ports; do json_add_int '' "$i"; done
+               json_close_array
+       else
+               json_add_boolean 'force_dns_active' '0'
+       fi
+       json_add_string 'version' "$version"
+       json_close_array
+       json_close_object
+       json_dump
+       json_cleanup
+}
+
+get_platform_support() {
+       local name
+       name="$(basename "$1")"
+       name="${name:-$packageName}" 
+       json_init
+       json_add_object "$name"
+       if check_http2; then
+               json_add_boolean 'http2_support' '1'
+       else
+               json_add_boolean 'http2_support' '0'
+       fi
+       if check_http3; then
+               json_add_boolean 'http3_support' '1'
+       else
+               json_add_boolean 'http3_support' '0'
+       fi
+       json_close_object
+       json_dump
+       json_cleanup
+}
+
+get_providers() {
+       local f
+       echo '{"https-dns-proxy":['
+       for f in "$providersDir"/*; do
+               cat "$f"
+               echo ','
+       done
+#      echo '{ "title": "Custom", "template": "{option}", "params": { "option": { "type": "text", }, }, },'
+       echo ']}'
+}
+
+get_runtime() { ubus call service list "{ 'verbose': true, 'name': '$1' }"; }
+
+set_init_action() {
+       local name="$1" action="$2" cmd
+       case $action in
+               enable)
+                       cmd="/etc/init.d/${name} enable";;
+               disable)
+                       cmd="/etc/init.d/${name} disable";;
+               start|stop|restart)
+                       cmd="/etc/init.d/${name} ${action}";;
+       esac
+       if [ -n "$cmd" ] && eval "${cmd}" >/dev/null 2>&1; then
+               print_json_bool "result" '1'
+       else
+               print_json_bool "result" '0'
+       fi
+}
+
+case "$1" in
+       list)
+               json_init
+               json_add_object "getInitList"
+                       json_add_string 'name' "name"
+               json_close_object
+               json_add_object "getInitStatus"
+                       json_add_string 'name' 'name'
+               json_close_object
+               json_add_object "getPlatformSupport"
+                       json_add_string 'name' 'name'
+               json_close_object
+               json_add_object "getProviders"
+                       json_add_string 'name' "name"
+               json_close_object
+               json_add_object "getRuntime"
+                       json_add_string 'name' "name"
+               json_close_object
+               json_add_object "setInitAction"
+                       json_add_string 'name' "name"
+                       json_add_string 'action' "action"
+               json_close_object
+               json_dump
+               json_cleanup
+               ;;
+       call)
+               case "$2" in
+                       getInitList)
+                               read -r input
+                               json_load "$input"
+                               json_get_var name "name"
+                               json_cleanup
+                               get_init_list "$name"
+                               ;;
+                       getInitStatus)
+                               read -r input
+                               json_load "$input"
+                               json_get_var name 'name'
+                               json_cleanup
+                               get_init_status "$name"
+                               ;;
+                       getPlatformSupport)
+                               read -r input
+                               json_load "$input"
+                               json_get_var name 'name'
+                               json_cleanup
+                               get_platform_support "$name"
+                               ;;
+                       getProviders)
+                               read -r input
+                               json_load "$input"
+                               json_get_var name "name"
+                               json_cleanup
+                               get_providers "$name"
+                               ;;
+                       getRuntime)
+                               read -r input
+                               json_load "$input"
+                               json_get_var name "name"
+                               json_cleanup
+                               get_runtime "$name"
+                               ;;
+                       setInitAction)
+                               read -r input
+                               json_load "$input"
+                               json_get_var name "name"
+                               json_get_var action "action"
+                               json_cleanup
+                               set_init_action "$name" "$action"
+                               ;;
+               esac
+       ;;
+esac
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/app.tiarap.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/app.tiarap.doh.json
new file mode 100644 (file)
index 0000000..6fe4ec7
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "title": "Tiarap Public DNS (JP)",
+       "template": "https://doh.{option}/dns-query",
+       "bootstrap_dns": "172.104.93.80,2400:8902::f03c:91ff:feda:c514",
+       "help_link": "https://tiarap.org/",
+       "params": {
+               "option": {
+                       "description": "Variant",
+                       "type": "select",
+                       "regex": "(tiar.app|tiarap.org)",
+                       "options": [
+                               {
+                                       "value": "tiar.app",
+                                       "description": "Direct"
+                               },
+                               {
+                                       "value": "tiarap.org",
+                                       "description": "Cloudlfare Cached"
+                               }
+                       ],
+                       "default": "tiar.app"
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ca.cira.canadianshield.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ca.cira.canadianshield.json
new file mode 100644 (file)
index 0000000..9fd0f9a
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "title": "CIRA Canadian Shield",
+       "template": "https://{option}.canadianshield.cira.ca/dns-query",
+       "bootstrap_dns": "149.112.121.30,149.112.122.30,2620:10A:80BB::30,2620:10A:80BC::30",
+       "help_link": "https://www.cira.ca/cybersecurity-services/canadian-shield/",
+       "params": {
+               "option": {
+                       "description": "Variant",
+                       "type": "select",
+                       "regex": "(family|private|protected)",
+                       "options": [
+                               {
+                                       "value": "family",
+                                       "description": "Family Filter"
+                               },
+                               {
+                                       "value": "private",
+                                       "description": "Private Filter"
+                               },
+                               {
+                                       "value": "Protected",
+                                       "description": "Protected Filter"
+                               }
+                       ],
+                       "default": "private"
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.json
new file mode 100644 (file)
index 0000000..ec3b946
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "title": "Digitale Gesellschaft (CH)",
+       "template": "https://dns.digitale-gesellschaft.ch/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "http2_only": true,
+       "help_link": "https://www.digitale-gesellschaft.ch/dns/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ch.switch.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ch.switch.dns.json
new file mode 100644 (file)
index 0000000..19e3607
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "Switch DNS (CH)",
+       "template": "https://dns.switch.ch/dns-query",
+       "bootstrap_dns": "130.59.31.248,2001:620:0:ff::2",
+       "help_link": "https://www.switch.ch/security/info/public-dns/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cn.360.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cn.360.doh.json
new file mode 100644 (file)
index 0000000..ef97fa2
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "title": "DoH 360 DNS (CN)",
+       "template": "https://doh.360.cn/dns-query",
+       "bootstrap_dns": "101.226.4.6,218.30.118.6,123.125.81.6,140.207.198.6"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cn.rubyfish.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cn.rubyfish.dns.json
new file mode 100644 (file)
index 0000000..ee75e95
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "RubyFish (CN)",
+       "template": "https://dns.rubyfish.cn/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "http2_only": true
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/co.oszx.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/co.oszx.dns.json
new file mode 100644 (file)
index 0000000..943aca8
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "title": "OSZX DNS (UK)",
+       "template": "https://doh.{option}/dns-query",
+       "bootstrap_dns": "51.38.82.198,2001:41d0:801:2000::1b28",
+       "help_link": "https://dns.oszx.co/#mdoh",
+       "params": {
+               "option": {
+                       "description": "Variant",
+                       "type": "select",
+                       "regex": "(oszx.co|pumplex.com)",
+                       "options": [
+                               {
+                                       "value": "oszx.co",
+                                       "description": "AdBlocking Filter"
+                               },
+                               {
+                                       "value": "pumplex.com",
+                                       "description": "Standard"
+                               }
+                       ],
+                       "default": "oszx.co"
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.adguard.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.adguard.dns.json
new file mode 100644 (file)
index 0000000..f685ba4
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "title": "AdGuard",
+       "template": "https://dns{option}.adguard.com/dns-query",
+       "bootstrap_dns": "176.103.130.130,176.103.130.131",
+       "help_link": "https://adguard.com/en/adguard-dns/overview.html",
+       "params": {
+               "option": {
+                       "description": "Variant",
+                       "type": "select",
+                       "regex": "(-family|)",
+                       "options": [
+                               {
+                                       "value": "-family",
+                                       "description": "Family Filter"
+                               },
+                               {
+                                       "value": "",
+                                       "description": "Standard"
+                               }
+                       ],
+                       "default": ""
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.ahadns.blitz.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.ahadns.blitz.json
new file mode 100644 (file)
index 0000000..b2c463f
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "title": "AhaDNS Blitz",
+       "template": "https://blitz.ahadns.com/{option}",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://blitz-setup.ahadns.com/",
+       "params": {
+               "option": {
+                       "description": "Filters",
+                       "type": "text",
+                       "default": ""
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.alidns.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.alidns.dns.json
new file mode 100644 (file)
index 0000000..b32694b
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "title": "AliDNS",
+       "template": "https://dns.alidns.com/dns-query",
+       "bootstrap_dns": "223.5.5.5,223.6.6.6,2400:3200::1,2400:3200:baba::1"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.blahdns.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.blahdns.doh.json
new file mode 100644 (file)
index 0000000..a101c90
--- /dev/null
@@ -0,0 +1,36 @@
+{
+       "title": "BlahDNS",
+       "template": "https://doh-{option}.blahdns.com/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://blahdns.com/",
+       "params": {
+               "option": {
+                       "description": "Location",
+                       "type": "select",
+                       "regex": "(ch|de|fi|jp|sg)",
+                       "options": [
+                               {
+                                       "value": "ch",
+                                       "description": "Switzerland"
+                               },
+                               {
+                                       "value": "de",
+                                       "description": "Germany"
+                               },
+                               {
+                                       "value": "fi",
+                                       "description": "Finland"
+                               },
+                               {
+                                       "value": "jp",
+                                       "description": "Japan"
+                               },
+                               {
+                                       "value": "sg",
+                                       "description": "Singapore"
+                               }
+                       ],
+                       "default": "ch"
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.cloudflare-dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.cloudflare-dns.json
new file mode 100644 (file)
index 0000000..16f6689
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "title": "Cloudflare",
+       "template": "https://{option}cloudflare-dns.com/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001",
+       "help_link": "https://one.one.one.one/",
+       "params": {
+               "option": {
+                       "description": "Variant",
+                       "type": "select",
+                       "regex": "(family.||security.)",
+                       "options": [
+                               {
+                                       "value": "family.",
+                                       "description": "Family Filter"
+                               },
+                               {
+                                       "value": "",
+                                       "description": "Standard"
+                               },
+                               {
+                                       "value": "security.",
+                                       "description": "Security Filter"
+                               }
+                       ],
+                       "default": ""
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.controld.freedns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.controld.freedns.json
new file mode 100644 (file)
index 0000000..8ee2dc3
--- /dev/null
@@ -0,0 +1,36 @@
+{
+       "title": "ControlD",
+       "template": "https://freedns.controld.com/{option}",
+       "bootstrap_dns": "76.76.2.0,2606:1a40::0",
+       "help_link": "https://kb.controld.com/tutorials",
+       "params": {
+               "option": {
+                       "description": "Variant",
+                       "type": "select",
+                       "regex": "(family|p0|p1|p2|p3)",
+                       "options": [
+                               {
+                                       "value": "family",
+                                       "description": "Family Filter"
+                               },
+                               {
+                                       "value": "p0",
+                                       "description": "Standard"
+                               },
+                               {
+                                       "value": "p1",
+                                       "description": "Malware Filter"
+                               },
+                               {
+                                       "value": "p2",
+                                       "description": "Ads + Malware Filter"
+                               },
+                               {
+                                       "value": "p3",
+                                       "description": "Ads + Malware + Social Filter"
+                               }
+                       ],
+                       "default": "p0"
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.decloudus.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.decloudus.dns.json
new file mode 100644 (file)
index 0000000..9d7053c
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "DeCloudUs DNS",
+       "template": "https://dns.decloudus.com/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://decloudus.com/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.dnsforfamily.dns-doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.dnsforfamily.dns-doh.json
new file mode 100644 (file)
index 0000000..c39427d
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "DNS For Family",
+       "template": "https://dns-doh.dnsforfamily.com/dns-query",
+       "bootstrap_dns": "94.130.180.225,78.47.64.161",
+       "help_link": "https://dnsforfamily.com/#DNS_Servers_DNS_Over_HTTPS"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.dnslify.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.dnslify.doh.json
new file mode 100644 (file)
index 0000000..73421f5
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "DNSlify DNS",
+       "template": "https://doh.dnslify.com/dns-query",
+       "bootstrap_dns": "185.235.81.1,185.235.81.2,2a0d:4d00:81::1,2a0d:4d00:81::2",
+       "help_link": "https://www.dnslify.com/services/doh/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.opendns.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.opendns.doh.json
new file mode 100644 (file)
index 0000000..b9989d5
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "title": "OpenDNS",
+       "template": "https://doh.{option}opendns.com/dns-query",
+       "bootstrap_dns": "208.67.222.222,208.67.220.220",
+       "help_link": "https://support.opendns.com/hc/en-us/articles/360038086532-Using-DNS-over-HTTPS-DoH-with-OpenDNS",
+       "params": {
+               "option": {
+                       "description": "Variant",
+                       "type": "select",
+                       "regex": "(family.|)",
+                       "options": [
+                               {
+                                       "value": "family.",
+                                       "description": "Family Filter"
+                               },
+                               {
+                                       "value": "",
+                                       "description": "Standard"
+                               }
+                       ],
+                       "default": ""
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.rethinkdns.sky.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.rethinkdns.sky.json
new file mode 100644 (file)
index 0000000..8904389
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "title": "Rethink DNS",
+       "template": "https://sky.rethinkdns.com/{option}",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://www.rethinkdns.com/configure",
+       "params": {
+               "option": {
+                       "description": "Filters",
+                       "type": "text",
+                       "default": ""
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cz.nic.odvr.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cz.nic.odvr.json
new file mode 100644 (file)
index 0000000..296f38a
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "title": "ODVR (CZ)",
+       "template": "https://odvr.nic.cz/doh",
+       "bootstrap_dns": "193.17.47.1,185.43.135.1"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/de.dnsforge.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/de.dnsforge.json
new file mode 100644 (file)
index 0000000..a334e6a
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "DNS Forge (DE)",
+       "template": "https://dnsforge.de/dns-query",
+       "bootstrap_dns": "176.9.93.198,176.9.1.117,2a01:4f8:151:34aa::198,2a01:4f8:141:316d::117",
+       "help_link": "https://dnsforge.de/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/fi.lelux.resolver-eu.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/fi.lelux.resolver-eu.json
new file mode 100644 (file)
index 0000000..6372c9e
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "Lelux DNS (FI)",
+       "template": "https://resolver-eu.lelux.fi/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://lelux.fi/resolver/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/google.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/google.dns.json
new file mode 100644 (file)
index 0000000..64d8e86
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "Google",
+       "template": "https://dns.google/dns-query",
+       "bootstrap_dns": "8.8.8.8,8.8.4.4",
+       "default": true
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/gr.libredns.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/gr.libredns.doh.json
new file mode 100644 (file)
index 0000000..037289f
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "title": "LibreDNS (GR)",
+       "template": "https://doh.libredns.gr/{option}",
+       "bootstrap_dns": "116.202.176.26",
+       "help_link": "https://libredns.gr/",
+       "params": {
+               "option": {
+                       "description": "Variant",
+                       "type": "select",
+                       "regex": "(ads|dns-query)",
+                       "options": [
+                               {
+                                       "value": "ads",
+                                       "description": "AdBlocking Filter"
+                               },
+                               {
+                                       "value": "dns-query",
+                                       "description": "Standard"
+                               }
+                       ],
+                       "default": "dns-query"
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/io.nextdns.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/io.nextdns.dns.json
new file mode 100644 (file)
index 0000000..753b785
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "title": "NextDNS.io",
+       "template": "https://dns.nextdns.io/{option}",
+       "bootstrap_dns": "45.90.28.49,45.90.30.49",
+       "help_link": "https://my.nextdns.io",
+       "params": {
+               "option": {
+                       "description": "Username",
+                       "type": "text",
+                       "default": ""
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/io.seby.doh-2.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/io.seby.doh-2.json
new file mode 100644 (file)
index 0000000..90b6be7
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "Seby DNS (AU)",
+       "template": "https://doh-2.seby.io/dns-query",
+       "bootstrap_dns": "45.76.113.31,139.99.222.72",
+       "help_link": "https://dns.seby.io/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/jp.iij.dns.public.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/jp.iij.dns.public.json
new file mode 100644 (file)
index 0000000..ffd8be7
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "IIJ Public DNS (JP)",
+       "template": "https://public.dns.iij.jp/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://www.iij.ad.jp/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/lu.restena.kaitain.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/lu.restena.kaitain.json
new file mode 100644 (file)
index 0000000..1dcc11f
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "title": "Restena DNS (LU)",
+       "template": "https://kaitain.restena.lu/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://www.restena.lu/en/service/public-dns-resolver",
+       "http2_only": true
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.ahadns.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.ahadns.doh.json
new file mode 100644 (file)
index 0000000..2acdcee
--- /dev/null
@@ -0,0 +1,56 @@
+{
+       "title": "AhaDNS Regional",
+       "template": "https://doh.{option}.ahadns.net/dns-query",
+       "bootstrap_dns": "185.213.26.187,45.67.219.208,5.2.75.75,45.79.120.233,2a0d:5600:33:3::3,2a04:bdc7:100:70::70,2a04:52c0:101:75::75,2400:8904:e001:43::43",
+       "help_link": "https://ahadns.com/dns-over-https/",
+       "params": {
+               "option": {
+                       "description": "Location",
+                       "type": "select",
+                       "regex": "(au|chi|es|in|it|la|nl|no|ny|pl)",
+                       "options": [
+                               {
+                                       "value": "au",
+                                       "description": "Australia"
+                               },
+                               {
+                                       "value": "chi",
+                                       "description": "US/Chicago"
+                               },
+                               {
+                                       "value": "es",
+                                       "description": "Spain"
+                               },
+                               {
+                                       "value": "in",
+                                       "description": "India"
+                               },
+                               {
+                                       "value": "it",
+                                       "description": "Italy"
+                               },
+                               {
+                                       "value": "la",
+                                       "description": "US/Los Angeles"
+                               },
+                               {
+                                       "value": "nl",
+                                       "description": "Netherlands"
+                               },
+                               {
+                                       "value": "no",
+                                       "description": "Norway"
+                               },
+                               {
+                                       "value": "ny",
+                                       "description": "US/New York"
+                               },
+                               {
+                                       "value": "pl",
+                                       "description": "Poland"
+                               }
+                       ],
+                       "default": "chi"
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.applied-privacy.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.applied-privacy.doh.json
new file mode 100644 (file)
index 0000000..d24e7f1
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "Applied Privacy DNS (AT)",
+       "template": "https://doh.applied-privacy.net/query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://applied-privacy.net/services/dns/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.cfiec.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.cfiec.dns.json
new file mode 100644 (file)
index 0000000..fcca173
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "title": "CFIEC Public IPv6 Only DNS (CN)",
+       "template": "https://dns.cfiec.net/dns-query",
+       "bootstrap_dns": "240C::6666,240C::6644"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.ffmuc.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.ffmuc.doh.json
new file mode 100644 (file)
index 0000000..5c0d6a0
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "FFMUC DNS (DE)",
+       "template": "https://doh.ffmuc.net/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://ffmuc.net/wiki/doku.php?id=knb:dohdot"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.he.ordns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.he.ordns.json
new file mode 100644 (file)
index 0000000..6a2be8c
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "Hurricane Electric",
+       "template": "https://ordns.he.net/dns-query",
+       "bootstrap_dns": "74.82.42.42,2001:470:20::2",
+       "help_link": "https://forums.he.net/index.php?topic=3996.0"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.idnet.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.idnet.doh.json
new file mode 100644 (file)
index 0000000..9e6fdf7
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "title": "IDNet (UK)",
+       "template": "https://doh.idnet.net/dns-query",
+       "bootstrap_dns": "212.69.36.23,212.69.40.23"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.mullvad.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.mullvad.doh.json
new file mode 100644 (file)
index 0000000..18dad9c
--- /dev/null
@@ -0,0 +1,25 @@
+{
+       "title": "Mullvad",
+       "template": "https://{option}doh.mullvad.net/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://mullvad.net/en/help/dns-over-https-and-dns-over-tls/",
+       "http2_only": true,
+       "params": {
+               "option": {
+                       "description": "Variant",
+                       "type": "select",
+                       "regex": "(adblock.|)",
+                       "options": [
+                               {
+                                       "value": "adblock.",
+                                       "description": "AdBlocking Filter"
+                               },
+                               {
+                                       "value": "",
+                                       "description": "Standard"
+                               }
+                       ],
+                       "default": ""
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.quad9.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.quad9.json
new file mode 100644 (file)
index 0000000..b3b5d6f
--- /dev/null
@@ -0,0 +1,32 @@
+{
+       "title": "Quad 9",
+       "template": "https://{option}.quad9.net/dns-query",
+       "bootstrap_dns": "9.9.9.9,149.112.112.112,2620:fe::fe,2620:fe::9",
+       "help_link": "https://www.quad9.net/doh-quad9-dns-servers/",
+       "params": {
+               "option": {
+                       "description": "Variant",
+                       "type": "select",
+                       "regex": "(dns|dns9|dns10|dns11)",
+                       "options": [
+                               {
+                                       "value": "dns",
+                                       "description": "Standard"
+                               },
+                               {
+                                       "value": "dns9",
+                                       "description": "Secured"
+                               },
+                               {
+                                       "value": "dns10",
+                                       "description": "Unsecured"
+                               },
+                               {
+                                       "value": "dns11",
+                                       "description": "Secured with ECS Support"
+                               }
+                       ],
+                       "default": "dns"
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/one.comss.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/one.comss.dns.json
new file mode 100644 (file)
index 0000000..85dd5cc
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "title": "Comss DNS (RU)",
+       "template": "https://dns.{option}comss.one/dns-query",
+       "bootstrap_dns": "92.38.152.163,93.115.24.204,2a03:90c0:56::1a5,2a02:7b40:5eb0:e95d::1",
+       "params": {
+               "option": {
+                       "description": "Location",
+                       "type": "select",
+                       "regex": "(east.|)",
+                       "options": [
+                               {
+                                       "value": "east.",
+                                       "description": "Siberia"
+                               },
+                               {
+                                       "value": "",
+                                       "description": "Moscow, St Petersburg"
+                               }
+                       ],
+                       "default": ""
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/org.cleanbrowsing.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/org.cleanbrowsing.doh.json
new file mode 100644 (file)
index 0000000..fa21e53
--- /dev/null
@@ -0,0 +1,28 @@
+{
+       "title": "CleanBrowsing",
+       "template": "https://doh.cleanbrowsing.org/doh/{option}-filter/",
+       "bootstrap_dns": "185.228.168.168",
+       "help_link": "https://cleanbrowsing.org/guides/dnsoverhttps",
+       "params": {
+               "option": {
+                       "description": "Filter",
+                       "type": "select",
+                       "regex": "(adult|family|security)",
+                       "options": [
+                               {
+                                       "value": "adult",
+                                       "description": "Adult Content Filter"
+                               },
+                               {
+                                       "value": "family",
+                                       "description": "Family Filter"
+                               },
+                               {
+                                       "value": "security",
+                                       "description": "Security Filter"
+                               }
+                       ],
+                       "default": "security"
+               }
+       }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/org.snopyta.dns.doh.fi.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/org.snopyta.dns.doh.fi.json
new file mode 100644 (file)
index 0000000..521933c
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "Snopyta DNS (FI)",
+       "template": "https://fi.doh.dns.snopyta.org/dns-query",
+       "bootstrap_dns": "1.1.1.1,1.0.0.1,2606:4700:4700::1111,2606:4700:4700::1001,8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844",
+       "help_link": "https://snopyta.org/service/dns/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/pub.doh.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/pub.doh.json
new file mode 100644 (file)
index 0000000..0a381b1
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "title": "DNSPod Public DNS (CN)",
+       "template": "https://doh.pub/dns-query",
+       "bootstrap_dns": "119.29.29.29,119.28.28.28"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/sb.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/sb.dns.json
new file mode 100644 (file)
index 0000000..f061b17
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "title": "DoH DNS (SB)",
+       "template": "https://doh.dns.sb/dns-query",
+       "bootstrap_dns": "185.222.222.222,185.184.222.222",
+       "help_link": "https://dns.sb/doh/",
+       "http2_only": true
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/tw.twnic.dns.json b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/tw.twnic.dns.json
new file mode 100644 (file)
index 0000000..ddcd9a3
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "title": "Quad 101 (TW)",
+       "template": "https://dns.twnic.tw/dns-query",
+       "bootstrap_dns": "101.101.101.101,101.102.103.104,2001:de4::101,2001:de4::102",
+       "help_link": "https://blog.twnic.tw/2018/12/28/1803/"
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json b/applications/luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json
new file mode 100644 (file)
index 0000000..4b22145
--- /dev/null
@@ -0,0 +1,15 @@
+{
+       "admin/services/https-dns-proxy": {
+               "title": "HTTPS DNS Proxy",
+               "order": 90,
+               "action": {
+                       "type": "view",
+                       "path": "https-dns-proxy/overview"
+               },
+               "depends": {
+                       "acl": [
+                               "luci-app-https-dns-proxy"
+                       ]
+               }
+       }
+}
index 97f8c6df4150260ac05fb8e55b356149597f1698..6603d3596a58e4100565361b5257dd688746a6b8 100644 (file)
@@ -2,28 +2,29 @@
        "luci-app-https-dns-proxy": {
                "description": "Grant UCI and file access for luci-app-https-dns-proxy",
                "read": {
-                       "cgi-io": [
-                               "exec"
-                       ],
-                       "file": {
-                               "/usr/lib/opkg/status": [
-                                       "read"
-                               ],
-                               "/usr/lib/lua/luci/https-dns-proxy/providers/*": [
-                                       "read"
-                               ],
-                               "/etc/init.d/https-dns-proxy *": [
-                                       "exec"
+                       "ubus": {
+                               "luci.https-dns-proxy": [
+                                       "getInitList",
+                                       "getInitStatus",
+                                       "getPlatformSupport",
+                                       "getProviders",
+                                       "getRuntime"
                                ]
                        },
                        "uci": [
+                               "dhcp",
                                "https-dns-proxy"
                        ]
                },
                "write": {
                        "uci": [
                                "https-dns-proxy"
-                       ]
+                       ],
+                       "ubus": {
+                               "luci.https-dns-proxy": [
+                                       "setInitAction"
+                               ]
+                       }
                }
        }
 }