summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--applications/luci-app-adblock-fast/Makefile (renamed from applications/luci-app-simple-adblock/Makefile)10
-rw-r--r--applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js479
-rw-r--r--applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js385
-rw-r--r--applications/luci-app-adblock-fast/po/ar/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/ar/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/bg/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/bg/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/bn_BD/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/bn_BD/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/ca/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/ca/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/cs/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/cs/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/da/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/da/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/de/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/de/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/el/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/el/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/en/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/en/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/es/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/es/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/fi/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/fi/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/fr/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/fr/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/he/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/he/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/hi/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/hi/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/hu/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/hu/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/it/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/it/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/ja/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/ja/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/ko/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/ko/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/lt/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/lt/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/mr/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/mr/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/ms/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/ms/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/nb_NO/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/nb_NO/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/pl/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/pl/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/pt/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/pt/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/pt_BR/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/pt_BR/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/ro/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/ro/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/ru/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/ru/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/sk/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/sk/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/sv/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/sv/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/templates/adblock-fast.pot586
-rw-r--r--applications/luci-app-adblock-fast/po/tr/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/tr/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/uk/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/uk/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/vi/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/vi/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/zh_Hans/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/zh_Hans/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/po/zh_Hant/adblock-fast.po (renamed from applications/luci-app-simple-adblock/po/zh_Hant/simple-adblock.po)0
-rw-r--r--applications/luci-app-adblock-fast/root/etc/uci-defaults/40_luci-adblock-fast (renamed from applications/luci-app-simple-adblock/root/etc/uci-defaults/40_luci-simple-adblock)0
-rwxr-xr-xapplications/luci-app-adblock-fast/root/usr/libexec/rpcd/luci.adblock-fast (renamed from applications/luci-app-simple-adblock/root/usr/libexec/rpcd/luci.simple-adblock)70
-rw-r--r--applications/luci-app-adblock-fast/root/usr/share/luci/menu.d/luci-app-adblock-fast.json17
-rw-r--r--applications/luci-app-adblock-fast/root/usr/share/rpcd/acl.d/luci-app-adblock-fast.json32
-rw-r--r--applications/luci-app-dockerman/po/de/dockerman.po8
-rw-r--r--applications/luci-app-firewall/po/ka/firewall.po1420
-rw-r--r--applications/luci-app-firewall/po/ro/firewall.po4
-rw-r--r--applications/luci-app-firewall/po/zh_Hans/firewall.po8
-rw-r--r--applications/luci-app-https-dns-proxy/Makefile4
-rw-r--r--applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js436
-rw-r--r--applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js383
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua27
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns1.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns2.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.jp.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.family.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.private.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.protected.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.lua9
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.switch.dns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.360.doh.lua6
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.edu.tsinghua.tuna.dns.lua6
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.rubyfish.dns.lua7
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/co.osxz.dns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.ahadns.blitz.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.alidns.dns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-ch.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-de.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-fi.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-jp.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-sg.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.family.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua9
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.security.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.family.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads-social.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p0.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p1.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p2.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p3.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.unfiltered.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.decloudus.dns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnsforfamily.dns-doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnslify.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.familyshield.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.pumplex.dns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.rethinkdns.basic.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/de.dnsforge.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/fi.lelux.resolver-eu.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua6
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-family.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-nonfiltering.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.nextdns.dns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.seby.doh-2.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/jp.iij.dns.public.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/lu.restena.kaitain.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.au.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.chi.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.es.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.in.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.it.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.la.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.nl.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.no.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.ny.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.pl.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.applied-privacy.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.cfiec.dns.lua6
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ffmuc.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.he.ordns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.idnet.doh.lua6
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.adblocker.lua9
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.lua9
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.dns.lua6
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.east.dns.lua6
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.snopyta.dns.doh.fi.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/pub.doh.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/sb.dns.lua9
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/tw.twnic.dns.lua8
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua212
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm75
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm9
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm60
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm13
-rw-r--r--applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm12
-rw-r--r--applications/luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot465
-rwxr-xr-xapplications/luci-app-https-dns-proxy/root/usr/libexec/rpcd/luci.https-dns-proxy206
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/app.tiarap.doh.json24
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ca.cira.canadianshield.json28
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.json7
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ch.switch.dns.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cn.360.doh.json5
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cn.rubyfish.dns.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/co.oszx.dns.json24
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.adguard.dns.json24
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.ahadns.blitz.json13
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.alidns.dns.json5
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.blahdns.doh.json36
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.cloudflare-dns.json28
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.controld.freedns.json36
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.decloudus.dns.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.dnsforfamily.dns-doh.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.dnslify.doh.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.opendns.doh.json24
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.rethinkdns.sky.json13
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cz.nic.odvr.json5
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/de.dnsforge.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/fi.lelux.resolver-eu.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/google.dns.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/gr.libredns.doh.json24
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/io.nextdns.dns.json13
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/io.seby.doh-2.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/jp.iij.dns.public.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/lu.restena.kaitain.json7
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.ahadns.doh.json56
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.applied-privacy.doh.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.cfiec.dns.json5
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.ffmuc.doh.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.he.ordns.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.idnet.doh.json5
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.mullvad.doh.json25
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.quad9.json32
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/one.comss.dns.json23
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/org.cleanbrowsing.doh.json28
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/org.snopyta.dns.doh.fi.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/pub.doh.json5
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/sb.dns.json7
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/tw.twnic.dns.json6
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json15
-rw-r--r--applications/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json27
-rw-r--r--applications/luci-app-ksmbd/po/sk/ksmbd.po6
-rw-r--r--applications/luci-app-minidlna/po/sk/minidlna.po38
-rw-r--r--applications/luci-app-mjpg-streamer/po/pl/mjpg-streamer.po6
-rw-r--r--applications/luci-app-mjpg-streamer/po/ro/mjpg-streamer.po8
-rw-r--r--applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po8
-rw-r--r--applications/luci-app-mjpg-streamer/po/zh_Hans/mjpg-streamer.po8
-rw-r--r--applications/luci-app-nlbwmon/po/sk/nlbwmon.po8
-rw-r--r--applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js323
-rw-r--r--applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js187
-rw-r--r--applications/luci-app-simple-adblock/po/templates/simple-adblock.pot559
-rw-r--r--applications/luci-app-simple-adblock/root/usr/share/luci/menu.d/luci-app-simple-adblock.json17
-rw-r--r--applications/luci-app-simple-adblock/root/usr/share/rpcd/acl.d/luci-app-simple-adblock.json27
-rw-r--r--applications/luci-app-statistics/po/de/statistics.po8
-rw-r--r--applications/luci-app-ttyd/po/sk/ttyd.po6
-rw-r--r--modules/luci-base/po/de/base.po16
-rw-r--r--modules/luci-base/po/pl/base.po18
-rw-r--r--modules/luci-base/po/ro/base.po8
-rw-r--r--modules/luci-base/po/ru/base.po8
-rw-r--r--modules/luci-base/po/sk/base.po41
-rw-r--r--modules/luci-base/po/zh_Hans/base.po20
-rw-r--r--modules/luci-mod-dashboard/po/sk/dashboard.po11
206 files changed, 4873 insertions, 2675 deletions
diff --git a/applications/luci-app-simple-adblock/Makefile b/applications/luci-app-adblock-fast/Makefile
index 47b9623c5b..7dcb82ba73 100644
--- a/applications/luci-app-simple-adblock/Makefile
+++ b/applications/luci-app-adblock-fast/Makefile
@@ -1,15 +1,15 @@
-# Copyright 2017-2022 Stan Grishin (stangri@melmac.ca)
+# Copyright 2023 MOSSDeF, Stan Grishin (stangri@melmac.ca)
# This is free software, licensed under the GNU General Public License v3.
include $(TOPDIR)/rules.mk
PKG_LICENSE:=GPL-3.0-or-later
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.ca>
-PKG_VERSION:=1.9.5-3
+PKG_VERSION:=1.0.0-1
-LUCI_TITLE:=Simple Adblock Web UI
-LUCI_DESCRIPTION:=Provides Web UI for simple-adblock service.
-LUCI_DEPENDS:=+luci-base +simple-adblock +jsonfilter
+LUCI_TITLE:=AdBlock-Fast Web UI
+LUCI_DESCRIPTION:=Provides Web UI for adblock-fast service.
+LUCI_DEPENDS:=+luci-base +adblock-fast +jsonfilter
LUCI_PKGARCH:=all
include ../../luci.mk
diff --git a/applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js b/applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js
new file mode 100644
index 0000000000..901d3d9f26
--- /dev/null
+++ b/applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js
@@ -0,0 +1,479 @@
+// Copyright MOSSDeF, 2023 Stan Grishin <stangri@melmac.ca>
+// This code wouldn't have been possible without help from:
+// - [@vsviridov](https://github.com/vsviridov)
+
+"require ui";
+"require rpc";
+"require form";
+"require baseclass";
+
+var pkg = {
+ get Name() {
+ return "adblock-fast";
+ },
+ get URL() {
+ return "https://docs.openwrt.melmac.net/" + pkg.Name + "/";
+ },
+};
+
+var getFileUrlFilesizes = rpc.declare({
+ object: "luci." + pkg.Name,
+ method: "getFileUrlFilesizes",
+ params: ["name", "url"],
+});
+
+var getInitList = rpc.declare({
+ object: "luci." + pkg.Name,
+ method: "getInitList",
+ params: ["name"],
+});
+
+var getInitStatus = rpc.declare({
+ object: "luci." + pkg.Name,
+ method: "getInitStatus",
+ params: ["name"],
+});
+
+var getPlatformSupport = rpc.declare({
+ object: "luci." + pkg.Name,
+ method: "getPlatformSupport",
+ params: ["name"],
+});
+
+var _setInitAction = rpc.declare({
+ object: "luci." + pkg.Name,
+ method: "setInitAction",
+ params: ["name", "action"],
+ expect: { result: false },
+});
+
+var RPC = {
+ listeners: [],
+ on: function (event, callback) {
+ var pair = { event: event, callback: callback };
+ this.listeners.push(pair);
+ return function unsubscribe() {
+ this.listeners = this.listeners.filter(function (listener) {
+ return listener !== pair;
+ });
+ }.bind(this);
+ },
+ emit: function (event, data) {
+ this.listeners.forEach(function (listener) {
+ if (listener.event === event) {
+ listener.callback(data);
+ }
+ });
+ },
+ setInitAction: function (name, action) {
+ _setInitAction(name, action).then(
+ function (result) {
+ this.emit("setInitAction", result);
+ }.bind(this)
+ );
+ },
+};
+
+var status = baseclass.extend({
+ render: function () {
+ return Promise.all([L.resolveDefault(getInitStatus(pkg.Name), {})]).then(
+ function (data) {
+ var reply = {
+ status: (data[0] && data[0][pkg.Name]) || {
+ enabled: false,
+ status: null,
+ running: null,
+ version: null,
+ errors: [],
+ warnings: [],
+ force_dns_active: null,
+ force_dns_ports: [],
+ entries: null,
+ dns: null,
+ outputFile: null,
+ outputCache: null,
+ outputGzip: null,
+ outputFileExists: null,
+ outputCacheExists: null,
+ outputGzipExists: null,
+ leds: [],
+ },
+ };
+ var text = "";
+ var outputFile = reply.status.outputFile;
+ var outputCache = reply.status.outputCache;
+ var statusTable = {
+ statusNoInstall: _("%s is not installed or not found").format(
+ pkg.Name
+ ),
+ statusStopped: _("Stopped"),
+ statusStarting: _("Starting"),
+ statusProcessing: _("Processing lists"),
+ statusRestarting: _("Restarting"),
+ statusForceReloading: _("Force Reloading"),
+ statusDownloading: _("Downloading lists"),
+ statusError: _("Error"),
+ statusWarning: _("Warning"),
+ statusFail: _("Fail"),
+ statusSuccess: _("Active"),
+ };
+
+ var header = E("h2", {}, _("AdBlock-Fast - Status"));
+ var statusTitle = E(
+ "label",
+ { class: "cbi-value-title" },
+ _("Service Status")
+ );
+ if (reply.status.version) {
+ text += _("Version %s").format(reply.status.version) + " - ";
+ switch (reply.status.status) {
+ case "statusSuccess":
+ text += statusTable[reply.status.status] + ".";
+ text +=
+ "<br />" +
+ _("Blocking %s domains (with %s).").format(
+ reply.status.entries,
+ reply.status.dns
+ );
+ if (reply.status.outputGzipExists) {
+ text += "<br />" + _("Compressed cache file created.");
+ }
+ if (reply.status.force_dns_active) {
+ text += "<br />" + _("Force DNS ports:");
+ reply.status.force_dns_ports.forEach((element) => {
+ text += " " + element;
+ });
+ text += ".";
+ }
+ break;
+ case "statusStopped":
+ if (reply.status.enabled) {
+ text += statusTable[reply.status.status] + ".";
+ } else {
+ text +=
+ statusTable[reply.status.status] +
+ " (" +
+ _("Disabled") +
+ ").";
+ }
+ if (reply.status.outputCacheExists) {
+ text += "<br />" + _("Cache file found.");
+ } else if (reply.status.outputGzipExists) {
+ text += "<br />" + _("Compressed cache file found.");
+ }
+ break;
+ case "statusRestarting":
+ case "statusForceReloading":
+ case "statusDownloading":
+ case "statusProcessing":
+ text += statusTable[reply.status.status] + "...";
+ break;
+ default:
+ text += statusTable[reply.status.status] + ".";
+ break;
+ }
+ } else {
+ text = _("Not installed or not found");
+ }
+ var statusText = E("div", {}, text);
+ var statusField = E("div", { class: "cbi-value-field" }, statusText);
+ var statusDiv = E("div", { class: "cbi-value" }, [
+ statusTitle,
+ statusField,
+ ]);
+
+ var warningsDiv = [];
+ if (reply.status.warnings && reply.status.warnings.length) {
+ var warningTable = {
+ warningExternalDnsmasqConfig: _(
+ "Use of external dnsmasq config file detected, please set '%s' option to '%s'"
+ ).format("dns", "dnsmasq.conf"),
+ warningMissingRecommendedPackages: _(
+ "Some recommended packages are missing"
+ ),
+ };
+ var warningsTitle = E(
+ "label",
+ { class: "cbi-value-title" },
+ _("Service Warnings")
+ );
+ var text = "";
+ reply.status.warnings.forEach((element) => {
+ text +=
+ warningTable[element.id].format(element.extra || " ") + "<br />";
+ });
+ var warningsText = E("div", {}, text);
+ var warningsField = E(
+ "div",
+ { class: "cbi-value-field" },
+ warningsText
+ );
+ warningsDiv = E("div", { class: "cbi-value" }, [
+ warningsTitle,
+ warningsField,
+ ]);
+ }
+
+ var errorsDiv = [];
+ if (reply.status.errors && reply.status.errors.length) {
+ var errorTable = {
+ errorConfigValidationFail: _(
+ "Config (%s) validation failure!"
+ ).format("/etc/config/" + pkg.Name),
+ errorServiceDisabled: _("%s is currently disabled").format(
+ pkg.Name
+ ),
+ errorNoDnsmasqIpset: _(
+ "The dnsmasq ipset support is enabled, but dnsmasq is either not installed or installed dnsmasq does not support ipset"
+ ),
+ errorNoIpset: _(
+ "The dnsmasq ipset support is enabled, but ipset is either not installed or installed ipset does not support '%s' type"
+ ).format("hash:net"),
+ errorNoDnsmasqNftset: _(
+ "The dnsmasq nft set support is enabled, but dnsmasq is either not installed or installed dnsmasq does not support nft set"
+ ),
+ errorNoNft: _(
+ "The dnsmasq nft sets support is enabled, but nft is not installed"
+ ),
+ errorNoWanGateway: _(
+ "The %s failed to discover WAN gateway"
+ ).format(pkg.Name),
+ errorOutputDirCreate: _("Failed to create directory for %s file"),
+ errorOutputFileCreate: _("Failed to create '%s' file").format(
+ outputFile
+ ),
+ errorFailDNSReload: _("Failed to restart/reload DNS resolver"),
+ errorSharedMemory: _("Failed to access shared memory"),
+ errorSorting: _("Failed to sort data file"),
+ errorOptimization: _("Failed to optimize data file"),
+ errorAllowListProcessing: _("Failed to process allow-list"),
+ errorDataFileFormatting: _("Failed to format data file"),
+ errorMovingDataFile: _(
+ "Failed to move temporary data file to '%s'"
+ ).format(outputFile),
+ errorCreatingCompressedCache: _(
+ "Failed to create compressed cache"
+ ),
+ errorRemovingTempFiles: _("Failed to remove temporary files"),
+ errorRestoreCompressedCache: _("Failed to unpack compressed cache"),
+ errorRestoreCache: _("Failed to move '%s' to '%s'").format(
+ outputCache,
+ outputFile
+ ),
+ errorOhSnap: _(
+ "Failed to create block-list or restart DNS resolver"
+ ),
+ errorStopping: _("Failed to stop %s").format(pkg.Name),
+ errorDNSReload: _("Failed to reload/restart DNS resolver"),
+ errorDownloadingConfigUpdate: _(
+ "Failed to download Config Update file"
+ ),
+ errorDownloadingList: _("Failed to download %s"),
+ errorParsingConfigUpdate: _("Failed to parse Config Update file"),
+ errorParsingList: _("Failed to parse"),
+ errorNoSSLSupport: _("No HTTPS/SSL support on device"),
+ errorCreatingDirectory: _(
+ "Failed to create output/cache/gzip file directory"
+ ),
+ };
+ var errorsTitle = E(
+ "label",
+ { class: "cbi-value-title" },
+ _("Service Errors")
+ );
+ var text = "";
+ reply.status.errors.forEach((element) => {
+ text +=
+ errorTable[element.id].format(element.extra || " ") + "<br />";
+ });
+ text += _("Errors encountered, please check the %sREADME%s!").format(
+ "<a href='" + pkg.URL + '" target="_blank">',
+ "</a><br />"
+ );
+ var errorsText = E("div", {}, text);
+ var errorsField = E("div", { class: "cbi-value-field" }, errorsText);
+ errorsDiv = E("div", { class: "cbi-value" }, [
+ errorsTitle,
+ errorsField,
+ ]);
+ }
+
+ var btn_gap = E("span", {}, "&#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" },
+ _("Force re-downloading %s block lists").format(pkg.Name)
+ ),
+ ]);
+ return RPC.setInitAction(pkg.Name, "dl");
+ },
+ },
+ _("Force Re-Download")
+ );
+
+ var btn_stop = E(
+ "button",
+ {
+ class: "btn cbi-button cbi-button-reset",
+ disabled: true,
+ click: function (ev) {
+ ui.showModal(null, [
+ E(
+ "p",
+ { class: "spinning" },
+ _("Stopping %s service").format(pkg.Name)
+ ),
+ ]);
+ return RPC.setInitAction(pkg.Name, "stop");
+ },
+ },
+ _("Stop")
+ );
+
+ var btn_enable = E(
+ "button",
+ {
+ class: "btn cbi-button cbi-button-apply",
+ disabled: true,
+ click: function (ev) {
+ ui.showModal(null, [
+ E(
+ "p",
+ { class: "spinning" },
+ _("Enabling %s service").format(pkg.Name)
+ ),
+ ]);
+ return RPC.setInitAction(pkg.Name, "enable");
+ },
+ },
+ _("Enable")
+ );
+
+ var btn_disable = E(
+ "button",
+ {
+ class: "btn cbi-button cbi-button-reset",
+ disabled: true,
+ click: function (ev) {
+ ui.showModal(null, [
+ E(
+ "p",
+ { class: "spinning" },
+ _("Disabling %s service").format(pkg.Name)
+ ),
+ ]);
+ return RPC.setInitAction(pkg.Name, "disable");
+ },
+ },
+ _("Disable")
+ );
+
+ if (reply.status.enabled) {
+ btn_enable.disabled = true;
+ btn_disable.disabled = false;
+ switch (reply.status.status) {
+ case "statusSuccess":
+ btn_start.disabled = true;
+ btn_action.disabled = false;
+ btn_stop.disabled = false;
+ break;
+ case "statusStopped":
+ btn_start.disabled = false;
+ btn_action.disabled = true;
+ btn_stop.disabled = true;
+ break;
+ default:
+ btn_start.disabled = false;
+ btn_action.disabled = true;
+ btn_stop.disabled = false;
+ btn_enable.disabled = true;
+ btn_disable.disabled = true;
+ break;
+ }
+ } else {
+ btn_start.disabled = true;
+ btn_action.disabled = true;
+ btn_stop.disabled = true;
+ btn_enable.disabled = false;
+ btn_disable.disabled = true;
+ }
+
+ var buttonsDiv = [];
+ var buttonsTitle = E(
+ "label",
+ { class: "cbi-value-title" },
+ _("Service Control")
+ );
+ var buttonsText = E("div", {}, [
+ btn_start,
+ btn_gap,
+ btn_action,
+ btn_gap,
+ btn_stop,
+ btn_gap_long,
+ btn_enable,
+ btn_gap,
+ btn_disable,
+ ]);
+ var buttonsField = E("div", { class: "cbi-value-field" }, buttonsText);
+ if (reply.status.version) {
+ buttonsDiv = E("div", { class: "cbi-value" }, [
+ buttonsTitle,
+ buttonsField,
+ ]);
+ }
+
+ return E("div", {}, [
+ header,
+ statusDiv,
+ warningsDiv,
+ errorsDiv,
+ buttonsDiv,
+ ]);
+ }
+ );
+ },
+});
+
+RPC.on("setInitAction", function (reply) {
+ ui.hideModal();
+ location.reload();
+});
+
+return L.Class.extend({
+ status: status,
+ getFileUrlFilesizes: getFileUrlFilesizes,
+ getPlatformSupport: getPlatformSupport,
+});
diff --git a/applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js b/applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js
new file mode 100644
index 0000000000..92caf6b35d
--- /dev/null
+++ b/applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js
@@ -0,0 +1,385 @@
+// Copyright 2023 MOSSDeF, Stan Grishin <stangri@melmac.ca>
+// This code wouldn't have been possible without help from:
+// - [@stokito](https://github.com/stokito)
+// - [@vsviridov](https://github.com/vsviridov)
+
+"use strict";
+"require form";
+"require uci";
+"require view";
+"require adblock-fast.status as adb";
+
+var pkg = {
+ get Name() {
+ return "adblock-fast";
+ },
+ get URL() {
+ return "https://docs.openwrt.melmac.net/" + pkg.Name + "/";
+ },
+ humanFileSize: function (bytes, si = false, dp = 2) {
+ return `%${si ? 1000 : 1024}.${dp ?? 0}mB`.format(bytes);
+ },
+};
+
+return view.extend({
+ load: function () {
+ return Promise.all([
+ L.resolveDefault(adb.getFileUrlFilesizes(pkg.Name), {}),
+ L.resolveDefault(adb.getPlatformSupport(pkg.Name), {}),
+ uci.load(pkg.Name),
+ uci.load("dhcp"),
+ ]);
+ },
+
+ render: function (data) {
+ var reply = {
+ sizes: (data[0] && data[0][pkg.Name] && data[0][pkg.Name]["sizes"]) || [],
+ platform: (data[1] && data[1][pkg.Name]) || {
+ ipset_installed: false,
+ nft_installed: false,
+ dnsmasq_installed: false,
+ unbound_installed: false,
+ dnsmasq_ipset_support: false,
+ dnsmasq_nftset_support: false,
+ leds: [],
+ },
+ };
+ var status, m, s1, s2, s3, o;
+
+ status = new adb.status();
+ m = new form.Map(pkg.Name, _("AdBlock-Fast - Configuration"));
+ s1 = m.section(form.NamedSection, "config", pkg.Name);
+ s1.tab("tab_basic", _("Basic Configuration"));
+ s1.tab("tab_advanced", _("Advanced Configuration"));
+
+ var text = _(
+ "DNS resolution option, see the %sREADME%s for details."
+ ).format(
+ '<a href="' + pkg.URL + '#dns-resolver-option" target="_blank">',
+ "</a>"
+ );
+ if (!reply.platform.dnsmasq_installed) {
+ text +=
+ "<br />" +
+ _("Please note that %s is not supported on this system.").format(
+ "<i>dnsmasq.addnhosts</i>"
+ );
+ text +=
+ "<br />" +
+ _("Please note that %s is not supported on this system.").format(
+ "<i>dnsmasq.conf</i>"
+ );
+ text +=
+ "<br />" +
+ _("Please note that %s is not supported on this system.").format(
+ "<i>dnsmasq.ipset</i>"
+ );
+ text +=
+ "<br />" +
+ _("Please note that %s is not supported on this system.").format(
+ "<i>dnsmasq.servers</i>"
+ );
+ } else {
+ if (!reply.platform.dnsmasq_ipset_support) {
+ text +=
+ "<br />" +
+ _("Please note that %s is not supported on this system.").format(
+ "<i>dnsmasq.ipset</i>"
+ );
+ }
+ if (!reply.platform.dnsmasq_nftset_support) {
+ text +=
+ "<br />" +
+ _("Please note that %s is not supported on this system.").format(
+ "<i>dnsmasq.nftset</i>"
+ );
+ }
+ }
+ if (!reply.platform.unbound_installed) {
+ text =
+ text +
+ "<br />" +
+ _("Please note that %s is not supported on this system.").format(
+ "<i>unbound.adb_list</i>"
+ );
+ }
+
+ o = s1.taboption(
+ "tab_basic",
+ form.ListValue,
+ "dns",
+ _("DNS Service"),
+ text
+ );
+ if (reply.platform.dnsmasq_installed) {
+ o.value("dnsmasq.addnhosts", _("dnsmasq additional hosts"));
+ o.value("dnsmasq.conf", _("dnsmasq config"));
+ if (reply.platform.dnsmasq_ipset_support) {
+ o.value("dnsmasq.ipset", _("dnsmasq ipset"));
+ }
+ if (reply.platform.dnsmasq_nftset_support) {
+ o.value("dnsmasq.nftset", _("dnsmasq nft set"));
+ }
+ o.value("dnsmasq.servers", _("dnsmasq servers file"));
+ }
+ if (reply.platform.unbound_installed) {
+ o.value("unbound.adb_list", _("unbound adblock list"));
+ }
+ o.default = ("dnsmasq.servers", _("dnsmasq servers file"));
+
+ o = s1.taboption(
+ "tab_basic",
+ form.Value,
+ "dnsmasq_config_file_url",
+ _("Dnsmasq Config File URL"),
+ _(
+ "URL to the external dnsmasq config file, see the %sREADME%s for details."
+ ).format(
+ '<a href="' + pkg.URL + '#dnsmasq_config_file_url" target="_blank">',
+ "</a>"
+ )
+ );
+ o.depends("dns", "dnsmasq.conf");
+
+ o = s1.taboption(
+ "tab_basic",
+ form.ListValue,
+ "dnsmasq_instance",
+ _("Use AdBlocking on the dnsmasq instance(s)"),
+ _(
+ "You can limit the AdBlocking to a specific dnsmasq instance(s) (%smore information%s)."
+ ).format(
+ '<a href="' + pkg.URL + "#dnsmasq_instance" + '" target="_blank">',
+ "</a>"
+ )
+ );
+ o.value("*", _("AdBlock on all instances"));
+ var sections = uci.sections("dhcp", "dnsmasq");
+ sections.forEach((element) => {
+ var description;
+ var key;
+ if (element[".name"] === uci.resolveSID("dhcp", element[".name"])) {
+ key = element[".index"];
+ description = "dnsmasq[" + element[".index"] + "]";
+ } else {
+ key = element[".name"];
+ description = element[".name"];
+ }
+ o.value(key, _("AdBlock on %s only").format(description));
+ });
+ o.value("-", _("No AdBlock on dnsmasq"));
+ o.default = "*";
+ o.depends("dns", "dnsmasq.addnhosts");
+ o.depends("dns", "dnsmasq.servers");
+ o.retain = true;
+
+ o = s1.taboption(
+ "tab_basic",
+ form.ListValue,
+ "force_dns",
+ _("Force Router DNS"),
+ _("Forces Router DNS use on local devices, also known as DNS Hijacking.")
+ );
+ o.value("0", _("Let local devices use their own DNS servers if set"));
+ o.value("1", _("Force Router DNS server to all local devices"));
+ o.default = ("1", _("Force Router DNS server to all local devices"));
+
+ o = s1.taboption(
+ "tab_basic",
+ form.ListValue,
+ "verbosity",
+ _("Output Verbosity Setting"),
+ _("Controls system log and console output verbosity.")
+ );
+ o.value("0", _("Suppress output"));
+ o.value("1", _("Some output"));
+ o.value("2", _("Verbose output"));
+ o.default = ("2", _("Verbose output"));
+
+ if (reply.platform.leds.length) {
+ o = s1.taboption(
+ "tab_basic",
+ form.ListValue,
+ "led",
+ _("LED to indicate status"),
+ _(
+ "Pick the LED not already used in %sSystem LED Configuration%s."
+ ).format('<a href="' + L.url("admin", "system", "leds") + '">', "</a>")
+ );
+ o.value("", _("none"));
+ reply.platform.leds.forEach((element) => {
+ o.value(element);
+ });
+ }
+ o = s1.taboption(
+ "tab_advanced",
+ form.ListValue,
+ "config_update_enabled",
+ _("Automatic Config Update"),
+ _("Perform config update before downloading the block/allow-lists.")
+ );
+ o.value("0", _("Disable"));
+ o.value("1", _("Enable"));
+ o.default = ("0", _("Disable"));
+
+ o = s1.taboption(
+ "tab_advanced",
+ form.ListValue,
+ "ipv6_enabled",
+ _("IPv6 Support"),
+ _("Add IPv6 entries to block-list.")
+ );
+ o.value("", _("Do not add IPv6 entries"));
+ o.value("1", _("Add IPv6 entries"));
+ o.depends("dns", "dnsmasq.addnhosts");
+ o.depends("dns", "dnsmasq.nftset");
+ o.default = ("", _("Do not add IPv6 entries"));
+ o.rmempty = true;
+ o.retain = true;
+
+ o = s1.taboption(
+ "tab_advanced",
+ form.Value,
+ "download_timeout",
+ _("Download time-out (in seconds)"),
+ _("Stop the download if it is stalled for set number of seconds.")
+ );
+ o.default = "20";
+ o.datatype = "range(1,60)";
+
+ o = s1.taboption(
+ "tab_advanced",
+ form.Value,
+ "curl_max_file_size",
+ _("Curl maximum file size (in bytes)"),
+ _(
+ "If curl is installed and detected, it would not download files bigger than this."
+ )
+ );
+ o.default = "";
+ o.datatype = "uinteger";
+ o.rmempty = true;
+
+ o = s1.taboption(
+ "tab_advanced",
+ form.Value,
+ "curl_retry",
+ _("Curl download retry"),
+ _(
+ "If curl is installed and detected, it would retry download this many times on timeout/fail."
+ )
+ );
+ o.default = "3";
+ o.datatype = "range(0,30)";
+
+ o = s1.taboption(
+ "tab_advanced",
+ form.ListValue,
+ "parallel_downloads",
+ _("Simultaneous processing"),
+ _(
+ "Launch all lists downloads and processing simultaneously, reducing service start time."
+ )
+ );
+ o.value("0", _("Do not use simultaneous processing"));
+ o.value("1", _("Use simultaneous processing"));
+ o.default = ("1", _("Use simultaneous processing"));
+
+ o = s1.taboption(
+ "tab_advanced",
+ form.ListValue,
+ "compressed_cache",
+ _("Store compressed cache file on router"),
+ _(
+ "Attempt to create a compressed cache of block-list in the persistent memory."
+ )
+ );
+ o.value("0", _("Do not store compressed cache"));
+ o.value("1", _("Store compressed cache"));
+ o.default = ("0", _("Do not store compressed cache"));
+
+ o = s1.taboption(
+ "tab_advanced",
+ form.Value,
+ "compressed_cache_dir",
+ _("Directory for compressed cache file"),
+ _(
+ "Directory for compressed cache file of block-list in the persistent memory."
+ )
+ );
+ o.datatype = "string";
+ o.rmempty = true;
+ o.default = "/etc";
+ o.depends("compressed_cache", "1");
+ o.retain = true;
+
+ o = s1.taboption(
+ "tab_advanced",
+ form.ListValue,
+ "debug",
+ _("Enable Debugging"),
+ _("Enables debug output to /tmp/adblock-fast.log.")
+ );
+ o.value("0", _("Disable Debugging"));
+ o.value("1", _("Enable Debugging"));
+ o.default = ("0", _("Disable Debugging"));
+
+ s2 = m.section(
+ form.NamedSection,
+ "config",
+ "adblock-fast",
+ _("AdBlock-Fast - Allowed and Blocked Domains")
+ );
+ o.addremove = true;
+ o.rmempty = true;
+ o = s2.option(
+ form.DynamicList,
+ "allowed_domain",
+ _("Allowed Domains"),
+ _("Individual domains to be allowed.")
+ );
+
+ o.addremove = true;
+ o = s2.option(
+ form.DynamicList,
+ "blocked_domain",
+ _("Blocked Domains"),
+ _("Individual domains to be blocked.")
+ );
+ o.addremove = true;
+
+ s3 = m.section(
+ form.GridSection,
+ "file_url",
+ _("AdBlock-Fast - Allowed and Blocked Lists URLs"),
+ _("URLs to file(s) containing lists to be allowed or blocked.")
+ );
+ s3.rowcolors = true;
+ s3.sortable = true;
+ s3.anonymous = true;
+ s3.addremove = true;
+ o = s3.option(form.DummyValue, "_size", "Size");
+ o.modalonly = false;
+ o.cfgvalue = function (section_id) {
+ let url = uci.get(pkg.Name, section_id, "url");
+ let ret = _("Unknown");
+ reply.sizes.forEach((element) => {
+ if (element.url === url) {
+ ret = element.size === 0 ? ret : pkg.humanFileSize(element.size);
+ }
+ });
+ return _("Size: %s").format(ret);
+ };
+ o = s3.option(form.Flag, "enabled", _("Enable"));
+ o.editable = true;
+ o.default = "1";
+ o = s3.option(form.ListValue, "action", _("Action"));
+ o.value("allow", _("Allow"));
+ o.value("block", _("Block"));
+ o.default = "block";
+ o = s3.option(form.Value, "url", _("URL"));
+ o.optional = false;
+
+ return Promise.all([status.render(), m.render()]);
+ },
+});
diff --git a/applications/luci-app-simple-adblock/po/ar/simple-adblock.po b/applications/luci-app-adblock-fast/po/ar/adblock-fast.po
index fb15dab8b7..fb15dab8b7 100644
--- a/applications/luci-app-simple-adblock/po/ar/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/ar/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/bg/simple-adblock.po b/applications/luci-app-adblock-fast/po/bg/adblock-fast.po
index c03c902b48..c03c902b48 100644
--- a/applications/luci-app-simple-adblock/po/bg/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/bg/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/bn_BD/simple-adblock.po b/applications/luci-app-adblock-fast/po/bn_BD/adblock-fast.po
index 21493bd49e..21493bd49e 100644
--- a/applications/luci-app-simple-adblock/po/bn_BD/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/bn_BD/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/ca/simple-adblock.po b/applications/luci-app-adblock-fast/po/ca/adblock-fast.po
index 758a163a02..758a163a02 100644
--- a/applications/luci-app-simple-adblock/po/ca/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/ca/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/cs/simple-adblock.po b/applications/luci-app-adblock-fast/po/cs/adblock-fast.po
index 9b92709bc8..9b92709bc8 100644
--- a/applications/luci-app-simple-adblock/po/cs/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/cs/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/da/simple-adblock.po b/applications/luci-app-adblock-fast/po/da/adblock-fast.po
index 858d27b0a5..858d27b0a5 100644
--- a/applications/luci-app-simple-adblock/po/da/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/da/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/de/simple-adblock.po b/applications/luci-app-adblock-fast/po/de/adblock-fast.po
index e002b28f0c..e002b28f0c 100644
--- a/applications/luci-app-simple-adblock/po/de/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/de/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/el/simple-adblock.po b/applications/luci-app-adblock-fast/po/el/adblock-fast.po
index c00f060c37..c00f060c37 100644
--- a/applications/luci-app-simple-adblock/po/el/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/el/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/en/simple-adblock.po b/applications/luci-app-adblock-fast/po/en/adblock-fast.po
index 16a31bf6a0..16a31bf6a0 100644
--- a/applications/luci-app-simple-adblock/po/en/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/en/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/es/simple-adblock.po b/applications/luci-app-adblock-fast/po/es/adblock-fast.po
index d8b3a82010..d8b3a82010 100644
--- a/applications/luci-app-simple-adblock/po/es/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/es/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/fi/simple-adblock.po b/applications/luci-app-adblock-fast/po/fi/adblock-fast.po
index 3e87f8886b..3e87f8886b 100644
--- a/applications/luci-app-simple-adblock/po/fi/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/fi/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/fr/simple-adblock.po b/applications/luci-app-adblock-fast/po/fr/adblock-fast.po
index 79af6281f5..79af6281f5 100644
--- a/applications/luci-app-simple-adblock/po/fr/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/fr/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/he/simple-adblock.po b/applications/luci-app-adblock-fast/po/he/adblock-fast.po
index 52f35c48e5..52f35c48e5 100644
--- a/applications/luci-app-simple-adblock/po/he/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/he/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/hi/simple-adblock.po b/applications/luci-app-adblock-fast/po/hi/adblock-fast.po
index 2cfb9553ff..2cfb9553ff 100644
--- a/applications/luci-app-simple-adblock/po/hi/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/hi/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/hu/simple-adblock.po b/applications/luci-app-adblock-fast/po/hu/adblock-fast.po
index 26c8ca1e2e..26c8ca1e2e 100644
--- a/applications/luci-app-simple-adblock/po/hu/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/hu/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/it/simple-adblock.po b/applications/luci-app-adblock-fast/po/it/adblock-fast.po
index f281df43b6..f281df43b6 100644
--- a/applications/luci-app-simple-adblock/po/it/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/it/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/ja/simple-adblock.po b/applications/luci-app-adblock-fast/po/ja/adblock-fast.po
index 8c236dc99d..8c236dc99d 100644
--- a/applications/luci-app-simple-adblock/po/ja/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/ja/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/ko/simple-adblock.po b/applications/luci-app-adblock-fast/po/ko/adblock-fast.po
index e034445448..e034445448 100644
--- a/applications/luci-app-simple-adblock/po/ko/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/ko/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/lt/simple-adblock.po b/applications/luci-app-adblock-fast/po/lt/adblock-fast.po
index dda29bce15..dda29bce15 100644
--- a/applications/luci-app-simple-adblock/po/lt/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/lt/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/mr/simple-adblock.po b/applications/luci-app-adblock-fast/po/mr/adblock-fast.po
index 7474db64ea..7474db64ea 100644
--- a/applications/luci-app-simple-adblock/po/mr/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/mr/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/ms/simple-adblock.po b/applications/luci-app-adblock-fast/po/ms/adblock-fast.po
index f638a96f14..f638a96f14 100644
--- a/applications/luci-app-simple-adblock/po/ms/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/ms/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/nb_NO/simple-adblock.po b/applications/luci-app-adblock-fast/po/nb_NO/adblock-fast.po
index c3e1a7fc4c..c3e1a7fc4c 100644
--- a/applications/luci-app-simple-adblock/po/nb_NO/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/nb_NO/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/pl/simple-adblock.po b/applications/luci-app-adblock-fast/po/pl/adblock-fast.po
index 918ca107b7..918ca107b7 100644
--- a/applications/luci-app-simple-adblock/po/pl/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/pl/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/pt/simple-adblock.po b/applications/luci-app-adblock-fast/po/pt/adblock-fast.po
index db029ffa17..db029ffa17 100644
--- a/applications/luci-app-simple-adblock/po/pt/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/pt/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/pt_BR/simple-adblock.po b/applications/luci-app-adblock-fast/po/pt_BR/adblock-fast.po
index ab6395c232..ab6395c232 100644
--- a/applications/luci-app-simple-adblock/po/pt_BR/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/pt_BR/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/ro/simple-adblock.po b/applications/luci-app-adblock-fast/po/ro/adblock-fast.po
index 8fb5bb2d17..8fb5bb2d17 100644
--- a/applications/luci-app-simple-adblock/po/ro/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/ro/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/ru/simple-adblock.po b/applications/luci-app-adblock-fast/po/ru/adblock-fast.po
index aa90c9252a..aa90c9252a 100644
--- a/applications/luci-app-simple-adblock/po/ru/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/ru/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/sk/simple-adblock.po b/applications/luci-app-adblock-fast/po/sk/adblock-fast.po
index 50243f556a..50243f556a 100644
--- a/applications/luci-app-simple-adblock/po/sk/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/sk/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/sv/simple-adblock.po b/applications/luci-app-adblock-fast/po/sv/adblock-fast.po
index 142f670773..142f670773 100644
--- a/applications/luci-app-simple-adblock/po/sv/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/sv/adblock-fast.po
diff --git a/applications/luci-app-adblock-fast/po/templates/adblock-fast.pot b/applications/luci-app-adblock-fast/po/templates/adblock-fast.pot
new file mode 100644
index 0000000000..3a51e0a37f
--- /dev/null
+++ b/applications/luci-app-adblock-fast/po/templates/adblock-fast.pot
@@ -0,0 +1,586 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:223
+msgid "%s is currently disabled"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:106
+msgid "%s is not installed or not found"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:376
+msgid "Action"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:118
+msgid "Active"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/root/usr/share/luci/menu.d/luci-app-adblock-fast.json:3
+msgid "AdBlock Fast"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:168
+msgid "AdBlock on %s only"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:156
+msgid "AdBlock on all instances"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:331
+msgid "AdBlock-Fast - Allowed and Blocked Domains"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:354
+msgid "AdBlock-Fast - Allowed and Blocked Lists URLs"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:50
+msgid "AdBlock-Fast - Configuration"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:121
+msgid "AdBlock-Fast - Status"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:233
+msgid "Add IPv6 entries"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:230
+msgid "Add IPv6 entries to block-list."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:53
+msgid "Advanced Configuration"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:377
+msgid "Allow"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:338
+msgid "Allowed Domains"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:294
+msgid ""
+"Attempt to create a compressed cache of block-list in the persistent memory."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:218
+msgid "Automatic Config Update"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:52
+msgid "Basic Configuration"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:378
+msgid "Block"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:346
+msgid "Blocked Domains"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:134
+msgid "Blocking %s domains (with %s)."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:160
+msgid "Cache file found."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:139
+msgid "Compressed cache file created."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:162
+msgid "Compressed cache file found."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:221
+msgid "Config (%s) validation failure!"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:192
+msgid "Controls system log and console output verbosity."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:267
+msgid "Curl download retry"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:254
+msgid "Curl maximum file size (in bytes)"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:111
+msgid "DNS Service"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:56
+msgid "DNS resolution option, see the %sREADME%s for details."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:305
+msgid "Directory for compressed cache file"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:307
+msgid ""
+"Directory for compressed cache file of block-list in the persistent memory."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:400
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:221
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:223
+msgid "Disable"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:323
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:325
+msgid "Disable Debugging"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:156
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:394
+msgid "Disabling %s service"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:134
+msgid "Dnsmasq Config File URL"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:232
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:236
+msgid "Do not add IPv6 entries"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:297
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:299
+msgid "Do not store compressed cache"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:284
+msgid "Do not use simultaneous processing"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:244
+msgid "Download time-out (in seconds)"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:114
+msgid "Downloading lists"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:381
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:222
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:373
+msgid "Enable"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:320
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:324
+msgid "Enable Debugging"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:321
+msgid "Enables debug output to /tmp/adblock-fast.log."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:375
+msgid "Enabling %s service"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:115
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:289
+msgid "Errors encountered, please check the %sREADME%s!"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:117
+msgid "Fail"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:246
+msgid "Failed to access shared memory"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:242
+msgid "Failed to create '%s' file"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:264
+msgid "Failed to create block-list or restart DNS resolver"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:255
+msgid "Failed to create compressed cache"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:241
+msgid "Failed to create directory for %s file"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:276
+msgid "Failed to create output/cache/gzip file directory"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:271
+msgid "Failed to download %s"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:269
+msgid "Failed to download Config Update file"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:250
+msgid "Failed to format data file"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:259
+msgid "Failed to move '%s' to '%s'"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:252
+msgid "Failed to move temporary data file to '%s'"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:248
+msgid "Failed to optimize data file"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:273
+msgid "Failed to parse"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:272
+msgid "Failed to parse Config Update file"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:249
+msgid "Failed to process allow-list"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:267
+msgid "Failed to reload/restart DNS resolver"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:257
+msgid "Failed to remove temporary files"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:245
+msgid "Failed to restart/reload DNS resolver"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:247
+msgid "Failed to sort data file"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:266
+msgid "Failed to stop %s"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:258
+msgid "Failed to unpack compressed cache"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:142
+msgid "Force DNS ports:"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:343
+msgid "Force Re-Download"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:113
+msgid "Force Reloading"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:180
+msgid "Force Router DNS"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:184
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:185
+msgid "Force Router DNS server to all local devices"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:337
+msgid "Force re-downloading %s block lists"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:181
+msgid "Forces Router DNS use on local devices, also known as DNS Hijacking."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/root/usr/share/rpcd/acl.d/luci-app-adblock-fast.json:3
+msgid "Grant UCI and file access for luci-app-adblock-fast"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:229
+msgid "IPv6 Support"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:256
+msgid ""
+"If curl is installed and detected, it would not download files bigger than "
+"this."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:269
+msgid ""
+"If curl is installed and detected, it would retry download this many times "
+"on timeout/fail."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:339
+msgid "Individual domains to be allowed."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:347
+msgid "Individual domains to be blocked."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:204
+msgid "LED to indicate status"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:281
+msgid ""
+"Launch all lists downloads and processing simultaneously, reducing service "
+"start time."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:183
+msgid "Let local devices use their own DNS servers if set"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:170
+msgid "No AdBlock on dnsmasq"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:274
+msgid "No HTTPS/SSL support on device"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:176
+msgid "Not installed or not found"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:191
+msgid "Output Verbosity Setting"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:219
+msgid "Perform config update before downloading the block/allow-lists."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:206
+msgid "Pick the LED not already used in %sSystem LED Configuration%s."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:64
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:69
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:74
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:79
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:86
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:93
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:102
+msgid "Please note that %s is not supported on this system."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:111
+msgid "Processing lists"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:112
+msgid "Restarting"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:437
+msgid "Service Control"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:282
+msgid "Service Errors"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:125
+msgid "Service Status"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:198
+msgid "Service Warnings"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:279
+msgid "Simultaneous processing"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:371
+msgid "Size: %s"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:195
+msgid "Some output"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:192
+msgid "Some recommended packages are missing"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:324
+msgid "Start"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:110
+msgid "Starting"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:318
+msgid "Starting %s service"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:362
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:245
+msgid "Stop the download if it is stalled for set number of seconds."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:109
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:356
+msgid "Stopping %s service"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:298
+msgid "Store compressed cache"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:292
+msgid "Store compressed cache file on router"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:194
+msgid "Suppress output"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:239
+msgid "The %s failed to discover WAN gateway"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:227
+msgid ""
+"The dnsmasq ipset support is enabled, but dnsmasq is either not installed or "
+"installed dnsmasq does not support ipset"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:230
+msgid ""
+"The dnsmasq ipset support is enabled, but ipset is either not installed or "
+"installed ipset does not support '%s' type"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:233
+msgid ""
+"The dnsmasq nft set support is enabled, but dnsmasq is either not installed "
+"or installed dnsmasq does not support nft set"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:236
+msgid "The dnsmasq nft sets support is enabled, but nft is not installed"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:380
+msgid "URL"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:136
+msgid ""
+"URL to the external dnsmasq config file, see the %sREADME%s for details."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:355
+msgid "URLs to file(s) containing lists to be allowed or blocked."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:365
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:148
+msgid "Use AdBlocking on the dnsmasq instance(s)"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:189
+msgid ""
+"Use of external dnsmasq config file detected, please set '%s' option to '%s'"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:285
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:286
+msgid "Use simultaneous processing"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:196
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:197
+msgid "Verbose output"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:128
+msgid "Version %s"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/adblock-fast/status.js:116
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:150
+msgid ""
+"You can limit the AdBlocking to a specific dnsmasq instance(s) (%smore "
+"information%s)."
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:115
+msgid "dnsmasq additional hosts"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:116
+msgid "dnsmasq config"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:118
+msgid "dnsmasq ipset"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:121
+msgid "dnsmasq nft set"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:123
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:128
+msgid "dnsmasq servers file"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:209
+msgid "none"
+msgstr ""
+
+#: applications/luci-app-adblock-fast/htdocs/luci-static/resources/view/adblock-fast/overview.js:126
+msgid "unbound adblock list"
+msgstr ""
diff --git a/applications/luci-app-simple-adblock/po/tr/simple-adblock.po b/applications/luci-app-adblock-fast/po/tr/adblock-fast.po
index 8136a07c0b..8136a07c0b 100644
--- a/applications/luci-app-simple-adblock/po/tr/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/tr/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/uk/simple-adblock.po b/applications/luci-app-adblock-fast/po/uk/adblock-fast.po
index 3758d4305c..3758d4305c 100644
--- a/applications/luci-app-simple-adblock/po/uk/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/uk/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/vi/simple-adblock.po b/applications/luci-app-adblock-fast/po/vi/adblock-fast.po
index f4c1988d28..f4c1988d28 100644
--- a/applications/luci-app-simple-adblock/po/vi/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/vi/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/zh_Hans/simple-adblock.po b/applications/luci-app-adblock-fast/po/zh_Hans/adblock-fast.po
index 3b701d57fe..3b701d57fe 100644
--- a/applications/luci-app-simple-adblock/po/zh_Hans/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/zh_Hans/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/po/zh_Hant/simple-adblock.po b/applications/luci-app-adblock-fast/po/zh_Hant/adblock-fast.po
index 3a9460ba38..3a9460ba38 100644
--- a/applications/luci-app-simple-adblock/po/zh_Hant/simple-adblock.po
+++ b/applications/luci-app-adblock-fast/po/zh_Hant/adblock-fast.po
diff --git a/applications/luci-app-simple-adblock/root/etc/uci-defaults/40_luci-simple-adblock b/applications/luci-app-adblock-fast/root/etc/uci-defaults/40_luci-adblock-fast
index 080086891a..080086891a 100644
--- a/applications/luci-app-simple-adblock/root/etc/uci-defaults/40_luci-simple-adblock
+++ b/applications/luci-app-adblock-fast/root/etc/uci-defaults/40_luci-adblock-fast
diff --git a/applications/luci-app-simple-adblock/root/usr/libexec/rpcd/luci.simple-adblock b/applications/luci-app-adblock-fast/root/usr/libexec/rpcd/luci.adblock-fast
index 8cd40ca72a..b85a93f2e6 100755
--- a/applications/luci-app-simple-adblock/root/usr/libexec/rpcd/luci.simple-adblock
+++ b/applications/luci-app-adblock-fast/root/usr/libexec/rpcd/luci.adblock-fast
@@ -1,21 +1,22 @@
#!/bin/sh
-# Copyright 2022 Stan Grishin (stangri@melmac.ca)
+# Copyright 2023 MOSSDeF, Stan Grishin (stangri@melmac.ca)
# shellcheck disable=SC1091,SC2018,SC2019,SC2039,SC3043,SC3057,SC3060
# TechRef: https://openwrt.org/docs/techref/rpcd
# TESTS
-# ubus -v list luci.simple-adblock
-# ubus -S call luci.simple-adblock getInitList '{"name": "simple-adblock" }'
-# ubus -S call luci.simple-adblock getInitStatus '{"name": "simple-adblock" }'
-# ubus -S call luci.simple-adblock setInitAction '{"name": "simple-adblock", "action": "start" }'
-# ubus -S call luci.simple-adblock setInitAction '{"name": "simple-adblock", "action": "stop" }'
-# ubus -S call luci.simple-adblock getPlatformSupport '{"name": "simple-adblock" }'
+# ubus -v list luci.adblock-fast
+# ubus -S call luci.adblock-fast getFileUrlFilesizes '{"name": "adblock-fast" }'
+# ubus -S call luci.adblock-fast getInitList '{"name": "adblock-fast" }'
+# ubus -S call luci.adblock-fast getInitStatus '{"name": "adblock-fast" }'
+# ubus -S call luci.adblock-fast getPlatformSupport '{"name": "adblock-fast" }'
+# ubus -S call luci.adblock-fast setInitAction '{"name": "adblock-fast", "action": "start" }'
+# ubus -S call luci.adblock-fast setInitAction '{"name": "adblock-fast", "action": "stop" }'
. /lib/functions.sh
. /lib/functions/network.sh
. /usr/share/libubox/jshn.sh
-readonly packageName="simple-adblock"
+readonly packageName="adblock-fast"
readonly dnsmasqAddnhostsFile="/var/run/${packageName}/dnsmasq.addnhosts"
readonly dnsmasqAddnhostsCache="/var/run/${packageName}/dnsmasq.addnhosts.cache"
readonly dnsmasqAddnhostsGzip="${packageName}.dnsmasq.addnhosts.gz"
@@ -34,7 +35,7 @@ readonly dnsmasqServersGzip="${packageName}.dnsmasq.servers.gz"
readonly unboundFile="/var/lib/unbound/adb_list.${packageName}"
readonly unboundCache="/var/run/${packageName}/unbound.cache"
readonly unboundGzip="${packageName}.unbound.gz"
-readonly jsonFile="/var/run/${packageName}/${packageName}.json"
+readonly jsonFile="/dev/shm/$packageName-status.json"
str_contains() { [ -n "$1" ] &&[ -n "$2" ] && [ "${1//$2}" != "$1" ]; }
str_contains_word() { echo "$1" | grep -q -w "$2"; }
@@ -43,10 +44,12 @@ str_to_upper() { echo "$1" | tr 'a-z' 'A-Z'; }
is_enabled() { uci -q get "${1}.config.enabled"; }
get_version() { grep -m1 -A2 -w "^Package: $1$" /usr/lib/opkg/status | sed -n 's/Version: //p'; }
print_json_bool() { json_init; json_add_boolean "$1" "$2"; json_dump; json_cleanup; }
+print_json_int() { json_init; json_add_int "$1" "$2"; json_dump; json_cleanup; }
print_json_string() { json_init; json_add_string "$1" "$2"; json_dump; json_cleanup; }
logger() { /usr/bin/logger -t "$packageName" "$@"; }
ubus_get_status() { ubus call service list "{ 'name': '$packageName' }" | jsonfilter -e "@['${packageName}'].instances.main.data.${1}"; }
ubus_get_ports() { ubus call service list "{ 'name': '$packageName' }" | jsonfilter -e "@['${packageName}'].instances.main.data.firewall.*.dest_port"; }
+is_present() { command -v "$1" >/dev/null 2>&1; }
sanitize_dir() { [ -d "$(readlink -fn "$1")" ] && readlink -fn "$1"; }
json() {
# shellcheck disable=SC2034
@@ -68,6 +71,39 @@ json() {
esac
}
+get_url_filesize() {
+ local url="$1" size size_command
+ [ -n "$url" ] || { print_json_int 'size' '0'; return 0; }
+ is_present 'curl' || { print_json_int 'size' '0'; return 0; }
+ size_command='curl --silent --insecure --fail --head --request GET'
+ size="$($size_command "$url" | grep -i 'content-length:' | awk '{print $2}'; )"
+ echo "$size"
+}
+
+_get_file_url_size() {
+ local url size
+ config_get url "$1" 'url'
+ config_get size "$1" 'size'
+ [ -n "$size" ] || size="$(get_url_filesize "$url")"
+ json_add_object
+ json_add_string 'url' "$url"
+ json_add_int 'size' "$size"
+ json_close_object
+}
+
+get_file_url_filesizes() {
+ local name="$1" i
+ json_init
+ json_add_object "$name"
+ json_add_array 'sizes'
+ config_load "$name"
+ config_foreach _get_file_url_size 'file_url'
+ json_close_array
+ json_close_object
+ json_dump
+ json_cleanup
+}
+
get_init_list() {
local name
name="$(basename "$1")"
@@ -123,9 +159,6 @@ get_init_status() {
else
compressed_cache_dir="/etc"
fi
- errors="$(ubus_get_status errors)"
- warnings="$(ubus_get_status warnings)"
- ports="$(ubus_get_ports)"
if [ -n "$(uci -q get $packageName.config.dnsmasq_config_file_url)" ]; then
dns="dnsmasq.conf"
else
@@ -178,6 +211,7 @@ get_init_status() {
json_add_boolean 'running' '0'
fi
json_add_string 'version' "$(get_version "$name")"
+ errors="$(ubus_get_status errors)"
json_add_array 'errors'
if [ -n "$errors" ]; then
for i in $errors; do
@@ -195,6 +229,7 @@ get_init_status() {
done
fi
json_close_array
+ warnings="$(ubus_get_status warnings)"
json_add_array 'warnings'
if [ -n "$warnings" ]; then
for i in $warnings; do
@@ -213,6 +248,7 @@ get_init_status() {
fi
json_close_array
+ ports="$(ubus_get_ports)"
if [ -n "$ports" ]; then
json_add_boolean 'force_dns_active' '1'
json_add_array 'force_dns_ports'
@@ -313,6 +349,9 @@ get_platform_support() {
case "$1" in
list)
json_init
+ json_add_object "getFileUrlFilesizes"
+ json_add_string 'name' 'name'
+ json_close_object
json_add_object "getInitList"
json_add_string 'name' 'name'
json_close_object
@@ -331,6 +370,13 @@ case "$1" in
;;
call)
case "$2" in
+ getFileUrlFilesizes)
+ read -r input
+ json_load "$input"
+ json_get_var name 'name'
+ json_cleanup
+ get_file_url_filesizes "$name"
+ ;;
getInitList)
read -r input
json_load "$input"
diff --git a/applications/luci-app-adblock-fast/root/usr/share/luci/menu.d/luci-app-adblock-fast.json b/applications/luci-app-adblock-fast/root/usr/share/luci/menu.d/luci-app-adblock-fast.json
new file mode 100644
index 0000000000..542a75988c
--- /dev/null
+++ b/applications/luci-app-adblock-fast/root/usr/share/luci/menu.d/luci-app-adblock-fast.json
@@ -0,0 +1,17 @@
+{
+ "admin/services/adblock-fast": {
+ "title": "AdBlock Fast",
+ "action": {
+ "type": "view",
+ "path": "adblock-fast/overview"
+ },
+ "depends": {
+ "acl": [
+ "luci-app-adblock-fast"
+ ],
+ "uci": {
+ "adblock-fast": true
+ }
+ }
+ }
+}
diff --git a/applications/luci-app-adblock-fast/root/usr/share/rpcd/acl.d/luci-app-adblock-fast.json b/applications/luci-app-adblock-fast/root/usr/share/rpcd/acl.d/luci-app-adblock-fast.json
new file mode 100644
index 0000000000..4ae446af6f
--- /dev/null
+++ b/applications/luci-app-adblock-fast/root/usr/share/rpcd/acl.d/luci-app-adblock-fast.json
@@ -0,0 +1,32 @@
+{
+ "luci-app-adblock-fast": {
+ "description": "Grant UCI and file access for luci-app-adblock-fast",
+ "read": {
+ "file": {
+ "/dev/shm/adblock-fast-status.json": [ "list", "read" ]
+ },
+ "ubus": {
+ "luci.adblock-fast": [
+ "getFileUrlFilesizes",
+ "getInitList",
+ "getInitStatus",
+ "getPlatformSupport"
+ ]
+ },
+ "uci": [
+ "adblock-fast",
+ "dhcp"
+ ]
+ },
+ "write": {
+ "uci": [
+ "adblock-fast"
+ ],
+ "ubus": {
+ "luci.adblock-fast": [
+ "setInitAction"
+ ]
+ }
+ }
+ }
+}
diff --git a/applications/luci-app-dockerman/po/de/dockerman.po b/applications/luci-app-dockerman/po/de/dockerman.po
index 4db22bebdb..e7f52d5b9a 100644
--- a/applications/luci-app-dockerman/po/de/dockerman.po
+++ b/applications/luci-app-dockerman/po/de/dockerman.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2023-06-20 16:23+0000\n"
-"Last-Translator: ssantos <ssantos@web.de>\n"
+"PO-Revision-Date: 2023-09-02 23:33+0000\n"
+"Last-Translator: Felix Baumann <felix.bau@gmx.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsdockerman/de/>\n"
"Language: de\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.18.1\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:604
msgid "A list of kernel capabilities to add to the container"
@@ -559,7 +559,7 @@ msgstr "MAC-VLAN"
#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:581
#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/newcontainer.lua:629
msgid "Memory"
-msgstr "Speicher"
+msgstr "Arbeitsspeicher"
#: applications/luci-app-dockerman/luasrc/model/cbi/dockerman/container.lua:774
msgid "Memory Useage"
diff --git a/applications/luci-app-firewall/po/ka/firewall.po b/applications/luci-app-firewall/po/ka/firewall.po
new file mode 100644
index 0000000000..0564ba40f1
--- /dev/null
+++ b/applications/luci-app-firewall/po/ka/firewall.po
@@ -0,0 +1,1420 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-30 17:00+0200\n"
+"PO-Revision-Date: 2023-09-03 12:32+0000\n"
+"Last-Translator: Alan <georgianization@outlook.com>\n"
+"Language-Team: Georgian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsfirewall/ka/>\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.0.1-dev\n"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:48
+msgid ""
+"%{src?%{dest?Forwarded:Incoming}:Outgoing} %{ipv6?%{ipv4?<var>IPv4</var> and "
+"<var>IPv6</var>:<var>IPv6</var>}:<var>IPv4</var>}%{proto?, protocol "
+"%{proto#%{next?, }%{item.types?<var class=\"cbi-tooltip-container\">%{item."
+"name}<span class=\"cbi-tooltip\">ICMP with types %{item.types#%{next?, }"
+"<var>%{item}</var>}</span></var>:<var>%{item.name}</var>}}}%{mark?, mark "
+"<var%{mark.inv? data-tooltip=\"Match fwmarks except %{mark.num}%{mark.mask? "
+"with mask %{mark.mask}}.\":%{mark.mask? data-tooltip=\"Mask fwmark value "
+"with %{mark.mask} before compare.\"}}>%{mark.val}</var>}%{dscp?, DSCP %{dscp."
+"inv?<var data-tooltip=\"Match DSCP classifications except %{dscp.num?:%{dscp."
+"name}}\">%{dscp.val}</var>:<var>%{dscp.val}</var>}}%{helper?, helper "
+"%{helper.inv?<var data-tooltip=\"Match any helper except &quot;%{helper.name}"
+"&quot;\">%{helper.val}</var>:<var data-tooltip=\"%{helper.name}\">%{helper."
+"val}</var>}}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:461
+msgid "-- add IP --"
+msgstr "-- დაემატოს IP --"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:519
+msgid "-- add MAC --"
+msgstr "-- დაემატოს MAC --"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:192
+msgid "0"
+msgstr "0"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:175
+msgid "1024"
+msgstr "1024"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:118
+msgid ""
+"<var data-tooltip=\"ACCEPT\">Accept</var> %{src?%{dest?forward:input}:output}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:93
+msgid "<var data-tooltip=\"ACCEPT\">Prevent source rewrite</var>"
+msgstr "<var data-tooltip=\"ACCEPT\">წყაროს გადაწერის არიდება</var>"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:85
+msgid ""
+"<var data-tooltip=\"DNAT\">Forward</var> to %{dest}%{dest_ip? IP "
+"<var>%{dest_ip}</var>}%{dest_port? port <var>%{dest_port}</var>}"
+msgstr ""
+"<var data-tooltip=\"DNAT\">გადამისამართება</var> %{dest}%{dest_ip? IP-"
+"მისამართზე <var>%{dest_ip}</var>}%{dest_port? პორტი <var>%{dest_port}</var>}"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:115
+msgid ""
+"<var data-tooltip=\"DROP\">Drop</var> %{src?%{dest?forward:input}:output}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:133
+msgid ""
+"<var data-tooltip=\"DSCP\">Assign DSCP</var> classification <var>%{set_dscp}"
+"</var>"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:127
+msgid ""
+"<var data-tooltip=\"HELPER\">Assign conntrack</var> helper "
+"<var%{helper_name? data-tooltip=\"%{helper_name}\"}>%{set_helper}</var>"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:130
+msgid ""
+"<var data-tooltip=\"MARK\">%{set_mark?Assign:XOR}</var> firewall mark "
+"<var>%{set_mark?:%{set_xmark}}</var>"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:90
+msgid "<var data-tooltip=\"MASQUERADE\">Automatically rewrite</var> source IP"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:124
+msgid ""
+"<var data-tooltip=\"NOTRACK\">Do not track</var> %{src?%{dest?forward:input}:"
+"output}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:121
+msgid ""
+"<var data-tooltip=\"REJECT\">Reject</var> %{src?%{dest?forward:input}:output}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:87
+msgid ""
+"<var data-tooltip=\"SNAT\">Statically rewrite</var> to source %{snat_ip?IP "
+"<var>%{snat_ip}</var>} %{snat_port?port <var>%{snat_port}</var>}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:302
+msgid "A rewrite IP must be specified!"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:288
+msgid "ACCEPT - Disable address rewriting"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:220
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:224
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:410
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:203
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:283
+msgid "Action"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:316
+msgid ""
+"Additional raw <em>iptables</em> arguments to classify zone destination "
+"traffic, e.g. <code>-p tcp --dport 443</code> to only match outbound HTTPS "
+"traffic."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:306
+msgid ""
+"Additional raw <em>iptables</em> arguments to classify zone source traffic, "
+"e.g. <code>-p tcp --sport 443</code> to only match inbound HTTPS traffic."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:107
+msgid "Address family, Internal IP address must match"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:135
+msgid ""
+"Address family, source address, destination address, rewrite IP address must "
+"match"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:161
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:182
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:181
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:108
+msgid "Advanced Settings"
+msgstr "გაფართოებული პარამეტრები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:277
+msgid "Allow \"invalid\" traffic"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:379
+msgid "Allow forward from <em>source zones</em>:"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:338
+msgid "Allow forward to <em>destination zones</em>:"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:549
+msgid "Any"
+msgstr "ნებისმიერი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:478
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:494
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:348
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:364
+msgid "Any day"
+msgstr "ნებისმიერი დღე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:316
+msgid ""
+"Apply a bitwise XOR of the given value and the existing mark value on "
+"established connections. Format is value[/mask]. If a mask is specified then "
+"those bits set in the mask are zeroed out."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:263
+msgid "Apply the given DSCP class or value to established connections."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:438
+msgid "Assign the specified connection tracking helper to matched traffic."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:280
+msgid "Automatic helper assignment"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:280
+msgid ""
+"Automatically assign conntrack helpers based on traffic protocol and port"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:54
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:55
+msgid "Comment"
+msgstr "შენიშვნა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:109
+msgid "Conntrack Settings"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:284
+msgid "Conntrack helpers"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js:16
+msgid "Contents have been saved."
+msgstr "შიგთავსი შენახულია"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:698
+msgid "Continue"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:197
+msgid "Counters"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:225
+msgid "Covered devices"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:177
+msgid "Covered networks"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:230
+msgid "Covered subnets"
+msgstr ""
+
+#: applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json:62
+msgid "Custom Rules"
+msgstr "მითითებული წესები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js:26
+msgid ""
+"Custom rules allow you to execute arbitrary iptables commands which are not "
+"otherwise covered by the firewall framework. The commands are executed after "
+"each firewall restart, right after the default ruleset has been loaded."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:420
+msgid "DSCP classification"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:262
+msgid "DSCP mark"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:296
+msgid "DSCP mark required"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:401
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:266
+msgid "Destination address"
+msgstr "საბოლოო მისამართი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:403
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:274
+msgid "Destination port"
+msgstr "საბოლოო პორტი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:395
+msgid "Destination zone"
+msgstr "საბოლოო არე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:268
+msgid "Device name"
+msgstr "მოწყობილობის სახელი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:277
+msgid ""
+"Do not install extra rules to reject forwarded traffic with conntrack state "
+"<em>invalid</em>. This may be required for complex asymmetric route setups."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:59
+msgid "Drop invalid packets"
+msgstr "გაუმართავი კრებულების აცილება"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:228
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:230
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:209
+msgid "Enable"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:302
+msgid "Enable NAT Loopback"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:45
+msgid "Enable SYN-flood protection"
+msgstr "SYN-flood-დაცვის ჩართვა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:290
+msgid "Enable logging on this zone"
+msgstr "აღრიცხვის ჩართვა ამ არესთვის"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:162
+msgid ""
+"Enable network address and port translation IPv4 (NAT4 or NAPT4) for "
+"outbound traffic on this zone. This is typically enabled on the <em>wan</em> "
+"zone."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:237
+msgid ""
+"Enable network address and port translation IPv6 (NAT6 or NAPT6) for "
+"outbound traffic on this zone."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:204
+msgid "Enabled"
+msgstr "მოქმედია"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:198
+msgid "Enables packet and byte count tracking for the set."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:338
+msgid "Expecting: %s"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:77
+msgid "Experimental feature. Not fully compatible with QoS/SQM."
+msgstr "საცდელი შესაძლებლობა. სრულად თავსებადი არ იქნება QoS/SQM."
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:284
+msgid "Explicitly choses allowed connection tracking helpers for zone traffic"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:270
+msgid "External IP address"
+msgstr "გარე IP-მისამართი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:275
+msgid "External port"
+msgstr "გარე პორტი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:345
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:469
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:338
+msgid "Extra arguments"
+msgstr "დამატებითი არგუმენტები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:316
+msgid "Extra destination arguments"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:110
+msgid "Extra iptables arguments"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:306
+msgid "Extra source arguments"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:60
+msgid "Family"
+msgstr "ჯგუფი"
+
+#: applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json:3
+msgid "Firewall"
+msgstr "ქსელის ფარი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js:25
+msgid "Firewall - Custom Rules"
+msgstr "ქსელის ფარი - მითითებული წესები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:20
+msgid "Firewall - IP sets"
+msgstr "ქსელის ფარი - IP-ნაკრები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:172
+msgid "Firewall - NAT Rules"
+msgstr "ქსელის ფარი - NAT-წესები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:152
+msgid "Firewall - Port Forwards"
+msgstr "ქსელის ფარი - პორტის გადამისამართება"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:173
+msgid "Firewall - Traffic Rules"
+msgstr "ქსელის ფარი - მიმოცვლის წესები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:38
+msgid "Firewall - Zone Settings"
+msgstr "ქსელის ფარი - არეების გამართვა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:691
+msgid "Firewall configuration migration"
+msgstr "ქსელის ფარის გამართვის გადატანა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:64
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:147
+msgid "Forward"
+msgstr "გადაგზავნა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:34
+msgid ""
+"Forwarded %{ipv6?%{ipv4?<var>IPv4</var> and <var>IPv6</var>:<var>IPv6</var>}:"
+"<var>IPv4</var>}%{proto?, protocol %{proto#%{next?, }<var>%{item.name}</"
+"var>}}%{mark?, mark <var%{mark.inv? data-tooltip=\"Match fwmarks except "
+"%{mark.num}%{mark.mask? with mask %{mark.mask}}.\":%{mark.mask? data-"
+"tooltip=\"Mask fwmark value with %{mark.mask} before compare.\"}}>%{mark.val}"
+"</var>}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:484
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:354
+msgid "Friday"
+msgstr "პარასკევი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:45
+msgid ""
+"From %{src}%{src_device?, interface <var>%{src_device}</var>}%{src_ip?, IP "
+"%{src_ip#%{next?, }<var%{item.inv? data-tooltip=\"Match IP addresses except "
+"%{item.val}.\"}>%{item.ival}</var>}}%{src_port?, port %{src_port#%{next?, }"
+"<var%{item.inv? data-tooltip=\"Match ports except %{item.val}.\"}>%{item."
+"ival}</var>}}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:64
+msgid ""
+"From %{src}%{src_device?, interface <var>%{src_device}</var>}%{src_ip?, IP "
+"%{src_ip#%{next?, }<var%{item.inv? data-tooltip=\"Match IP addresses except "
+"%{item.val}.\"}>%{item.ival}</var>}}%{src_port?, port %{src_port#%{next?, }"
+"<var%{item.inv? data-tooltip=\"Match ports except %{item.val}.\"}>%{item."
+"ival}</var>}}%{src_mac?, MAC %{src_mac#%{next?, }<var%{item.inv? data-"
+"tooltip=\"Match MACs except %{item.val}%{item.hint.name? a.k.a. %{item.hint."
+"name}}.\":%{item.hint.name? data-tooltip=\"%{item.hint.name}\"}}>%{item.ival}"
+"</var>}}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:52
+msgid ""
+"From %{src}%{src_ip?, IP %{src_ip#%{next?, }<var%{item.inv? data-"
+"tooltip=\"Match IP addresses except %{item.val}.\"}>%{item.ival}</"
+"var>}}%{src_port?, port %{src_port#%{next?, }<var%{item.inv? data-"
+"tooltip=\"Match ports except %{item.val}.\"}>%{item.ival}</var>}}%{src_mac?, "
+"MAC %{src_mac#%{next?, }<var%{item.inv? data-tooltip=\"Match MACs except "
+"%{item.val}%{item.hint.name? a.k.a. %{item.hint.name}}.\":%{item.hint.name? "
+"data-tooltip=\"%{item.hint.name}\"}}>%{item.ival}</var>}}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:160
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:181
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:180
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:41
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:107
+#: applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json:17
+msgid "General Settings"
+msgstr "ზოგადი პარამეტრები"
+
+#: applications/luci-app-firewall/root/usr/share/rpcd/acl.d/luci-app-firewall.json:3
+msgid "Grant access to firewall configuration"
+msgstr "ქსელის ფარის გამართვასთან წვდომის ნებართვა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:88
+msgid "Hardware flow offloading"
+msgstr "ნაკადის აპარატურული განტვირთვა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:137
+msgid "IP (range)"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:32
+#: applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json:53
+msgid "IP Sets"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:145
+msgid "IPs/Networks"
+msgstr "IP-ები/ქსელები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:100
+msgid "IPs/Networks/MACs"
+msgstr "IP-ები/ქსელები/MAC-ები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:61
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:279
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:250
+msgid "IPv4 and IPv6"
+msgstr "IPv4 და IPv6"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:190
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:280
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:218
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:251
+msgid "IPv4 only"
+msgstr "IPv4 მხოლოდ"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:62
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:236
+msgid "IPv6 Masquerading"
+msgstr "IPv6 შენიღბვა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:191
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:281
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:219
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:252
+msgid "IPv6 only"
+msgstr "IPv6 მხოლოდ"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:251
+msgid "Inbound device"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:180
+msgid "Include File"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:40
+msgid ""
+"Incoming %{ipv6?%{ipv4?<var>IPv4</var> and <var>IPv6</var>:<var>IPv6</var>}:"
+"<var>IPv4</var>}%{proto?, protocol %{proto#%{next?, }%{item.types?<var "
+"class=\"cbi-tooltip-container\">%{item.name}<span class=\"cbi-tooltip\">ICMP "
+"with types %{item.types#%{next?, }<var>%{item}</var>}</span></var>:"
+"<var>%{item.name}</var>}}}%{mark?, mark <var%{mark.inv? data-tooltip=\"Match "
+"fwmarks except %{mark.num}%{mark.mask? with mask %{mark.mask}}.\":%{mark."
+"mask? data-tooltip=\"Mask fwmark value with %{mark.mask} before compare.\"}}"
+">%{mark.val}</var>}%{helper?, helper %{helper.inv?<var data-tooltip=\"Match "
+"any helper except &quot;%{helper.name}&quot;\">%{helper.val}</var>:<var data-"
+"tooltip=\"%{helper.name}\">%{helper.val}</var>}}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:173
+msgid "Initial Hash Size"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:62
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:145
+msgid "Input"
+msgstr "შემავალი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:288
+msgid "Internal IP address"
+msgstr "შიდა IP-მისამართი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:293
+msgid "Internal port"
+msgstr "შიდა პორტი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:283
+msgid "Internal zone"
+msgstr "შიდა არე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:304
+msgid "Invalid DSCP mark"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:372
+msgid "Invalid limit value"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:382
+msgid "Limit burst"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:293
+msgid "Limit log messages"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:348
+msgid "Limit matching"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:79
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:96
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:74
+msgid ""
+"Limit matching to <var>%{limit.num}</var> packets per <var>%{limit.unit}</"
+"var>%{limit.burst? burst <var>%{limit.burst}</var>}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:169
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:244
+msgid "Limited masquerading enabled"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:349
+msgid "Limits traffic matching to the specified rate."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:307
+msgid "Loopback source IP"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:287
+msgid "MASQUERADE - Automatically rewrite to outbound interface IP"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:174
+msgid "MSS clamping"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:161
+msgid "Masquerading"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:209
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:213
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:192
+msgid "Match"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:262
+msgid "Match DSCP"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:292
+msgid "Match ICMP type"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:248
+msgid "Match device"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:267
+msgid "Match forwarded traffic directed at the given IP address."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:275
+msgid ""
+"Match forwarded traffic directed at the given destination port or port range."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:250
+msgid "Match forwarded traffic from this IP or range."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:258
+msgid ""
+"Match forwarded traffic originating from the given source port or port range."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:322
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:445
+msgid "Match helper"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:276
+msgid ""
+"Match incoming traffic directed at the given destination port or port range "
+"on this host"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:315
+msgid "Match mark"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:322
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:445
+msgid "Match traffic using the specified connection tracking helper."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:318
+msgid "Matches a specific firewall mark or a range of different marks."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:328
+msgid "Matches forwarded traffic using the specified outbound network device."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:263
+msgid "Matches traffic carrying the specified DSCP marking."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:106
+msgid "Max Entries"
+msgstr "ჩანაწერის უდიდესი რაოდ."
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:165
+msgid "Max Length"
+msgstr "უმაღლესი სიგრძე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:383
+msgid ""
+"Maximum initial number of packets to match: this number gets recharged by "
+"one every time the limit specified above is not reached, up to this number."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:480
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:350
+msgid "Monday"
+msgstr "ორშაბათი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:490
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:360
+msgid "Month Days"
+msgstr "თვის დღეები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:175
+#: applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json:44
+msgid "NAT Rules"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:173
+msgid ""
+"NAT rules allow fine grained control over the source IP to use for outbound "
+"or forwarded traffic."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:182
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:41
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:45
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:209
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:188
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:123
+msgid "Name"
+msgstr "სახელი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:159
+msgid "Netmask"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:271
+msgid "Only match incoming traffic directed at the given IP address."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:252
+msgid "Only match incoming traffic from these MACs."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:257
+msgid "Only match incoming traffic from this IP or range."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:262
+msgid ""
+"Only match incoming traffic originating from the given source port or port "
+"range on the client host"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:252
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:327
+msgid "Outbound device"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:242
+msgid "Outbound zone"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:63
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:146
+msgid "Output"
+msgstr "გამომავალი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:68
+msgid "Packet Field Match"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:69
+msgid ""
+"Packet fields to match upon.<br />Syntax: <em>direction_datatype</em>. e.g.: "
+"<code>src_port, dest_net</code>.<br />Directions: <code>src, dst</code>. "
+"Datatypes: <code>ip, port, mac, net, set</code>.<br />Direction prefixes are "
+"optional.<br />*Note: datatype <code>set</code> is unsupported in fw4."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:346
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:470
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:339
+msgid "Passes additional arguments to iptables. Use with care!"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:303
+msgid ""
+"Passing raw iptables arguments to source and destination traffic "
+"classification rules allows to match packets based on other criteria than "
+"interfaces or subnets. These options should be used with extreme care as "
+"invalid values could render the firewall ruleset broken, completely exposing "
+"all services."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:181
+msgid "Path to file of CIDRs, subnets, host IPs, etc.<br />"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:155
+#: applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json:26
+msgid "Port Forwards"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:153
+msgid ""
+"Port forwarding allows remote computers on the Internet to connect to a "
+"specific computer or service within the private LAN."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:151
+msgid "Port range"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:233
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:288
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:238
+msgid "Protocol"
+msgstr "ოქმი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:294
+msgid ""
+"Redirect matched incoming traffic to the given port on the internal host"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:289
+msgid "Redirect matched incoming traffic to the specified internal host"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:115
+msgid "Refer To External Set"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:316
+msgid "Reflection zones"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:89
+msgid "Requires hardware NAT support."
+msgstr "ესაჭიროება აპარატურული NAT-მხარდაჭერა."
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:266
+msgid "Restrict Masquerading to given destination subnets"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:255
+msgid "Restrict Masquerading to given source subnets"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:187
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:276
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:215
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:249
+msgid "Restrict to address family"
+msgstr "მისამართის ჯგუფის შეზღუდვა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:293
+msgid "Rewrite IP address"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:294
+msgid "Rewrite matched traffic to the specified source IP address."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:308
+msgid "Rewrite matched traffic to the specified source port or port range."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:307
+msgid "Rewrite port"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:76
+msgid "Routing/NAT Offloading"
+msgstr "დამისამართება/NAT-განტვირთვა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:286
+msgid "SNAT - Rewrite to specific source IP or port"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:485
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:355
+msgid "Saturday"
+msgstr "შაბათი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:315
+msgid "Set mark"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:317
+msgid ""
+"Set the given mark value on established connections. Format is value[/mask]. "
+"If a mask is specified then only those bits set in the mask are modified."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:84
+msgid "Software based offloading for routing/NAT"
+msgstr "პროგრამული სახით განიტვირთება დამისამართება/NAT"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:83
+msgid "Software flow offloading"
+msgstr "ნაკადის პროგრამული განტვირთვა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:256
+msgid "Source IP address"
+msgstr "საწყისი IP-მისამართი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:251
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:385
+msgid "Source MAC address"
+msgstr "საწყისი MAC-მისამართი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:386
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:249
+msgid "Source address"
+msgstr "საწყისი მისამართი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:261
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:388
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:257
+msgid "Source port"
+msgstr "საწყისი პორტი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:237
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:371
+msgid "Source zone"
+msgstr "საწყისი არე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:269
+msgid ""
+"Specifies whether to tie this traffic rule to a specific inbound or outbound "
+"network device."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:307
+msgid ""
+"Specifies whether to use the external or the internal IP address for "
+"reflected traffic."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:509
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:379
+msgid "Start Date (yyyy-mm-dd)"
+msgstr "დაწყების თარიღი (yyyy-mm-dd)"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:501
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:371
+msgid "Start Time (hh:mm:ss)"
+msgstr "დაწყების დრო (hh:mm:ss)"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:513
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:383
+msgid "Stop Date (yyyy-mm-dd)"
+msgstr "შეწყვეტის თარიღი (yyyy-mm-dd)"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:505
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:375
+msgid "Stop Time (hh:mm:ss)"
+msgstr "შეწყვეტის დრო (hh:mm:ss)"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:123
+msgid "Storage Method"
+msgstr "შენახვის ხერხი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:479
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:349
+msgid "Sunday"
+msgstr "კვირა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:692
+msgid ""
+"The existing firewall configuration needs to be changed for LuCI to function "
+"properly."
+msgstr ""
+"ქსელის ფარის არსებული გამართვა უნდა შეიცვალოს, რომ LuCI სათანადოდ მუშაობდეს."
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:39
+msgid ""
+"The firewall creates zones over your network interfaces to control network "
+"traffic flow."
+msgstr ""
+"ქსელის ფარი ქმნის არეებს ქსელის მაკავშირებლებს შორის მიმოცვლილი მონაცემების "
+"სამართავად."
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:221
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:334
+msgid ""
+"The options below control the forwarding policies between this zone (%s) and "
+"other zones. <em>Destination zones</em> cover forwarded traffic "
+"<strong>originating from %q</strong>. <em>Source zones</em> match forwarded "
+"traffic from other zones <strong>targeted at %q</strong>. The forwarding "
+"rule is <em>unidirectional</em>, e.g. a forward from lan to wan does "
+"<em>not</em> imply a permission to forward from wan to lan as well."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:119
+msgid ""
+"This section defines common properties of %q. The <em>input</em> and "
+"<em>output</em> options set the default policies for traffic entering and "
+"leaving this zone while the <em>forward</em> option describes the policy for "
+"forwarded traffic between different networks within the zone. <em>Covered "
+"networks</em> specifies which available networks are members of this zone."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:483
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:353
+msgid "Thursday"
+msgstr "ოთხშაბათი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:183
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:182
+msgid "Time Restrictions"
+msgstr "დროის შეზღუდვები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:517
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:387
+msgid "Time in UTC"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:243
+msgid "Time restrictions are enabled for this rule"
+msgstr "დროის შეზღუდვები ამოქმედებულია ამ წესისთვის"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:189
+msgid "Timeout"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:77
+msgid ""
+"To %{dest}%{dest_device?, interface <var>%{dest_device}</var>}%{dest_ip?, IP "
+"%{dest_ip#%{next?, }<var%{item.inv? data-tooltip=\"Match IP addresses except "
+"%{item.val}.\"}>%{item.ival}</var>}}%{dest_port?, port %{dest_port#%{next?, }"
+"<var%{item.inv? data-tooltip=\"Match ports except %{item.val}.\"}>%{item."
+"ival}</var>}}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:55
+msgid ""
+"To %{dest}%{dest_device?, via interface <var>%{dest_device}</"
+"var>}%{dest_ip?, IP %{dest_ip#%{next?, }<var%{item.inv? data-tooltip=\"Match "
+"IP addresses except %{item.val}.\"}>%{item.ival}</var>}}%{dest_port?, port "
+"%{dest_port#%{next?, }<var%{item.inv? data-tooltip=\"Match ports except "
+"%{item.val}.\"}>%{item.ival}</var>}}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:61
+msgid ""
+"To %{dest}%{dest_ip?, IP %{dest_ip#%{next?, }<var%{item.inv? data-"
+"tooltip=\"Match IP addresses except %{item.val}.\"}>%{item.ival}</"
+"var>}}%{dest_port?, port %{dest_port#%{next?, }<var%{item.inv? data-"
+"tooltip=\"Match ports except %{item.val}.\"}>%{item.ival}</var>}}"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:438
+msgid "Tracking helper"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:176
+#: applications/luci-app-firewall/root/usr/share/luci/menu.d/luci-app-firewall.json:35
+msgid "Traffic Rules"
+msgstr "მიმოცვლის წესები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:174
+msgid ""
+"Traffic rules define policies for packets traveling between different zones, "
+"for example to reject traffic between certain hosts or to open WAN ports on "
+"the router."
+msgstr ""
+"მიმოცვლის წესები განსაზღვრავს დებულებებს კრებულებისთვის, რომლებიც იგზავნება "
+"სხვადასხვა არეებს შორის, მაგალითად, ცალკეული წყაროდან მომავალი მონაცემების "
+"უარსაყოფად ან WAN-პორტების გასახსნელად როუტერზე."
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:481
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:351
+msgid "Tuesday"
+msgstr "სამშაბათი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/custom.js:19
+msgid "Unable to save contents: %s"
+msgstr "ვერ შეინახა შიგთავსი: %s"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:190
+msgid ""
+"Unit: seconds. Default <code>0</code> means the entry is added permanently "
+"to the set.<br />Max: 2147483 seconds."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:337
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:460
+msgid "Unknown or not installed conntrack helper \"%s\""
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:185
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:189
+msgid "Unnamed NAT"
+msgstr "უსახელო NAT"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:168
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:183
+msgid "Unnamed forward"
+msgstr "უსახელო გადამისამართება"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:190
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:210
+msgid "Unnamed rule"
+msgstr "უსახელო წესი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:50
+msgid "Unnamed set"
+msgstr "უსახელო ნაკრები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:124
+msgid "Unnamed zone"
+msgstr "უსახელო არე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:595
+msgid "Unrecognized protocol"
+msgstr "დაუდგენელი ოქმი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:693
+msgid ""
+"Upon pressing \"Continue\", \"redirect\" sections with target \"SNAT\" will "
+"be converted to \"nat\" sections and the firewall will be restarted to apply "
+"the updated configuration."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:311
+msgid "Use external IP address"
+msgstr "გარე IP-მისამართის გამოყენება"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:310
+msgid "Use internal IP address"
+msgstr "შიდა IP-მისამართის გამოყენება"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:243
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:377
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:318
+msgid "Use ipset"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:225
+msgid ""
+"Use this option to classify zone traffic by raw, non-<em>uci</em> managed "
+"network devices."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:230
+msgid ""
+"Use this option to classify zone traffic by source or destination subnet "
+"instead of networks or devices."
+msgstr ""
+"ამ პარამეტრის გამოყენება არეებში მიმოცვლის დასახარისხებლად საწყისი ან "
+"საბოლოო ქვექსელით, ნაცვლად ქსელებით ან მოწყობილობებით."
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:330
+msgid "Valid firewall mark required"
+msgstr "ქსელის ფარის მართებული ნიშანია საჭირო"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:482
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:352
+msgid "Wednesday"
+msgstr "ოთხშაბათი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:474
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:344
+msgid "Week Days"
+msgstr "კვირის დღეები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:419
+msgid "XOR firewall mark"
+msgstr "ქსელის ფარის XOR-ნიშანი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:315
+msgid "XOR mark"
+msgstr "XOR-ნიშანი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:28
+msgid "Your device does not run firewall4."
+msgstr "თქვენს მოწყობილობაზე არაა გაშვებული firewall4."
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:26
+msgid "Your device runs firewall4."
+msgstr "თქვენს მოწყობილობაზე გაშვებულია firewall4."
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:137
+msgid "Zone ⇒ Forwardings"
+msgstr "არე ⇒ გადამისამართება"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:95
+msgid "Zones"
+msgstr "არეები"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:316
+msgid ""
+"Zones from which reflection rules shall be created. If unset, only the "
+"destination zone is used."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:414
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:70
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:153
+msgid "accept"
+msgstr "მიღება"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:267
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:461
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:484
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:266
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:297
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:324
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:391
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:406
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:440
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:447
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:262
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:278
+msgid "any"
+msgstr "ნებისმიერი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:53
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:86
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:65
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:78
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:46
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:56
+msgid "any zone"
+msgstr "ნებისმიერი არე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:297
+msgid "any/all"
+msgstr "ნებისმიერი/ყველა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:418
+msgid "apply firewall mark"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:417
+msgid "assign conntrack helper"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:192
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:220
+msgid "automatic"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:124
+msgid "bitmap"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:130
+msgid "bitmap is ipv4 only"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:72
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:89
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:67
+msgid "day"
+msgstr "დღე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:86
+msgid "dest_ip: Destination IP"
+msgstr "dest_ip: საბოლოო IP"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:88
+msgid "dest_mac: Destination MAC addr"
+msgstr "dest_mac: საბოლოო MAC-მის"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:89
+msgid "dest_net: Destination (sub)net"
+msgstr "dest_net: საბოლოო (ქვე)ქსელი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:87
+msgid "dest_port: Destination Port"
+msgstr "dest_port: საბოლოო პორტი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:91
+msgid "dest_set: Destination ipset*"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:311
+msgid "do not rewrite"
+msgstr "გადაწერის გარეშე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:416
+msgid "don't track"
+msgstr "მიდევნების გარეშე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:413
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:69
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:152
+msgid "drop"
+msgstr "აცილება"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:21
+msgid ""
+"firewall4 supports referencing and creating IP sets to simplify matching of "
+"large address lists without the need to create one rule per item to match. "
+"Port ranges in ipsets are unsupported by firewall4.<br />"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:152
+msgid "fromport-toport"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:125
+msgid "hash"
+msgstr "ჰეში"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:72
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:89
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:67
+msgid "hour"
+msgstr "საათი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:74
+msgid "ip: IP addr"
+msgstr "ip: IP-მის"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:146
+msgid "ip[/cidr]<br />"
+msgstr "ip[/cidr]<br />"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:138
+msgid "ip[/cidr]<br />For use with Match datatypes: <code>*_ip</code>."
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:63
+msgid "ipv4"
+msgstr "ipv4"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:126
+msgid "list"
+msgstr "სია"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:76
+msgid "mac: MAC addr"
+msgstr "mac: MAC-მის"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:101
+msgid "macaddr|ip[/cidr]<br />"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:72
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:89
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:67
+msgid "minute"
+msgstr "წუთი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:77
+msgid "net: (sub)net"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:75
+msgid "port: Port"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:415
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:68
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:151
+msgid "reject"
+msgstr "უარყოფა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:72
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:89
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:67
+msgid "second"
+msgstr "წამი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:79
+msgid "set: ipset*"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:85
+msgid "src_Set: Source ipset*"
+msgstr ""
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:80
+msgid "src_ip: Source IP"
+msgstr "src_ip: საწყისი IP"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:82
+msgid "src_mac: Source MAC addr"
+msgstr "src_mac: საწყისი MAC-მის"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:83
+msgid "src_net: Source (sub)net"
+msgstr "src_net: საწყისი (ქვე)ქსელი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:81
+msgid "src_port: Source Port"
+msgstr "src_port: საწყისი პორტი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:53
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:62
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/forwards.js:86
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:65
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:78
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/snats.js:56
+msgid "this device"
+msgstr "ეს მოწყობილობა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:118
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:220
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:333
+msgid "this new zone"
+msgstr "ახალი არე"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:353
+msgid "unlimited"
+msgstr "შეუზღუდავი"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:250
+msgid "unspecified"
+msgstr "არ მითითებულა"
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:107
+#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/ipsets.js:166
+msgid "up to 65536 entries."
+msgstr "65536 ჩანაწერამდე."
+
+#: applications/luci-app-firewall/htdocs/luci-static/resources/tools/firewall.js:338
+msgid "valid firewall mark"
+msgstr ""
diff --git a/applications/luci-app-firewall/po/ro/firewall.po b/applications/luci-app-firewall/po/ro/firewall.po
index fb6a46e32c..8f3c1819ab 100644
--- a/applications/luci-app-firewall/po/ro/firewall.po
+++ b/applications/luci-app-firewall/po/ro/firewall.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2023-08-26 23:26+0000\n"
+"PO-Revision-Date: 2023-09-02 13:20+0000\n"
"Last-Translator: Simona Iacob <s@zp1.net>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsfirewall/ro/>\n"
@@ -1370,6 +1370,8 @@ msgid ""
"Zones from which reflection rules shall be created. If unset, only the "
"destination zone is used."
msgstr ""
+"Zonele din care se creează reguli de reflecție. Dacă nu este setată, se "
+"utilizează numai zona de destinație."
#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:414
#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:70
diff --git a/applications/luci-app-firewall/po/zh_Hans/firewall.po b/applications/luci-app-firewall/po/zh_Hans/firewall.po
index 84477a56ea..09bbeb9f10 100644
--- a/applications/luci-app-firewall/po/zh_Hans/firewall.po
+++ b/applications/luci-app-firewall/po/zh_Hans/firewall.po
@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
-"PO-Revision-Date: 2023-07-27 06:17+0000\n"
-"Last-Translator: Eric <hamburger2048@users.noreply.hosted.weblate.org>\n"
+"PO-Revision-Date: 2023-09-02 17:29+0000\n"
+"Last-Translator: MkQtS <MkQtS@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"openwrt/luciapplicationsfirewall/zh_Hans/>\n"
"Language: zh_Hans\n"
@@ -10,7 +10,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:48
msgid ""
@@ -1286,7 +1286,7 @@ msgstr "区域"
msgid ""
"Zones from which reflection rules shall be created. If unset, only the "
"destination zone is used."
-msgstr "应从中创建反射规则的区域。如威慑hi,将仅使用目标区域。"
+msgstr "应从中创建反射规则的区域。若未设置,将仅使用目标区域。"
#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/rules.js:414
#: applications/luci-app-firewall/htdocs/luci-static/resources/view/firewall/zones.js:70
diff --git a/applications/luci-app-https-dns-proxy/Makefile b/applications/luci-app-https-dns-proxy/Makefile
index 6661542eae..4ed8b88163 100644
--- a/applications/luci-app-https-dns-proxy/Makefile
+++ b/applications/luci-app-https-dns-proxy/Makefile
@@ -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
index 0000000000..bdc99fcbda
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/https-dns-proxy/status.js
@@ -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
index 0000000000..a0d809cd32
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/htdocs/luci-static/resources/view/https-dns-proxy/overview.js
@@ -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
index f7122df478..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/controller/https-dns-proxy.lua
+++ /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
index 2fa9985592..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns1.lua
+++ /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
index f31dd38a23..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers.disabled/ca.dnscrypt.dns2.lua
+++ /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
index e3d8d1e11f..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.doh.lua
+++ /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
index 06885628c5..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/app.tiar.jp.lua
+++ /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
index dfe1af44c0..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.family.lua
+++ /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
index 5b37a9a4ca..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.private.lua
+++ /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
index 810f479bda..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ca.cira.canadianshield.protected.lua
+++ /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
index 3253cf49ea..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.lua
+++ /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
index 9f0c594e0a..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/ch.switch.dns.lua
+++ /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
index f582a821ff..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.360.doh.lua
+++ /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
index 6e40de3b13..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.edu.tsinghua.tuna.dns.lua
+++ /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
index b64bd9ceb8..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cn.rubyfish.dns.lua
+++ /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
index f54c912e7f..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/co.osxz.dns.lua
+++ /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
index 0c2a4d8156..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns-family.lua
+++ /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
index 79db2029dd..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.adguard.dns.lua
+++ /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
index 5a67fcbdb7..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.ahadns.blitz.lua
+++ /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
index 1654feab0b..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.alidns.dns.lua
+++ /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
index 8e22f59bb2..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-ch.lua
+++ /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
index d252c521ac..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-de.lua
+++ /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
index 75f01ed17c..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-fi.lua
+++ /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
index 3cb783d42e..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-jp.lua
+++ /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
index 32b684d261..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.blahdns.doh-sg.lua
+++ /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
index 69fe4d2d24..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.family.lua
+++ /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
index eb78366ac2..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.lua
+++ /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
index 3013305bd5..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.cloudflare-dns.security.lua
+++ /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
index e7d6ffda93..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.family.lua
+++ /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
index 4b8ee02729..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads-social.lua
+++ /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
index 947ed59a1c..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware-ads.lua
+++ /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
index 77f062b1b4..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.malware.lua
+++ /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
index a520c9694f..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p0.lua
+++ /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
index eac144e92d..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p1.lua
+++ /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
index 0e7c846a6a..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p2.lua
+++ /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
index 0249678de0..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.p3.lua
+++ /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
index d4128df343..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.controld.freedns.unfiltered.lua
+++ /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
index 1135c093d8..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.decloudus.dns.lua
+++ /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
index 41b63ffbd7..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnsforfamily.dns-doh.lua
+++ /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
index e531bcc8d4..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.dnslify.doh.lua
+++ /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
index 16a833110f..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.doh.lua
+++ /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
index 8686d8c5f5..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.opendns.familyshield.doh.lua
+++ /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
index b61630af26..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.pumplex.dns.lua
+++ /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
index 966ccd757a..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/com.rethinkdns.basic.lua
+++ /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
index 5568fc7bbb..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/cz.nic.odvr.lua
+++ /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
index a6fe548fc1..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/de.dnsforge.lua
+++ /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
index 5954ea78cf..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/fi.lelux.resolver-eu.lua
+++ /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
index a23e9e5318..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/google.dns.lua
+++ /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
index 63e4290f00..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh-ads.lua
+++ /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
index 67f9e5ffd7..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/gr.libredns.doh.lua
+++ /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
index eecb562da7..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-family.lua
+++ /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
index cfa938db83..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns-nonfiltering.lua
+++ /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
index 90269504e0..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.adguard-dns.dns.lua
+++ /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
index 53aca92edd..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.nextdns.dns.lua
+++ /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
index 6746e50573..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/io.seby.doh-2.lua
+++ /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
index bd7660e116..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/jp.iij.dns.public.lua
+++ /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
index 474a47bdaa..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/lu.restena.kaitain.lua
+++ /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
index 4105111cf9..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.au.doh.lua
+++ /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
index 382893edcc..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.chi.doh.lua
+++ /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
index 3ebbcc43c1..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.es.doh.lua
+++ /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
index c2a128e2fd..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.in.doh.lua
+++ /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
index 7c2d1a51c7..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.it.doh.lua
+++ /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
index 7d643cfa24..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.la.doh.lua
+++ /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
index ce709d1520..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.nl.doh.lua
+++ /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
index d89ccfb572..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.no.doh.lua
+++ /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
index 6451ae9109..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.ny.doh.lua
+++ /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
index f5563a5937..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ahadns.pl.doh.lua
+++ /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
index 11f738cc48..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.applied-privacy.lua
+++ /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
index d64f5c085a..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.cfiec.dns.lua
+++ /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
index 83582082c0..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.ffmuc.doh.lua
+++ /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
index 24a4f40763..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.he.ordns.lua
+++ /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
index 9213b9988d..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.idnet.doh.lua
+++ /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
index f5a37fa4a8..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.adblocker.lua
+++ /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
index 2857f642d2..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.mullvad.doh.lua
+++ /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
index c627be3d68..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns.lua
+++ /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
index 7abbdc4efc..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns10.lua
+++ /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
index 7e7dcdd56c..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns11.lua
+++ /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
index 6c2994ab41..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/net.quad9.dns9.lua
+++ /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
index fe42ae3014..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.dns.lua
+++ /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
index 9aff7f23df..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/one.comss.east.dns.lua
+++ /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
index 09b3e250b7..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-adult.lua
+++ /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
index cd55277978..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-family.lua
+++ /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
index 339a0c2361..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.cleanbrowsing.doh-security.lua
+++ /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
index b89b27da91..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/org.snopyta.dns.doh.fi.lua
+++ /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
index 1dfee88707..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/pub.doh.lua
+++ /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
index 5b23d3dd46..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/sb.dns.lua
+++ /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
index 628dd8be57..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/https-dns-proxy/providers/tw.twnic.dns.lua
+++ /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
index 8fa613a3d5..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/model/cbi/https-dns-proxy.lua
+++ /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
index 6fd7ebd355..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/buttons.htm
+++ /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
index 6fb3d51d3b..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/css.htm
+++ /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
index fac92a3925..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/js.htm
+++ /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
index 3840cd19d4..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status-textarea.htm
+++ /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
index b02c7faa82..0000000000
--- a/applications/luci-app-https-dns-proxy/luasrc/view/https-dns-proxy/status.htm
+++ /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%>
diff --git a/applications/luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot b/applications/luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot
index 13ad80e724..f2019142fb 100644
--- a/applications/luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot
+++ b/applications/luci-app-https-dns-proxy/po/templates/https-dns-proxy.pot
@@ -1,493 +1,258 @@
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
index 0000000000..8400af5f1f
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/libexec/rpcd/luci.https-dns-proxy
@@ -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
index 0000000000..6fe4ec72d5
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/app.tiarap.doh.json
@@ -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
index 0000000000..9fd0f9a8d9
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ca.cira.canadianshield.json
@@ -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
index 0000000000..ec3b9466cc
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ch.digitale-gesellschaft.dns.json
@@ -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
index 0000000000..19e36079df
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/ch.switch.dns.json
@@ -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
index 0000000000..ef97fa27e5
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cn.360.doh.json
@@ -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
index 0000000000..ee75e953a2
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cn.rubyfish.dns.json
@@ -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
index 0000000000..943aca80bc
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/co.oszx.dns.json
@@ -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
index 0000000000..f685ba4d60
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.adguard.dns.json
@@ -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
index 0000000000..b2c463fd1a
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.ahadns.blitz.json
@@ -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
index 0000000000..b32694b417
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.alidns.dns.json
@@ -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
index 0000000000..a101c9030d
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.blahdns.doh.json
@@ -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
index 0000000000..16f668911d
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.cloudflare-dns.json
@@ -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
index 0000000000..8ee2dc3804
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.controld.freedns.json
@@ -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
index 0000000000..9d7053c5eb
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.decloudus.dns.json
@@ -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
index 0000000000..c39427dade
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.dnsforfamily.dns-doh.json
@@ -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
index 0000000000..73421f5c66
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.dnslify.doh.json
@@ -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
index 0000000000..b9989d5383
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.opendns.doh.json
@@ -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
index 0000000000..890438966f
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/com.rethinkdns.sky.json
@@ -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
index 0000000000..296f38ae0d
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/cz.nic.odvr.json
@@ -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
index 0000000000..a334e6a677
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/de.dnsforge.json
@@ -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
index 0000000000..6372c9e5ac
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/fi.lelux.resolver-eu.json
@@ -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
index 0000000000..64d8e86f24
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/google.dns.json
@@ -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
index 0000000000..037289f515
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/gr.libredns.doh.json
@@ -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
index 0000000000..753b78523c
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/io.nextdns.dns.json
@@ -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
index 0000000000..90b6be7927
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/io.seby.doh-2.json
@@ -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
index 0000000000..ffd8be7515
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/jp.iij.dns.public.json
@@ -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
index 0000000000..1dcc11f903
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/lu.restena.kaitain.json
@@ -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
index 0000000000..2acdcee955
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.ahadns.doh.json
@@ -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
index 0000000000..d24e7f1016
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.applied-privacy.doh.json
@@ -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
index 0000000000..fcca173586
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.cfiec.dns.json
@@ -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
index 0000000000..5c0d6a0416
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.ffmuc.doh.json
@@ -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
index 0000000000..6a2be8c6c6
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.he.ordns.json
@@ -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
index 0000000000..9e6fdf779f
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.idnet.doh.json
@@ -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
index 0000000000..18dad9c214
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.mullvad.doh.json
@@ -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
index 0000000000..b3b5d6f92f
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/net.quad9.json
@@ -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
index 0000000000..85dd5cc663
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/one.comss.dns.json
@@ -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
index 0000000000..fa21e53b24
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/org.cleanbrowsing.doh.json
@@ -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
index 0000000000..521933c52d
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/org.snopyta.dns.doh.fi.json
@@ -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
index 0000000000..0a381b1fdd
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/pub.doh.json
@@ -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
index 0000000000..f061b17a6b
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/sb.dns.json
@@ -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
index 0000000000..ddcd9a3a49
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/https-dns-proxy/providers/tw.twnic.dns.json
@@ -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
index 0000000000..4b221459bb
--- /dev/null
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/luci/menu.d/luci-app-https-dns-proxy.json
@@ -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"
+ ]
+ }
+ }
+}
diff --git a/applications/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json b/applications/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json
index 97f8c6df41..6603d3596a 100644
--- a/applications/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json
+++ b/applications/luci-app-https-dns-proxy/root/usr/share/rpcd/acl.d/luci-app-https-dns-proxy.json
@@ -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"
+ ]
+ }
}
}
}
diff --git a/applications/luci-app-ksmbd/po/sk/ksmbd.po b/applications/luci-app-ksmbd/po/sk/ksmbd.po
index bece863174..1ff4ff6dac 100644
--- a/applications/luci-app-ksmbd/po/sk/ksmbd.po
+++ b/applications/luci-app-ksmbd/po/sk/ksmbd.po
@@ -1,6 +1,6 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2022-10-30 15:06+0000\n"
+"PO-Revision-Date: 2023-09-02 23:33+0000\n"
"Last-Translator: MaycoH <hudec.marian@hotmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsksmbd/sk/>\n"
@@ -8,7 +8,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 4.14.2-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:87
msgid "Allow guests"
@@ -69,7 +69,7 @@ msgstr "Všeobecné nastavenia"
#: applications/luci-app-ksmbd/root/usr/share/rpcd/acl.d/luci-app-ksmbd.json:3
#, fuzzy
msgid "Grant access to LuCI app ksmbd"
-msgstr "Povoliť prístup pre aplikáciu LuCI ksmbd"
+msgstr "Udeliť prístup pre aplikáciu LuCI ksmbd"
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:98
msgid "Hide dot files"
diff --git a/applications/luci-app-minidlna/po/sk/minidlna.po b/applications/luci-app-minidlna/po/sk/minidlna.po
index d2d5d2c5b0..158d483967 100644
--- a/applications/luci-app-minidlna/po/sk/minidlna.po
+++ b/applications/luci-app-minidlna/po/sk/minidlna.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2023-07-10 15:50+0000\n"
+"PO-Revision-Date: 2023-09-03 01:39+0000\n"
"Last-Translator: MaycoH <hudec.marian@hotmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsminidlna/sk/>\n"
@@ -10,7 +10,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:51
msgid "Advanced Settings"
@@ -18,15 +18,15 @@ msgstr "Pokročilé nastavenia"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:80
msgid "Album art names"
-msgstr ""
+msgstr "Názvy obrázkov albumov"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:95
msgid "Allow wide links"
-msgstr ""
+msgstr "Povoliť široké odkazy"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:107
msgid "Announced UUID"
-msgstr ""
+msgstr "Ohlásené UUID"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:110
msgid "Announced model number"
@@ -37,12 +37,13 @@ msgid "Announced serial number"
msgstr "Ohlásené sériové číslo"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:73
+#, fuzzy
msgid "Browse directory"
-msgstr ""
+msgstr "Prezerať adresár"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:88
msgid "Database directory"
-msgstr ""
+msgstr "Adresár databázy"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:53
msgid "Enable"
@@ -54,7 +55,7 @@ msgstr "Povoliť TIVO"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:90
msgid "Enable inotify"
-msgstr ""
+msgstr "Povoliť inotify"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:69
msgid "Friendly name"
@@ -66,7 +67,7 @@ msgstr "Všeobecné nastavenia"
#: applications/luci-app-minidlna/root/usr/share/rpcd/acl.d/luci-app-minidlna.json:3
msgid "Grant access to minidlna status and configuration"
-msgstr ""
+msgstr "Udeliť prístup k stavu a konfigurácii miniDLNA"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:59
msgid "Interfaces"
@@ -81,12 +82,15 @@ msgid ""
"MiniDLNA is server software with the aim of being fully compliant with DLNA/"
"UPnP-AV clients."
msgstr ""
+"MiniDLNA je serverový softvér s cieľom byť plne kompatibilný s klientmi DLNA/"
+"UPnP-AV."
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:110
msgid ""
"Model number the miniDLNA daemon will report to clients in its XML "
"description."
msgstr ""
+"Číslo modelu, ktoré miniDLNA démon bude hlásiť klientom vo svojom XML popise."
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:74
msgid "Music"
@@ -114,7 +118,7 @@ msgstr "Port"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:56
msgid "Port for HTTP (descriptions, SOAP, media transfer) traffic."
-msgstr ""
+msgstr "Port pre prenos HTTP (popisy, SOAP, prenos médií)."
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:99
msgid "Presentation URL"
@@ -122,18 +126,22 @@ msgstr "Prezentačná URL"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:71
msgid "Root container"
-msgstr ""
+msgstr "Koreňový (root) kontajner"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:104
msgid ""
"Serial number the miniDLNA daemon will report to clients in its XML "
"description."
msgstr ""
+"Sériové číslo, ktoré miniDLNA démon bude hlásiť klientom vo svojom XML "
+"popise."
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:69
+#, fuzzy
msgid ""
"Set this if you want to customize the name that shows up on your clients."
msgstr ""
+"Toto nastavte, ak chcete prispôsobiť názov, ktorý sa zobrazí na klientoch."
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:88
msgid ""
@@ -174,11 +182,11 @@ msgstr ""
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:113
msgid "Specify the path to the MiniSSDPd socket."
-msgstr ""
+msgstr "Zadajte cestu k socketu MiniSSDPd."
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:72
msgid "Standard container"
-msgstr ""
+msgstr "Štandardný kontajner"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:39
msgid "Status"
@@ -190,10 +198,13 @@ msgstr "Prísne podľa štandardu DLNA"
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:25
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/status/include/80_minidlna.js:28
+#, fuzzy
msgid ""
"The miniDLNA service is active, serving %d audio, %d video and %d image "
"files."
msgstr ""
+"Služba miniDLNA je aktívna, poskytuje %d audio, %d video a %d obrázkových "
+"súborov."
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:18
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/status/include/80_minidlna.js:22
@@ -203,6 +214,7 @@ msgstr "Služba miniDLNA nie je spustená."
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:80
msgid "This is a list of file names to check for when searching for album art."
msgstr ""
+"Toto je zoznam názvov súborov na kontrolu pri vyhľadávaní obrázkov albumov."
#: applications/luci-app-minidlna/htdocs/luci-static/resources/view/minidlna.js:75
msgid "Video"
diff --git a/applications/luci-app-mjpg-streamer/po/pl/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/pl/mjpg-streamer.po
index ebdec45fb9..1521202e9d 100644
--- a/applications/luci-app-mjpg-streamer/po/pl/mjpg-streamer.po
+++ b/applications/luci-app-mjpg-streamer/po/pl/mjpg-streamer.po
@@ -1,6 +1,6 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2022-05-10 19:15+0000\n"
+"PO-Revision-Date: 2023-09-02 03:54+0000\n"
"Last-Translator: Matthaiks <kitynska@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsmjpg-streamer/pl/>\n"
@@ -9,7 +9,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.12.1\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:249
msgid "Allow ringbuffer to exceed limit by this amount"
@@ -198,7 +198,7 @@ msgstr ""
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:216
msgid "Stream unavailable"
-msgstr ""
+msgstr "Strumień niedostępny"
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:127
msgid "TCP port for this HTTP server"
diff --git a/applications/luci-app-mjpg-streamer/po/ro/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/ro/mjpg-streamer.po
index da3e6219e2..32a317ede9 100644
--- a/applications/luci-app-mjpg-streamer/po/ro/mjpg-streamer.po
+++ b/applications/luci-app-mjpg-streamer/po/ro/mjpg-streamer.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2023-04-23 07:04+0000\n"
-"Last-Translator: olimpiumarius <oliver_magnum44@yahoo.com>\n"
+"PO-Revision-Date: 2023-09-02 13:20+0000\n"
+"Last-Translator: Simona Iacob <s@zp1.net>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsmjpg-streamer/ro/>\n"
"Language: ro\n"
@@ -9,7 +9,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 4.18-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:249
msgid "Allow ringbuffer to exceed limit by this amount"
@@ -198,7 +198,7 @@ msgstr ""
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:216
msgid "Stream unavailable"
-msgstr ""
+msgstr "Fluxul nu este disponibil"
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:127
msgid "TCP port for this HTTP server"
diff --git a/applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po
index f6926dc3cc..e29b43ee69 100644
--- a/applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po
+++ b/applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: LuCI: mjpg-streamer\n"
"POT-Creation-Date: 2017-10-17 14:30+0300\n"
-"PO-Revision-Date: 2023-04-03 07:17+0000\n"
-"Last-Translator: AHOHNMYC <lqwh2h2cwa@protonmail.com>\n"
+"PO-Revision-Date: 2023-09-03 13:31+0000\n"
+"Last-Translator: st7105 <st7105@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsmjpg-streamer/ru/>\n"
"Language: ru\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.17-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
@@ -205,7 +205,7 @@ msgstr ""
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:216
msgid "Stream unavailable"
-msgstr ""
+msgstr "Поток недоступен"
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:127
msgid "TCP port for this HTTP server"
diff --git a/applications/luci-app-mjpg-streamer/po/zh_Hans/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/zh_Hans/mjpg-streamer.po
index 70e494cd49..398e97eb5a 100644
--- a/applications/luci-app-mjpg-streamer/po/zh_Hans/mjpg-streamer.po
+++ b/applications/luci-app-mjpg-streamer/po/zh_Hans/mjpg-streamer.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: luci-app-mjpg-streamer\n"
"POT-Creation-Date: 2015-06-11 21:11+0100\n"
-"PO-Revision-Date: 2023-05-08 14:25+0000\n"
-"Last-Translator: Keen <keen_kwuo@msn.com>\n"
+"PO-Revision-Date: 2023-09-02 03:54+0000\n"
+"Last-Translator: Eric <hamburger2048@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"openwrt/luciapplicationsmjpg-streamer/zh_Hans/>\n"
"Language: zh_Hans\n"
@@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.18-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:249
@@ -198,7 +198,7 @@ msgstr "设置品质(百分比)。此设置会开启 YUYV 格式输出,关
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:216
msgid "Stream unavailable"
-msgstr ""
+msgstr "流不可用"
#: applications/luci-app-mjpg-streamer/htdocs/luci-static/resources/view/mjpg-streamer/mjpg-streamer.js:127
msgid "TCP port for this HTTP server"
diff --git a/applications/luci-app-nlbwmon/po/sk/nlbwmon.po b/applications/luci-app-nlbwmon/po/sk/nlbwmon.po
index 3da9a20f56..dbda122b24 100644
--- a/applications/luci-app-nlbwmon/po/sk/nlbwmon.po
+++ b/applications/luci-app-nlbwmon/po/sk/nlbwmon.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2021-08-03 19:09+0000\n"
-"Last-Translator: Marek Ľach <graweeld@googlemail.com>\n"
+"PO-Revision-Date: 2023-09-03 01:39+0000\n"
+"Last-Translator: MaycoH <hudec.marian@hotmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsnlbwmon/sk/>\n"
"Language: sk\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: applications/luci-app-nlbwmon/htdocs/luci-static/resources/view/nlbw/display.js:563
msgid "%d IPv4-only hosts"
@@ -184,7 +184,7 @@ msgstr ""
#: applications/luci-app-nlbwmon/htdocs/luci-static/resources/view/nlbw/config.js:169
msgid "Database directory"
-msgstr ""
+msgstr "Adresár databázy"
#: applications/luci-app-nlbwmon/htdocs/luci-static/resources/view/nlbw/config.js:170
msgid ""
diff --git a/applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js b/applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js
deleted file mode 100644
index 6c5ef19c11..0000000000
--- a/applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js
+++ /dev/null
@@ -1,323 +0,0 @@
-// Copyright 2022 Stan Grishin <stangri@melmac.ca>
-// This code wouldn't have been possible without help from [@vsviridov](https://github.com/vsviridov)
-
-"require ui";
-"require rpc";
-"require form";
-"require baseclass";
-
-var pkg = {
- get Name() { return 'simple-adblock'; },
- get URL() { return 'https://docs.openwrt.melmac.net/' + pkg.Name + '/'; },
-};
-
-var getInitList = rpc.declare({
- object: "luci." + pkg.Name,
- method: "getInitList",
- params: ["name"],
-});
-
-var getInitStatus = rpc.declare({
- object: "luci." + pkg.Name,
- method: "getInitStatus",
- params: ["name"],
-});
-
-var getPlatformSupport = rpc.declare({
- object: "luci." + pkg.Name,
- method: "getPlatformSupport",
- params: ["name"],
-});
-
-var _setInitAction = rpc.declare({
- object: "luci." + pkg.Name,
- method: "setInitAction",
- params: ["name", "action"],
- expect: { result: false },
-});
-
-var RPC = {
- listeners: [],
- on: function on(event, callback) {
- var pair = { event: event, callback: callback }
- this.listeners.push(pair);
- return function unsubscribe() {
- this.listeners = this.listeners.filter(function (listener) {
- return listener !== pair;
- });
- }.bind(this);
- },
- emit: function emit(event, data) {
- this.listeners.forEach(function (listener) {
- if (listener.event === event) {
- listener.callback(data);
- }
- });
- },
- getInitList: function getInitList(name) {
- getInitList(name).then(function (result) {
- this.emit('getInitList', result);
- }.bind(this));
- },
- getInitStatus: function getInitStatus(name) {
- getInitStatus(name).then(function (result) {
- this.emit('getInitStatus', result);
- }.bind(this));
- },
- getPlatformSupport: function getPlatformSupport(name) {
- getPlatformSupport(name).then(function (result) {
- this.emit('getPlatformSupport', result);
- }.bind(this));
- },
- setInitAction: function setInitAction(name, action) {
- _setInitAction(name, action).then(function (result) {
- this.emit('setInitAction', result);
- }.bind(this));
- },
-}
-
-var status = baseclass.extend({
- render: function () {
- return Promise.all([
- L.resolveDefault(getInitStatus(pkg.Name), {}),
- ]).then(function (data) {
- var replyStatus = data[0];
- var text ="";
- var reply = replyStatus[pkg.Name];
- var outputFile = reply.outputFile;
- var outputCache = reply.outputCache;
- var statusTable = {
- statusNoInstall: _("%s is not installed or not found").format(pkg.Name),
- statusStopped: _("Stopped"),
- statusStarting: _("Starting"),
- statusProcessing: _("Processing lists"),
- statusRestarting: _("Restarting"),
- statusForceReloading: _("Force Reloading"),
- statusDownloading: _("Downloading lists"),
- statusError: _("Error"),
- statusWarning: _("Warning"),
- statusFail: _("Fail"),
- statusSuccess: _("Active")
- };
-
- var header = E('h2', {}, _("Simple AdBlock - Status"))
- var statusTitle = E('label', { class: 'cbi-value-title' }, _("Service Status"));
- if (reply.version) {
- text += _("Version %s").format(reply.version) + " - ";
- switch (reply.status) {
- case 'statusSuccess':
- text += statusTable[reply.status] + ".";
- text += "<br />" + _("Blocking %s domains (with %s).").format(reply.entries, reply.dns);
- if (reply.outputGzipExists) {
- text += "<br />" + _("Compressed cache file created.");
- }
- if (reply.force_dns_active) {
- text += "<br />" + _("Force DNS ports:");
- reply.force_dns_ports.forEach(element => {
- text += " " + element;
- });
- text += ".";
- }
- break;
- case 'statusStopped':
- if (reply.enabled) {
- text += statusTable[reply.status] + ".";
- }
- else {
- text += statusTable[reply.status] + _("disabled") + "."
- }
- if (reply.outputCacheExists) {
- text += "<br />" + _("Cache file found.");
- }
- else if (reply.outputGzipExists) {
- text += "<br />" + _("Compressed cache file found.");
- }
- break;
- case 'statusRestarting':
- case 'statusForceReloading':
- case 'statusDownloading':
- case 'statusProcessing':
- text += statusTable[reply.status] + "...";
- break;
- default:
- text += statusTable[reply.status] + ".";
- break;
- }
- }
- else {
- text = _("Not installed or not found");
- }
- var statusText = E('div', {}, text);
- var statusField = E('div', { class: 'cbi-value-field' }, statusText);
- var statusDiv = E('div', { class: 'cbi-value' }, [statusTitle, statusField]);
-
- var warningsDiv = [];
- if (reply.warnings && reply.warnings.length) {
- var warningTable = {
- warningExternalDnsmasqConfig: _("use of external dnsmasq config file detected, please set '%s' option to '%s'").format("dns", "dnsmasq.conf"),
- warningMissingRecommendedPackages: _("some recommended packages are missing")
- }
- var warningsTitle = E('label', { class: 'cbi-value-title' }, _("Service Warnings"));
- var text = "";
- (reply.warnings).forEach(element => {
- text += (warningTable[element.id]).format(element.extra || ' ') + "<br />";
- });
- var warningsText = E('div', {}, text);
- var warningsField = E('div', { class: 'cbi-value-field' }, warningsText);
- warningsDiv = E('div', { class: 'cbi-value' }, [warningsTitle, warningsField]);
- }
-
- var errorsDiv = [];
- if (reply.errors && reply.errors.length) {
- var errorTable = {
- errorConfigValidationFail: _("config (%s) validation failure!").format('/etc/config/' + pkg.Name),
- errorServiceDisabled: _("%s is currently disabled").format(pkg.Name),
- errorNoDnsmasqIpset: _("dnsmasq ipset support is enabled, but dnsmasq is either not installed or installed dnsmasq does not support ipset"),
- errorNoIpset: _("dnsmasq ipset support is enabled, but ipset is either not installed or installed ipset does not support '%s' type").format("hash:net"),
- errorNoDnsmasqNftset: _("dnsmasq nft set support is enabled, but dnsmasq is either not installed or installed dnsmasq does not support nft set"),
- errorNoNft: _("dnsmasq nft sets support is enabled, but nft is not installed"),
- errorNoWanGateway: _("the %s failed to discover WAN gateway").format(pkg.Name),
- errorOutputDirCreate: _("failed to create directory for %s file"),
- errorOutputFileCreate: _("failed to create '%s' file").format(outputFile),
- errorFailDNSReload: _("failed to restart/reload DNS resolver"),
- errorSharedMemory: _("failed to access shared memory"),
- errorSorting: _("failed to sort data file"),
- errorOptimization: _("failed to optimize data file"),
- errorAllowListProcessing: _("failed to process allow-list"),
- errorDataFileFormatting: _("failed to format data file"),
- errorMovingDataFile: _("failed to move temporary data file to '%s'").format(outputFile),
- errorCreatingCompressedCache: _("failed to create compressed cache"),
- errorRemovingTempFiles: _("failed to remove temporary files"),
- errorRestoreCompressedCache: _("failed to unpack compressed cache"),
- errorRestoreCache: _("failed to move '%s' to '%s'").format(outputCache, outputFile),
- errorOhSnap: _("failed to create block-list or restart DNS resolver"),
- errorStopping: _("failed to stop %s").format(pkg.Name),
- errorDNSReload: _("failed to reload/restart DNS resolver"),
- errorDownloadingConfigUpdate: _("failed to download Config Update file"),
- errorDownloadingList: _("failed to download"),
- errorParsingConfigUpdate: _("failed to parse Config Update file"),
- errorParsingList: _("failed to parse"),
- errorNoSSLSupport: _("no HTTPS/SSL support on device"),
- errorCreatingDirectory: _("failed to create output/cache/gzip file directory")
- }
- var errorsTitle = E('label', { class: 'cbi-value-title' }, _("Service Errors"));
- var text = "";
- (reply.errors).forEach(element => {
- text += (errorTable[element.id]).format(element.extra || ' ') + "<br />";
- });
- var errorsText = E('div', {}, text);
- var errorsField = E('div', { class: 'cbi-value-field' }, errorsText);
- errorsDiv = E('div', { class: 'cbi-value' }, [errorsTitle, errorsField]);
- }
-
- var btn_gap = E('span', {}, '&#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' }, _('Force re-downloading %s block lists').format(pkg.Name))
- ]);
- return RPC.setInitAction(pkg.Name, 'dl');
- }
- }, _('Force Re-Download'));
-
- var btn_stop = E('button', {
- 'class': 'btn cbi-button cbi-button-reset',
- disabled: true,
- click: function (ev) {
- ui.showModal(null, [
- E('p', { 'class': 'spinning' }, _('Stopping %s service').format(pkg.Name))
- ]);
- return RPC.setInitAction(pkg.Name, 'stop');
- }
- }, _('Stop'));
-
- var btn_enable = E('button', {
- 'class': 'btn cbi-button cbi-button-apply',
- disabled: true,
- click: function (ev) {
- ui.showModal(null, [
- E('p', { 'class': 'spinning' }, _('Enabling %s service').format(pkg.Name))
- ]);
- return RPC.setInitAction(pkg.Name, 'enable');
- }
- }, _('Enable'));
-
- var btn_disable = E('button', {
- 'class': 'btn cbi-button cbi-button-reset',
- disabled: true,
- click: function (ev) {
- ui.showModal(null, [
- E('p', { 'class': 'spinning' }, _('Disabling %s service').format(pkg.Name))
- ]);
- return RPC.setInitAction(pkg.Name, 'disable');
- }
- }, _('Disable'));
-
- if (reply.enabled) {
- btn_enable.disabled = true;
- btn_disable.disabled = false;
- switch (reply.status) {
- case 'statusSuccess':
- btn_start.disabled = true;
- btn_action.disabled = false;
- btn_stop.disabled = false;
- break;
- case 'statusStopped':
- btn_start.disabled = false;
- btn_action.disabled = true;
- btn_stop.disabled = true;
- break;
- default:
- btn_start.disabled = false;
- btn_action.disabled = true;
- btn_stop.disabled = false;
- btn_enable.disabled = true;
- btn_disable.disabled = true;
- break;
- }
- }
- else {
- btn_start.disabled = true;
- btn_action.disabled = true;
- btn_stop.disabled = true;
- btn_enable.disabled = false;
- btn_disable.disabled = true;
- }
-
- var buttonsDiv = [];
- var buttonsTitle = E('label', { class: 'cbi-value-title' }, _("Service Control"))
- var buttonsText = E('div', {}, [btn_start, btn_gap, btn_action, btn_gap, btn_stop, btn_gap_long, btn_enable, btn_gap, btn_disable]);
- var buttonsField = E('div', { class: 'cbi-value-field' }, buttonsText);
- if (reply.version) {
- buttonsDiv = E('div', { class: 'cbi-value' }, [buttonsTitle, buttonsField]);
- }
-
- return E('div', {}, [header, statusDiv, warningsDiv, errorsDiv, buttonsDiv]);
- });
- },
-});
-
-RPC.on('setInitAction', function (reply) {
- ui.hideModal();
- location.reload();
-});
-
-return L.Class.extend({
- status: status,
- getPlatformSupport: getPlatformSupport
-});
diff --git a/applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js b/applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js
deleted file mode 100644
index c0066dd100..0000000000
--- a/applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright 2022 Stan Grishin <stangri@melmac.ca>
-// This code wouldn't have been possible without help from [@vsviridov](https://github.com/vsviridov)
-
-'use strict';
-'require form';
-'require uci';
-'require view';
-'require simple-adblock.status as adb';
-
-var pkg = {
- get Name() { return 'simple-adblock'; },
- get URL() { return 'https://docs.openwrt.melmac.net/' + pkg.Name + '/'; }
-};
-
-return view.extend({
- load: function () {
- return Promise.all([
- uci.load(pkg.Name)
- ]);
- },
-
- render: function () {
- return Promise.all([
- L.resolveDefault(adb.getPlatformSupport(pkg.Name), {}),
- ]).then(function (data) {
- var replyPlatform = data[0];
- var status, m, s, o;
-
- status = new adb.status();
- m = new form.Map(pkg.Name, _("Simple AdBlock - Configuration"));
- s = m.section(form.NamedSection, 'config', pkg.Name);
- s.tab("tab_basic", _("Basic Configuration"));
- s.tab("tab_advanced", _("Advanced Configuration"));
-
- o = s.taboption("tab_basic", form.ListValue, "config_update_enabled", _("Automatic Config Update"),
- _("Perform config update before downloading the block/allow-lists."));
- o.value("0", _("Disable"));
- o.value("1", _("Enable"));
- o.default = ("0", _("Disable"));
-
- o = s.taboption("tab_basic", form.ListValue, "verbosity", _("Output Verbosity Setting"),
- _("Controls system log and console output verbosity."));
- o.value("0", _("Suppress output"));
- o.value("1", _("Some output"));
- o.value("2", _("Verbose output"));
- o.default = ("2", _("Verbose output"));
-
- o = s.taboption("tab_basic", form.ListValue, "force_dns", _("Force Router DNS"),
- _("Forces Router DNS use on local devices, also known as DNS Hijacking."));
- o.value("0", _("Let local devices use their own DNS servers if set"));
- o.value("1", _("Force Router DNS server to all local devices"));
- o.default = ("1", _("Force Router DNS server to all local devices"));
-
-
- if ((replyPlatform[pkg.Name].leds).length) {
- o = s.taboption("tab_basic", form.ListValue, "led", _("LED to indicate status"),
- _("Pick the LED not already used in %sSystem LED Configuration%s.").format("<a href=\"" +
- L.url("admin", "system", "leds") + "\">", "</a>"));
- o.value("", _("none"));
- (replyPlatform[pkg.Name].leds).forEach(element => {
- o.value(element);
- });
- }
- var text = _("DNS resolution option, see the %sREADME%s for details.")
- .format("<a href=\"" + pkg.URL + "#dns-resolution-option\" target=\"_blank\">", "</a>");
- if (!(replyPlatform[pkg.Name].dnsmasq_installed)) {
- text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.addnhosts</i>");
- text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.conf</i>");
- text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.ipset</i>");
- text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.servers</i>");
- }
- else {
- if (!(replyPlatform[pkg.Name].dnsmasq_ipset_support)) {
- text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.ipset</i>");
- }
- if (!(replyPlatform[pkg.Name].dnsmasq_nftset_support)) {
- text += "<br />" + _("Please note that %s is not supported on this system.").format("<i>dnsmasq.nftset</i>");
- }
- }
- if (!(replyPlatform[pkg.Name].unbound_installed)) {
- text = text + "<br />" + _("Please note that %s is not supported on this system.")
- .format("<i>unbound.adb_list</i>");
- }
-
- o = s.taboption("tab_advanced", form.ListValue, "dns", _("DNS Service"), text);
- if (replyPlatform[pkg.Name].dnsmasq_installed) {
- o.value("dnsmasq.addnhosts", _("dnsmasq additional hosts"));
- o.value("dnsmasq.conf", _("dnsmasq config"));
- if (replyPlatform[pkg.Name].dnsmasq_ipset_support) {
- o.value("dnsmasq.ipset", _("dnsmasq ipset"));
- }
- if (replyPlatform[pkg.Name].dnsmasq_nftset_support) {
- o.value("dnsmasq.nftset", _("dnsmasq nft set"));
- }
- o.value("dnsmasq.servers", _("dnsmasq servers file"));
- }
- if (replyPlatform[pkg.Name].unbound_installed) {
- o.value("unbound.adb_list", _("unbound adblock list"));
- }
- o.default = ("dnsmasq.servers", _("dnsmasq servers file"));
-
- o = s.taboption("tab_advanced", form.ListValue, "ipv6_enabled", _("IPv6 Support"),
- _("Add IPv6 entries to block-list."));
- o.value("", _("Do not add IPv6 entries"));
- o.value("1", _("Add IPv6 entries"));
- o.depends('dns', 'dnsmasq.addnhosts');
- o.depends('dns', 'dnsmasq.nftset');
- o.default = ("", _("Do not add IPv6 entries"));
- o.rmempty = true;
-
- o = s.taboption("tab_advanced", form.Value, "download_timeout", _("Download time-out (in seconds)"),
- _("Stop the download if it is stalled for set number of seconds."));
- o.default = "20";
- o.datatype = "range(1,60)";
-
- o = s.taboption("tab_advanced", form.Value, "curl_max_file_size", _("Curl maximum file size (in bytes)"),
- _("If curl is installed and detected, it would not download files bigger than this."));
- o.default = "";
- o.datatype = "uinteger";
- o.rmempty = true;
-
- o = s.taboption("tab_advanced", form.Value, "curl_retry", _("Curl download retry"),
- _("If curl is installed and detected, it would retry download this many times on timeout/fail."));
- o.default = "3";
- o.datatype = "range(0,30)";
-
- o = s.taboption("tab_advanced", form.ListValue, "parallel_downloads", _("Simultaneous processing"),
- _("Launch all lists downloads and processing simultaneously, reducing service start time."));
- o.value("0", _("Do not use simultaneous processing"));
- o.value("1", _("Use simultaneous processing"));
- o.default = ("1", _("Use simultaneous processing"));
-
- o = s.taboption("tab_advanced", form.ListValue, "compressed_cache", _("Store compressed cache file on router"),
- _("Attempt to create a compressed cache of block-list in the persistent memory."));
- o.value("0", _("Do not store compressed cache"));
- o.value("1", _("Store compressed cache"));
- o.default = ("0", _("Do not store compressed cache"));
-
- o = s.taboption("tab_advanced", form.Value, "compressed_cache_dir", _("Directory for compressed cache file"),
- _("Directory for compressed cache file of block-list in the persistent memory."));
- o.datatype = 'string';
- o.rmempty = true;
- o.default = ("/etc");
- o.depends('compressed_cache', '1');
-
- o = s.taboption("tab_advanced", form.ListValue, "debug", _("Enable Debugging"),
- _("Enables debug output to /tmp/simple-adblock.log."));
- o.value("0", _("Disable Debugging"));
- o.value("1", _("Enable Debugging"));
- o.default = ("0", _("Disable Debugging"));
-
- s = m.section(form.NamedSection, "config", "simple-adblock",
- _("Allowed and Blocked Lists Management"));
- o = s.option(form.Value, "dnsmasq_config_file_url", _("Dnsmasq Config File URL"),
- _("URL to the external dnsmasq config file, see the %sREADME%s for details.")
- .format("<a href=\"" + pkg.URL + "#dnsmasq_config_file_url\" target=\"_blank\">", "</a>"));
- o.addremove = true;
- o.rmempty = true;
- o = s.option(form.DynamicList, "allowed_domain", _("Allowed Domains"),
- _("Individual domains to be allowed."));
- o.depends('dnsmasq_config_file_url', '');
- o.addremove = true;
- o = s.option(form.DynamicList, "allowed_domains_url", _("Allowed Domain URLs"),
- _("URLs to lists of domains to be allowed."));
- o.depends('dnsmasq_config_file_url', '');
- o.addremove = true;
- o = s.option(form.DynamicList, "blocked_adblockplus_url", _("Blocked AdBlockPlus-style URLs"),
- _("URLs to lists of AdBlockPlus-style formatted domains to be blocked."));
- o.depends('dnsmasq_config_file_url', '');
- o.addremove = true;
- o = s.option(form.DynamicList, "blocked_domain", _("Blocked Domains"),
- _("Individual domains to be blocked."));
- o.depends('dnsmasq_config_file_url', '');
- o.addremove = true;
- o = s.option(form.DynamicList, "blocked_domains_url", _("Blocked Domain URLs"),
- _("URLs to lists of domains to be blocked."));
- o.depends('dnsmasq_config_file_url', '');
- o.addremove = true;
- o = s.option(form.DynamicList, "blocked_hosts_url", _("Blocked Hosts URLs"),
- _("URLs to lists of hosts to be blocked."));
- o.depends('dnsmasq_config_file_url', '');
- o.addremove = true;
-
- return Promise.all([status.render(), m.render()]);
- })
- }
-});
diff --git a/applications/luci-app-simple-adblock/po/templates/simple-adblock.pot b/applications/luci-app-simple-adblock/po/templates/simple-adblock.pot
deleted file mode 100644
index 0c8d214ade..0000000000
--- a/applications/luci-app-simple-adblock/po/templates/simple-adblock.pot
+++ /dev/null
@@ -1,559 +0,0 @@
-msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:174
-msgid "%s is currently disabled"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:90
-msgid "%s is not installed or not found"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:100
-msgid "Active"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:105
-msgid "Add IPv6 entries"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:103
-msgid "Add IPv6 entries to block-list."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:33
-msgid "Advanced Configuration"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:163
-msgid "Allowed Domain URLs"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:159
-msgid "Allowed Domains"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:153
-msgid "Allowed and Blocked Lists Management"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:134
-msgid ""
-"Attempt to create a compressed cache of block-list in the persistent memory."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:35
-msgid "Automatic Config Update"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:32
-msgid "Basic Configuration"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:167
-msgid "Blocked AdBlockPlus-style URLs"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:175
-msgid "Blocked Domain URLs"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:171
-msgid "Blocked Domains"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:179
-msgid "Blocked Hosts URLs"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:110
-msgid "Blocking %s domains (with %s)."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:130
-msgid "Cache file found."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:112
-msgid "Compressed cache file created."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:133
-msgid "Compressed cache file found."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:42
-msgid "Controls system log and console output verbosity."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:122
-msgid "Curl download retry"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:116
-msgid "Curl maximum file size (in bytes)"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:85
-msgid "DNS Service"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:64
-msgid "DNS resolution option, see the %sREADME%s for details."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:139
-msgid "Directory for compressed cache file"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:140
-msgid ""
-"Directory for compressed cache file of block-list in the persistent memory."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:269
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:37
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:39
-msgid "Disable"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:148
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:150
-msgid "Disable Debugging"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:265
-msgid "Disabling %s service"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:154
-msgid "Dnsmasq Config File URL"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:104
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:108
-msgid "Do not add IPv6 entries"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:135
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:137
-msgid "Do not store compressed cache"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:129
-msgid "Do not use simultaneous processing"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:111
-msgid "Download time-out (in seconds)"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:96
-msgid "Downloading lists"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:258
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:38
-msgid "Enable"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:146
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:149
-msgid "Enable Debugging"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:147
-msgid "Enables debug output to /tmp/simple-adblock.log."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:254
-msgid "Enabling %s service"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:97
-msgid "Error"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:99
-msgid "Fail"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:115
-msgid "Force DNS ports:"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:236
-msgid "Force Re-Download"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:95
-msgid "Force Reloading"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:48
-msgid "Force Router DNS"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:51
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:52
-msgid "Force Router DNS server to all local devices"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:232
-msgid "Force re-downloading %s block lists"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:49
-msgid "Forces Router DNS use on local devices, also known as DNS Hijacking."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/root/usr/share/rpcd/acl.d/luci-app-simple-adblock.json:3
-msgid "Grant UCI and file access for luci-app-simple-adblock"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:102
-msgid "IPv6 Support"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:117
-msgid ""
-"If curl is installed and detected, it would not download files bigger than "
-"this."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:123
-msgid ""
-"If curl is installed and detected, it would retry download this many times "
-"on timeout/fail."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:160
-msgid "Individual domains to be allowed."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:172
-msgid "Individual domains to be blocked."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:56
-msgid "LED to indicate status"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:128
-msgid ""
-"Launch all lists downloads and processing simultaneously, reducing service "
-"start time."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:50
-msgid "Let local devices use their own DNS servers if set"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:148
-msgid "Not installed or not found"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:41
-msgid "Output Verbosity Setting"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:36
-msgid "Perform config update before downloading the block/allow-lists."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:57
-msgid "Pick the LED not already used in %sSystem LED Configuration%s."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:67
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:68
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:69
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:70
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:74
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:77
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:81
-msgid "Please note that %s is not supported on this system."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:93
-msgid "Processing lists"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:94
-msgid "Restarting"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:303
-msgid "Service Control"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:203
-msgid "Service Errors"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:104
-msgid "Service Status"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:160
-msgid "Service Warnings"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/root/usr/share/luci/menu.d/luci-app-simple-adblock.json:3
-msgid "Simple AdBlock"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:30
-msgid "Simple AdBlock - Configuration"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:103
-msgid "Simple AdBlock - Status"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:127
-msgid "Simultaneous processing"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:44
-msgid "Some output"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:225
-msgid "Start"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:92
-msgid "Starting"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:221
-msgid "Starting %s service"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:247
-msgid "Stop"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:112
-msgid "Stop the download if it is stalled for set number of seconds."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:91
-msgid "Stopped"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:243
-msgid "Stopping %s service"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:136
-msgid "Store compressed cache"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:133
-msgid "Store compressed cache file on router"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:43
-msgid "Suppress output"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:155
-msgid ""
-"URL to the external dnsmasq config file, see the %sREADME%s for details."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:168
-msgid "URLs to lists of AdBlockPlus-style formatted domains to be blocked."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:164
-msgid "URLs to lists of domains to be allowed."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:176
-msgid "URLs to lists of domains to be blocked."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:180
-msgid "URLs to lists of hosts to be blocked."
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:130
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:131
-msgid "Use simultaneous processing"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:45
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:46
-msgid "Verbose output"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:106
-msgid "Version %s"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:98
-msgid "Warning"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:173
-msgid "config (%s) validation failure!"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:127
-msgid "disabled"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:87
-msgid "dnsmasq additional hosts"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:88
-msgid "dnsmasq config"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:90
-msgid "dnsmasq ipset"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:175
-msgid ""
-"dnsmasq ipset support is enabled, but dnsmasq is either not installed or "
-"installed dnsmasq does not support ipset"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:176
-msgid ""
-"dnsmasq ipset support is enabled, but ipset is either not installed or "
-"installed ipset does not support '%s' type"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:93
-msgid "dnsmasq nft set"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:177
-msgid ""
-"dnsmasq nft set support is enabled, but dnsmasq is either not installed or "
-"installed dnsmasq does not support nft set"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:178
-msgid "dnsmasq nft sets support is enabled, but nft is not installed"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:95
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:100
-msgid "dnsmasq servers file"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:183
-msgid "failed to access shared memory"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:181
-msgid "failed to create '%s' file"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:193
-msgid "failed to create block-list or restart DNS resolver"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:189
-msgid "failed to create compressed cache"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:180
-msgid "failed to create directory for %s file"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:201
-msgid "failed to create output/cache/gzip file directory"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:197
-msgid "failed to download"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:196
-msgid "failed to download Config Update file"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:187
-msgid "failed to format data file"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:192
-msgid "failed to move '%s' to '%s'"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:188
-msgid "failed to move temporary data file to '%s'"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:185
-msgid "failed to optimize data file"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:199
-msgid "failed to parse"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:198
-msgid "failed to parse Config Update file"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:186
-msgid "failed to process allow-list"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:195
-msgid "failed to reload/restart DNS resolver"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:190
-msgid "failed to remove temporary files"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:182
-msgid "failed to restart/reload DNS resolver"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:184
-msgid "failed to sort data file"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:194
-msgid "failed to stop %s"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:191
-msgid "failed to unpack compressed cache"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:200
-msgid "no HTTPS/SSL support on device"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:59
-msgid "none"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:158
-msgid "some recommended packages are missing"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:179
-msgid "the %s failed to discover WAN gateway"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/view/simple-adblock/overview.js:98
-msgid "unbound adblock list"
-msgstr ""
-
-#: applications/luci-app-simple-adblock/htdocs/luci-static/resources/simple-adblock/status.js:157
-msgid ""
-"use of external dnsmasq config file detected, please set '%s' option to '%s'"
-msgstr ""
diff --git a/applications/luci-app-simple-adblock/root/usr/share/luci/menu.d/luci-app-simple-adblock.json b/applications/luci-app-simple-adblock/root/usr/share/luci/menu.d/luci-app-simple-adblock.json
deleted file mode 100644
index b2cdca18eb..0000000000
--- a/applications/luci-app-simple-adblock/root/usr/share/luci/menu.d/luci-app-simple-adblock.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "admin/services/simple-adblock": {
- "title": "Simple AdBlock",
- "action": {
- "type": "view",
- "path": "simple-adblock/overview"
- },
- "depends": {
- "acl": [
- "luci-app-simple-adblock"
- ],
- "uci": {
- "simple-adblock": true
- }
- }
- }
-}
diff --git a/applications/luci-app-simple-adblock/root/usr/share/rpcd/acl.d/luci-app-simple-adblock.json b/applications/luci-app-simple-adblock/root/usr/share/rpcd/acl.d/luci-app-simple-adblock.json
deleted file mode 100644
index 6aeadc9c63..0000000000
--- a/applications/luci-app-simple-adblock/root/usr/share/rpcd/acl.d/luci-app-simple-adblock.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "luci-app-simple-adblock": {
- "description": "Grant UCI and file access for luci-app-simple-adblock",
- "read": {
- "ubus": {
- "luci.simple-adblock": [
- "getInitList",
- "getInitStatus",
- "getPlatformSupport"
- ]
- },
- "uci": [
- "simple-adblock"
- ]
- },
- "write": {
- "uci": [
- "simple-adblock"
- ],
- "ubus": {
- "luci.simple-adblock": [
- "setInitAction"
- ]
- }
- }
- }
-}
diff --git a/applications/luci-app-statistics/po/de/statistics.po b/applications/luci-app-statistics/po/de/statistics.po
index 53e627d657..5f3bc3028b 100644
--- a/applications/luci-app-statistics/po/de/statistics.po
+++ b/applications/luci-app-statistics/po/de/statistics.po
@@ -3,8 +3,8 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2023-07-11 08:42+0000\n"
-"Last-Translator: ssantos <ssantos@web.de>\n"
+"PO-Revision-Date: 2023-09-02 23:33+0000\n"
+"Last-Translator: Felix Baumann <felix.bau@gmx.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsstatistics/de/>\n"
"Language: de\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: applications/luci-app-statistics/htdocs/luci-static/resources/statistics/rrdtool/definitions/apcups.js:7
#: applications/luci-app-statistics/root/usr/share/luci/statistics/plugins/apcups.json:2
@@ -657,7 +657,7 @@ msgstr "Maximale Paketgröße"
#: applications/luci-app-statistics/htdocs/luci-static/resources/statistics/rrdtool/definitions/memory.js:10
#: applications/luci-app-statistics/root/usr/share/luci/statistics/plugins/memory.json:2
msgid "Memory"
-msgstr "Speicher"
+msgstr "Arbeitsspeicher"
#: applications/luci-app-statistics/htdocs/luci-static/resources/view/statistics/plugins/memory.js:6
msgid "Memory Plugin Configuration"
diff --git a/applications/luci-app-ttyd/po/sk/ttyd.po b/applications/luci-app-ttyd/po/sk/ttyd.po
index 6906a4c538..500d787597 100644
--- a/applications/luci-app-ttyd/po/sk/ttyd.po
+++ b/applications/luci-app-ttyd/po/sk/ttyd.po
@@ -1,6 +1,6 @@
msgid ""
msgstr ""
-"PO-Revision-Date: 2023-07-12 15:48+0000\n"
+"PO-Revision-Date: 2023-09-03 01:39+0000\n"
"Last-Translator: MaycoH <hudec.marian@hotmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
"luciapplicationsttyd/sk/>\n"
@@ -8,7 +8,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: applications/luci-app-ttyd/htdocs/luci-static/resources/view/ttyd/config.js:55
msgid "Accept only one client and exit on disconnection"
@@ -90,7 +90,7 @@ msgstr "Chyba"
#: applications/luci-app-ttyd/root/usr/share/rpcd/acl.d/luci-app-ttyd.json:3
msgid "Grant UCI access for luci-app-ttyd"
-msgstr ""
+msgstr "Udeliť prístup k UCI pre luci-app-ttyd"
#: applications/luci-app-ttyd/htdocs/luci-static/resources/view/ttyd/config.js:33
msgid "Group ID"
diff --git a/modules/luci-base/po/de/base.po b/modules/luci-base/po/de/base.po
index ae0fb843f2..35be06c8a0 100644
--- a/modules/luci-base/po/de/base.po
+++ b/modules/luci-base/po/de/base.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-26 17:57+0200\n"
-"PO-Revision-Date: 2023-08-20 12:46+0000\n"
+"PO-Revision-Date: 2023-09-02 23:33+0000\n"
"Last-Translator: Felix Baumann <felix.bau@gmx.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/openwrt/luci/de/>"
"\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:921
msgid "!known (not known)"
@@ -1481,7 +1481,7 @@ msgstr "Durchsuchen…"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:40
msgid "Buffered"
-msgstr "Gepuffert"
+msgstr "Pufferspeicher"
#: protocols/luci-proto-openfortivpn/htdocs/luci-static/resources/protocol/openfortivpn.js:130
msgid ""
@@ -1523,7 +1523,7 @@ msgstr "CPU-Nutzung (%)"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:43
msgid "Cached"
-msgstr "Im Cache"
+msgstr "Zugriffsspeicher"
#: modules/luci-compat/luasrc/model/network/proto_modemmanager.lua:53
#: modules/luci-compat/luasrc/model/network/proto_qmi.lua:53
@@ -2519,7 +2519,7 @@ msgstr "Trennungsversuch fehlgeschlagen."
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/25_storage.js:35
msgid "Disk space"
-msgstr "Speicherplatz"
+msgstr "Festspeicher"
#: modules/luci-base/htdocs/luci-static/resources/form.js:611
#: modules/luci-base/htdocs/luci-static/resources/form.js:3022
@@ -5651,7 +5651,7 @@ msgstr "Mittel"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:24
msgid "Memory"
-msgstr "Speicher"
+msgstr "Arbeitsspeicher"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:73
msgid "Memory usage (%)"
@@ -9087,7 +9087,7 @@ msgstr "Aktualisierungen deaktivieren"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/25_storage.js:24
msgid "Storage"
-msgstr "Speicher"
+msgstr "Datenspeicher"
#: modules/luci-mod-network/htdocs/luci-static/resources/tools/network.js:683
msgid "Strict filtering"
@@ -10092,7 +10092,7 @@ msgstr "Ton"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/20_memory.js:35
msgid "Total Available"
-msgstr "Gesamt verfügbar"
+msgstr "Verfügbar"
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:110
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/diagnostics.js:111
diff --git a/modules/luci-base/po/pl/base.po b/modules/luci-base/po/pl/base.po
index 1972741072..063f7c22db 100644
--- a/modules/luci-base/po/pl/base.po
+++ b/modules/luci-base/po/pl/base.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: LuCI\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-04-20 09:40+0200\n"
-"PO-Revision-Date: 2023-08-26 23:26+0000\n"
+"PO-Revision-Date: 2023-09-02 03:54+0000\n"
"Last-Translator: Matthaiks <kitynska@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/luci/pl/>"
"\n"
@@ -933,7 +933,7 @@ msgstr "Dozwolone adresy IP"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:86
msgid "Allowed network technology"
-msgstr ""
+msgstr "Dozwolona technologia sieciowa"
#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:315
msgid "AllowedIPs setting is invalid"
@@ -6096,7 +6096,7 @@ msgstr "Brak skonfigurowanych interfejsów WireGuard."
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:16
msgid "No allowed mode configuration found."
-msgstr ""
+msgstr "Nie znaleziono konfiguracji dozwolonego trybu."
#: themes/luci-theme-bootstrap/ucode/template/themes/bootstrap/header.ut:68
#: themes/luci-theme-material/ucode/template/themes/material/header.ut:88
@@ -6207,7 +6207,7 @@ msgstr "Nie zdefiniowano jeszcze peerów."
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:15
msgid "No preferred mode configuration found."
-msgstr ""
+msgstr "Nie znaleziono konfiguracji preferowanego trybu."
#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:146
#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:283
@@ -7203,7 +7203,7 @@ msgstr "Preferuj UMTS"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:106
msgid "Preferred network technology"
-msgstr ""
+msgstr "Preferowana technologia sieciowa"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:33
msgid "Prefix Delegated"
@@ -8387,11 +8387,11 @@ msgstr "Ustawienie trybu nie powiodło się"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:87
msgid "Setting the allowed network technology."
-msgstr ""
+msgstr "Ustawianie dozwolonej technologii sieciowej."
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:107
msgid "Setting the preferred network technology."
-msgstr ""
+msgstr "Ustawianie preferowanej technologii sieciowej."
#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/uhttpd.js:11
msgid "Settings"
@@ -10246,11 +10246,11 @@ msgstr "Nie można zapisać zawartości: %s"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:14
msgid "Unable to set allowed mode list."
-msgstr ""
+msgstr "Nie można ustawić listy dozwolonych trybów."
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:17
msgid "Unable to set preferred mode."
-msgstr ""
+msgstr "Nie można ustawić preferowanego trybu."
#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:29
msgid "Unable to verify PIN"
diff --git a/modules/luci-base/po/ro/base.po b/modules/luci-base/po/ro/base.po
index 55eb7f87d8..82feadf39e 100644
--- a/modules/luci-base/po/ro/base.po
+++ b/modules/luci-base/po/ro/base.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2023-08-26 23:26+0000\n"
+"PO-Revision-Date: 2023-09-02 13:20+0000\n"
"Last-Translator: Simona Iacob <s@zp1.net>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/luci/ro/"
">\n"
@@ -932,7 +932,7 @@ msgstr "IP-uri permise"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:86
msgid "Allowed network technology"
-msgstr ""
+msgstr "Tehnologie de rețea permisă"
#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:315
msgid "AllowedIPs setting is invalid"
@@ -1467,7 +1467,7 @@ msgstr "Activați interfața de punte chiar dacă nu sunt atașate porturi"
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:936
msgid "Broadcast"
-msgstr ""
+msgstr "Difuzare"
#: protocols/luci-proto-bonding/htdocs/luci-static/resources/protocol/bonding.js:207
msgid "Broadcast policy (broadcast, 3)"
@@ -1505,7 +1505,7 @@ msgstr "Configurarea CLAT a eșuat"
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:265
msgid "CNAME"
-msgstr ""
+msgstr "CNUME"
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:651
msgid "CNAME or fqdn"
diff --git a/modules/luci-base/po/ru/base.po b/modules/luci-base/po/ru/base.po
index 4800826f3a..4dc43816a8 100644
--- a/modules/luci-base/po/ru/base.po
+++ b/modules/luci-base/po/ru/base.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: LuCI: base\n"
"POT-Creation-Date: 2010-05-09 01:01+0300\n"
-"PO-Revision-Date: 2023-08-22 18:57+0000\n"
-"Last-Translator: \"Alexey D. Filimonov\" <alexey@filimonic.net>\n"
+"PO-Revision-Date: 2023-09-03 13:31+0000\n"
+"Last-Translator: st7105 <st7105@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/luci/ru/>"
"\n"
"Language: ru\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
@@ -936,7 +936,7 @@ msgstr "Разрешенные IP-адреса"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:86
msgid "Allowed network technology"
-msgstr ""
+msgstr "Разрешенные сетевые технологии"
#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:315
msgid "AllowedIPs setting is invalid"
diff --git a/modules/luci-base/po/sk/base.po b/modules/luci-base/po/sk/base.po
index 55c9cc3219..751f67a982 100644
--- a/modules/luci-base/po/sk/base.po
+++ b/modules/luci-base/po/sk/base.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2023-08-11 23:51+0000\n"
+"PO-Revision-Date: 2023-09-03 01:39+0000\n"
"Last-Translator: MaycoH <hudec.marian@hotmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/luci/sk/>"
"\n"
@@ -10,7 +10,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:921
msgid "!known (not known)"
@@ -1766,8 +1766,9 @@ msgid "Collecting data..."
msgstr "Zbieram dáta..."
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:241
+#, fuzzy
msgid "Collisions seen"
-msgstr ""
+msgstr "Zistené kolízie"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/processes.js:71
msgid "Command"
@@ -3731,8 +3732,9 @@ msgid "Grant access to flash operations"
msgstr ""
#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status-index.json:3
+#, fuzzy
msgid "Grant access to main status display"
-msgstr ""
+msgstr "Udeliť prístup k zobrazeniu hlavného stavu"
#: protocols/luci-proto-modemmanager/root/usr/share/rpcd/acl.d/luci-proto-modemmanager.json:3
msgid "Grant access to mmcli"
@@ -3788,7 +3790,7 @@ msgstr ""
#: modules/luci-mod-status/root/usr/share/rpcd/acl.d/luci-mod-status-index.json:41
msgid "Grant access to wireless status display"
-msgstr ""
+msgstr "Udeliť prístup k zobrazeniu stavu bezdrôtovej siete"
#: protocols/luci-proto-vpnc/htdocs/luci-static/resources/protocol/vpnc.js:66
msgid "Group Password"
@@ -6746,9 +6748,9 @@ msgstr ""
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:282
msgid "Part of network:"
msgid_plural "Part of networks:"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Súčasť siete:"
+msgstr[1] "Súčasť sietí:"
+msgstr[2] "Súčasť sietí:"
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:153
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:1229
@@ -6984,7 +6986,7 @@ msgstr ""
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:290
msgid "Port status"
-msgstr ""
+msgstr "Stav portov"
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/switch.js:278
msgid "Port status:"
@@ -7347,11 +7349,12 @@ msgstr ""
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:234
msgid "Receive dropped"
-msgstr ""
+msgstr "Zahodené prijaté"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:233
+#, fuzzy
msgid "Receive errors"
-msgstr ""
+msgstr "Chyby prijatia"
#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/view/wireguard/status.js:57
msgid "Received Data"
@@ -7359,15 +7362,15 @@ msgstr ""
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:230
msgid "Received bytes"
-msgstr ""
+msgstr "Prijaté bajty"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:232
msgid "Received multicast"
-msgstr ""
+msgstr "Prijaté multicast"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:231
msgid "Received packets"
-msgstr ""
+msgstr "Prijaté pakety"
#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:181
msgid "Recommended. IP addresses of the WireGuard interface."
@@ -8625,7 +8628,7 @@ msgstr "Tu určte kľúč s tajným šifrovaním."
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:206
msgid "Speed: %d Mibit/s, Duplex: %s"
-msgstr ""
+msgstr "Rýchlosť: %d Mibit/s, Duplex: %s"
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js:1529
msgid "Splitterless ADSL (G.992.2) Annex A"
@@ -9654,11 +9657,11 @@ msgstr ""
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:239
msgid "Transmit dropped"
-msgstr ""
+msgstr "Zahodené odoslané"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:238
msgid "Transmit errors"
-msgstr ""
+msgstr "Chyby odoslania"
#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/view/wireguard/status.js:58
msgid "Transmitted Data"
@@ -9666,11 +9669,11 @@ msgstr ""
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:236
msgid "Transmitted bytes"
-msgstr ""
+msgstr "Odoslané bajty"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/29_ports.js:237
msgid "Transmitted packets"
-msgstr ""
+msgstr "Odoslané pakety"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/nftables.js:79
msgctxt "nft @th,off,len"
diff --git a/modules/luci-base/po/zh_Hans/base.po b/modules/luci-base/po/zh_Hans/base.po
index 1e2a672aaf..55343a8f19 100644
--- a/modules/luci-base/po/zh_Hans/base.po
+++ b/modules/luci-base/po/zh_Hans/base.po
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"PO-Revision-Date: 2023-08-11 23:51+0000\n"
+"PO-Revision-Date: 2023-09-02 03:54+0000\n"
"Last-Translator: Eric <hamburger2048@users.noreply.hosted.weblate.org>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"openwrt/luci/zh_Hans/>\n"
@@ -12,7 +12,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: modules/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js:921
msgid "!known (not known)"
@@ -910,7 +910,7 @@ msgstr "允许的 IP"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:86
msgid "Allowed network technology"
-msgstr ""
+msgstr "允许的网络技术"
#: protocols/luci-proto-wireguard/htdocs/luci-static/resources/protocol/wireguard.js:315
msgid "AllowedIPs setting is invalid"
@@ -5896,7 +5896,7 @@ msgstr "未配置 WireGuard 接口。"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:16
msgid "No allowed mode configuration found."
-msgstr ""
+msgstr "未找到允许的模式配置。"
#: themes/luci-theme-bootstrap/ucode/template/themes/bootstrap/header.ut:68
#: themes/luci-theme-material/ucode/template/themes/material/header.ut:88
@@ -6004,7 +6004,7 @@ msgstr "尚未定义对端。"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:15
msgid "No preferred mode configuration found."
-msgstr ""
+msgstr "未找到首选的模式配置。"
#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:146
#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/sshkeys.js:283
@@ -6967,7 +6967,7 @@ msgstr "首选 UMTS"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:106
msgid "Preferred network technology"
-msgstr ""
+msgstr "首选的网络技术"
#: modules/luci-mod-status/htdocs/luci-static/resources/view/status/include/30_network.js:33
msgid "Prefix Delegated"
@@ -8107,11 +8107,11 @@ msgstr "设置操作模式失败"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:87
msgid "Setting the allowed network technology."
-msgstr ""
+msgstr "设置允许的网络技术。"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:107
msgid "Setting the preferred network technology."
-msgstr ""
+msgstr "设置首选的网络技术。"
#: modules/luci-mod-system/htdocs/luci-static/resources/view/system/uhttpd.js:11
msgid "Settings"
@@ -9810,11 +9810,11 @@ msgstr "无法保存内容:%s"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:14
msgid "Unable to set allowed mode list."
-msgstr ""
+msgstr "无法设置允许的模式列表。"
#: protocols/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js:17
msgid "Unable to set preferred mode."
-msgstr ""
+msgstr "无法设置首选的模式。"
#: protocols/luci-proto-ncm/htdocs/luci-static/resources/protocol/ncm.js:29
msgid "Unable to verify PIN"
diff --git a/modules/luci-mod-dashboard/po/sk/dashboard.po b/modules/luci-mod-dashboard/po/sk/dashboard.po
index 8e9af8cd97..21bcb66aec 100644
--- a/modules/luci-mod-dashboard/po/sk/dashboard.po
+++ b/modules/luci-mod-dashboard/po/sk/dashboard.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
-"PO-Revision-Date: 2023-07-12 15:48+0000\n"
+"PO-Revision-Date: 2023-09-02 23:33+0000\n"
"Last-Translator: MaycoH <hudec.marian@hotmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
"lucimodulesluci-mod-dashboard/sk/>\n"
@@ -10,7 +10,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 5.0-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: modules/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:163
msgid "Active"
@@ -53,7 +53,7 @@ msgstr "DNSv6"
#: modules/luci-mod-dashboard/root/usr/share/luci/menu.d/luci-mod-dashboard.json:3
msgid "Dashboard"
-msgstr ""
+msgstr "Nástenka"
#: modules/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:134
msgid "Devices"
@@ -96,8 +96,9 @@ msgid "Grant access to DHCP status display"
msgstr "Udeliť prístup k zobrazeniu stavu DHCP"
#: modules/luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:12
+#, fuzzy
msgid "Grant access to main status display"
-msgstr ""
+msgstr "Udeliť prístup k zobrazeniu hlavného stavu"
#: modules/luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:3
msgid "Grant access to the system route status"
@@ -105,7 +106,7 @@ msgstr ""
#: modules/luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:34
msgid "Grant access to wireless status display"
-msgstr ""
+msgstr "Udeliť prístup k zobrazeniu stavu bezdrôtovej siete"
#: modules/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:30
#: modules/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:83