diff --git a/luci-app-mosdns/luasrc/controller/mosdns.lua b/luci-app-mosdns/luasrc/controller/mosdns.lua index 875850f..6ada27b 100644 --- a/luci-app-mosdns/luasrc/controller/mosdns.lua +++ b/luci-app-mosdns/luasrc/controller/mosdns.lua @@ -1,3 +1,6 @@ +local sys = require "luci.sys" +local http = require "luci.http" + module("luci.controller.mosdns", package.seeall) function index() @@ -21,22 +24,22 @@ end function act_status() local e = {} - e.running = luci.sys.call("pgrep -f mosdns >/dev/null") == 0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) + e.running = sys.call("pgrep -f mosdns >/dev/null") == 0 + http.prepare_content("application/json") + http.write_json(e) end function get_log() - luci.http.write(luci.sys.exec("cat $(/usr/share/mosdns/mosdns.sh logfile)")) + http.write(sys.exec("cat $(/usr/share/mosdns/mosdns.sh logfile)")) end function clear_log() - luci.sys.call("cat /dev/null > $(/usr/share/mosdns/mosdns.sh logfile)") + sys.call("cat /dev/null > $(/usr/share/mosdns/mosdns.sh logfile)") end function geo_update() local e = {} - e.updating = luci.sys.call("/usr/share/mosdns/mosdns.sh geodata >/dev/null") == 0 - luci.http.prepare_content("application/json") - luci.http.write_json(e) + e.updating = sys.call("/usr/share/mosdns/mosdns.sh geodata >/dev/null") == 0 + http.prepare_content("application/json") + http.write_json(e) end diff --git a/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua b/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua index 6d158ea..1bfdf2a 100644 --- a/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua +++ b/luci-app-mosdns/luasrc/model/cbi/mosdns/basic.lua @@ -1,5 +1,8 @@ -if nixio.fs.access("/usr/bin/mosdns") then - mosdns_version = luci.sys.exec("/usr/share/mosdns/mosdns.sh version") +local fs = require "nixio.fs" +local sys = require "luci.sys" + +if fs.access("/usr/bin/mosdns") then + mosdns_version = sys.exec("/usr/share/mosdns/mosdns.sh version") else mosdns_version = "Unknown Version" end @@ -13,142 +16,146 @@ s = m:section(TypedSection, "mosdns") s.addremove = false s.anonymous = true -enable = s:option(Flag, "enabled", translate("Enable")) -enable.rmempty = false +s:tab("basic", translate("Basic Options")) -configfile = s:option(ListValue, "configfile", translate("Config File")) -configfile:value("/etc/mosdns/config.yaml", translate("Default Config")) -configfile:value("/etc/mosdns/config_custom.yaml", translate("Custom Config")) -configfile.default = "/etc/mosdns/config.yaml" +o = s:taboption("basic", Flag, "enabled", translate("Enabled")) +o.rmempty = false -listenport = s:option(Value, "listen_port", translate("Listen port")) -listenport.datatype = "and(port,min(1))" -listenport.default = 5335 -listenport:depends("configfile", "/etc/mosdns/config.yaml") +o = s:taboption("basic", ListValue, "configfile", translate("Config File")) +o:value("/etc/mosdns/config.yaml", translate("Default Config")) +o:value("/etc/mosdns/config_custom.yaml", translate("Custom Config")) +o.default = "/etc/mosdns/config.yaml" -loglevel = s:option(ListValue, "log_level", translate("Log Level")) -loglevel:value("debug", translate("Debug")) -loglevel:value("info", translate("Info")) -loglevel:value("warn", translate("Warning")) -loglevel:value("error", translate("Error")) -loglevel.default = "info" -loglevel:depends("configfile", "/etc/mosdns/config.yaml") +o = s:taboption("basic", Value, "listen_port", translate("Listen port")) +o.datatype = "and(port,min(1))" +o.default = 5335 +o:depends("configfile", "/etc/mosdns/config.yaml") -logfile = s:option(Value, "logfile", translate("Log File")) -logfile.placeholder = "/tmp/mosdns.log" -logfile.default = "/tmp/mosdns.log" -logfile:depends("configfile", "/etc/mosdns/config.yaml") +o = s:taboption("basic", ListValue, "log_level", translate("Log Level")) +o:value("debug", translate("Debug")) +o:value("info", translate("Info")) +o:value("warn", translate("Warning")) +o:value("error", translate("Error")) +o.default = "info" +o:depends("configfile", "/etc/mosdns/config.yaml") -redirect = s:option(Flag, "redirect", translate("DNS Forward"), translate("Forward Dnsmasq Domain Name resolution requests to MosDNS")) -redirect.default = true +o = s:taboption("basic", Value, "logfile", translate("Log File")) +o.placeholder = "/tmp/mosdns.log" +o.default = "/tmp/mosdns.log" +o:depends("configfile", "/etc/mosdns/config.yaml") -custom_local_dns = s:option(Flag, "custom_local_dns", translate("Local DNS"), translate("Follow WAN interface DNS if not enabled")) -custom_local_dns:depends( "configfile", "/etc/mosdns/config.yaml") -custom_local_dns.default = false -custom_local_dns = s:option(DynamicList, "local_dns", translate("Upstream DNS servers")) -custom_local_dns:value("119.29.29.29", "119.29.29.29 (DNSPod Primary)") -custom_local_dns:value("119.28.28.28", "119.28.28.28 (DNSPod Secondary)") -custom_local_dns:value("223.5.5.5", "223.5.5.5 (AliDNS Primary)") -custom_local_dns:value("223.6.6.6", "223.6.6.6 (AliDNS Secondary)") -custom_local_dns:value("114.114.114.114", "114.114.114.114 (114DNS Primary)") -custom_local_dns:value("114.114.115.115", "114.114.115.115 (114DNS Secondary)") -custom_local_dns:value("180.76.76.76", "180.76.76.76 (Baidu DNS)") -custom_local_dns:value("https://doh.pub/dns-query", "DNSPod DoH") -custom_local_dns:value("https://dns.alidns.com/dns-query", "AliDNS DoH") -custom_local_dns:value("https://doh.360.cn/dns-query", "360DNS DoH") -custom_local_dns:depends("custom_local_dns", "1") +o = s:taboption("basic", Flag, "redirect", translate("DNS Forward"), translate("Forward Dnsmasq Domain Name resolution requests to MosDNS")) +o.default = true -remote_dns = s:option(DynamicList, "remote_dns", translate("Remote DNS")) -remote_dns:value("tls://1.1.1.1", "1.1.1.1 (CloudFlare DNS)") -remote_dns:value("tls://1.0.0.1", "1.0.0.1 (CloudFlare DNS)") -remote_dns:value("tls://8.8.8.8", "8.8.8.8 (Google DNS)") -remote_dns:value("tls://8.8.4.4", "8.8.4.4 (Google DNS)") -remote_dns:value("tls://9.9.9.9", "9.9.9.9 (Quad9 DNS)") -remote_dns:value("tls://149.112.112.112", "149.112.112.112 (Quad9 DNS)") -remote_dns:value("tls://45.11.45.11", "45.11.45.11 (DNS.SB)") -remote_dns:value("tls://208.67.222.222", "208.67.222.222 (Open DNS)") -remote_dns:value("tls://208.67.220.220", "208.67.220.220 (Open DNS)") -remote_dns:depends("configfile", "/etc/mosdns/config.yaml") +o = s:taboption("basic", Flag, "custom_local_dns", translate("Local DNS"), translate("Follow WAN interface DNS if not enabled")) +o:depends( "configfile", "/etc/mosdns/config.yaml") +o.default = false +o = s:taboption("basic", DynamicList, "local_dns", translate("Upstream DNS servers")) +o:value("119.29.29.29", "119.29.29.29 (DNSPod Primary)") +o:value("119.28.28.28", "119.28.28.28 (DNSPod Secondary)") +o:value("223.5.5.5", "223.5.5.5 (AliDNS Primary)") +o:value("223.6.6.6", "223.6.6.6 (AliDNS Secondary)") +o:value("114.114.114.114", "114.114.114.114 (114DNS Primary)") +o:value("114.114.115.115", "114.114.115.115 (114DNS Secondary)") +o:value("180.76.76.76", "180.76.76.76 (Baidu DNS)") +o:value("https://doh.pub/dns-query", "DNSPod DoH") +o:value("https://dns.alidns.com/dns-query", "AliDNS DoH") +o:value("https://doh.360.cn/dns-query", "360DNS DoH") +o:depends("custom_local_dns", "1") -bootstrap_dns = s:option(ListValue, "bootstrap_dns", translate("Bootstrap DNS servers"), translate("Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT resolvers you specify as upstreams")) -bootstrap_dns:value("119.29.29.29", "119.29.29.29 (DNSPod Primary)") -bootstrap_dns:value("119.28.28.28", "119.28.28.28 (DNSPod Secondary)") -bootstrap_dns:value("223.5.5.5", "223.5.5.5 (AliDNS Primary)") -bootstrap_dns:value("223.6.6.6", "223.6.6.6 (AliDNS Secondary)") -bootstrap_dns:value("114.114.114.114", "114.114.114.114 (114DNS Primary)") -bootstrap_dns:value("114.114.115.115", "114.114.115.115 (114DNS Secondary)") -bootstrap_dns:value("180.76.76.76", "180.76.76.76 (Baidu DNS)") -bootstrap_dns.default = "119.29.29.29" -bootstrap_dns:depends("configfile", "/etc/mosdns/config.yaml") +o = s:taboption("basic", DynamicList, "remote_dns", translate("Remote DNS")) +o:value("tls://1.1.1.1", "1.1.1.1 (CloudFlare DNS)") +o:value("tls://1.0.0.1", "1.0.0.1 (CloudFlare DNS)") +o:value("tls://8.8.8.8", "8.8.8.8 (Google DNS)") +o:value("tls://8.8.4.4", "8.8.4.4 (Google DNS)") +o:value("tls://9.9.9.9", "9.9.9.9 (Quad9 DNS)") +o:value("tls://149.112.112.112", "149.112.112.112 (Quad9 DNS)") +o:value("tls://45.11.45.11", "45.11.45.11 (DNS.SB)") +o:value("tls://208.67.222.222", "208.67.222.222 (Open DNS)") +o:value("tls://208.67.220.220", "208.67.220.220 (Open DNS)") +o:depends("configfile", "/etc/mosdns/config.yaml") -remote_dns_pipeline = s:option(Flag, "enable_pipeline", translate("TCP/DoT Connection Multiplexing"), translate("Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode")) -remote_dns_pipeline.rmempty = false -remote_dns_pipeline.default = false -remote_dns_pipeline:depends("configfile", "/etc/mosdns/config.yaml") +o = s:taboption("basic", ListValue, "bootstrap_dns", translate("Bootstrap DNS servers"), translate("Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT resolvers you specify as upstreams")) +o:value("119.29.29.29", "119.29.29.29 (DNSPod Primary)") +o:value("119.28.28.28", "119.28.28.28 (DNSPod Secondary)") +o:value("223.5.5.5", "223.5.5.5 (AliDNS Primary)") +o:value("223.6.6.6", "223.6.6.6 (AliDNS Secondary)") +o:value("114.114.114.114", "114.114.114.114 (114DNS Primary)") +o:value("114.114.115.115", "114.114.115.115 (114DNS Secondary)") +o:value("180.76.76.76", "180.76.76.76 (Baidu DNS)") +o.default = "119.29.29.29" +o:depends("configfile", "/etc/mosdns/config.yaml") -cache_size = s:option(Value, "cache_size", translate("DNS Cache Size")) -cache_size.datatype = "and(uinteger,min(0))" -cache_size.default = "20000" -cache_size:depends("configfile", "/etc/mosdns/config.yaml") +s:tab("advanced", translate("Advanced Options")) -cache_size = s:option(Value, "cache_survival_time", translate("Cache Survival Time")) -cache_size.datatype = "and(uinteger,min(0))" -cache_size.default = "86400" -cache_size:depends("configfile", "/etc/mosdns/config.yaml") +o = s:taboption("advanced", Flag, "enable_pipeline", translate("TCP/DoT Connection Multiplexing"), translate("Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode")) +o.rmempty = false +o.default = false +o:depends("configfile", "/etc/mosdns/config.yaml") -cache_dump = s:option(Flag, "dump_file", translate("Cache Dump"), translate("Save the cache locally and reload the cache dump on the next startup")) -cache_dump.rmempty = false -cache_dump.default = false -cache_dump:depends("configfile", "/etc/mosdns/config.yaml") +o = s:taboption("advanced", Value, "cache_size", translate("DNS Cache Size")) +o.datatype = "and(uinteger,min(0))" +o.default = "20000" +o:depends("configfile", "/etc/mosdns/config.yaml") -cache_dump = s:option(Value, "dump_interval", translate("Auto Save Cache Interval")) -cache_dump.datatype = "and(uinteger,min(0))" -cache_dump.default = "600" -cache_dump:depends("dump_file", "1") +o = s:taboption("advanced", Value, "cache_survival_time", translate("Cache Survival Time")) +o.datatype = "and(uinteger,min(0))" +o.default = "86400" +o:depends("configfile", "/etc/mosdns/config.yaml") -minimal_ttl = s:option(Value, "minimal_ttl", translate("Minimum TTL")) -minimal_ttl.datatype = "and(uinteger,min(0))" -minimal_ttl.datatype = "and(uinteger,max(3600))" -minimal_ttl.default = "0" -minimal_ttl:depends("configfile", "/etc/mosdns/config.yaml") +o = s:taboption("advanced", Flag, "dump_file", translate("Cache Dump"), translate("Save the cache locally and reload the cache dump on the next startup")) +o.rmempty = false +o.default = false +o:depends("configfile", "/etc/mosdns/config.yaml") -maximum_ttl = s:option(Value, "maximum_ttl", translate("Maximum TTL")) -maximum_ttl.datatype = "and(uinteger,min(0))" -maximum_ttl.default = "0" -maximum_ttl:depends("configfile", "/etc/mosdns/config.yaml") +o = s:taboption("advanced", Value, "dump_interval", translate("Auto Save Cache Interval")) +o.datatype = "and(uinteger,min(0))" +o.default = "600" +o:depends("dump_file", "1") -adblock = s:option(Flag, "adblock", translate("Enable DNS ADblock")) -adblock:depends("configfile", "/etc/mosdns/config.yaml") -adblock.default = false +o = s:taboption("advanced", Value, "minimal_ttl", translate("Minimum TTL"), translate("Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating no modification")) +o.datatype = "and(uinteger,min(0))" +o.datatype = "and(uinteger,max(3600))" +o.default = "0" +o:depends("configfile", "/etc/mosdns/config.yaml") -adblock = s:option(Value, "ad_source", translate("ADblock Source")) -adblock:depends("adblock", "1") -adblock.default = "https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt" -adblock:value("geosite.dat", "v2ray-geosite") -adblock:value("https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt", "anti-AD") -adblock:value("https://raw.githubusercontent.com/ookangzheng/dbl-oisd-nl/master/dbl_light.txt", "oisd (small)") -adblock:value("https://raw.githubusercontent.com/ookangzheng/dbl-oisd-nl/master/dbl.txt", "oisd (big)") -adblock:value("https://raw.githubusercontent.com/QiuSimons/openwrt-mos/master/dat/serverlist.txt", "QiuSimons/openwrt-mos") +o = s:taboption("advanced", Value, "maximum_ttl", translate("Maximum TTL"), translate("Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating no modification")) +o.datatype = "and(uinteger,min(0))" +o.default = "0" +o:depends("configfile", "/etc/mosdns/config.yaml") -reload_service = s:option( Button, "_reload", translate("Reload Service"), translate("Reload service to take effect of new configuration")) -reload_service.write = function() - luci.sys.exec("/etc/init.d/mosdns reload") +o = s:taboption("advanced", Flag, "adblock", translate("Enable DNS ADblock")) +o:depends("configfile", "/etc/mosdns/config.yaml") +o.default = false + +o = s:taboption("advanced", Value, "ad_source", translate("ADblock Source"), translate("When using custom rule sources, use the rule types supported by MosDNS")) +o:depends("adblock", "1") +o.default = "https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt" +o:value("geosite.dat", "v2ray-geosite") +o:value("https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-domains.txt", "anti-AD") +o:value("https://raw.githubusercontent.com/ookangzheng/dbl-oisd-nl/master/dbl_light.txt", "oisd (small)") +o:value("https://raw.githubusercontent.com/ookangzheng/dbl-oisd-nl/master/dbl.txt", "oisd (big)") +o:value("https://raw.githubusercontent.com/QiuSimons/openwrt-mos/master/dat/serverlist.txt", "QiuSimons/openwrt-mos") + +o = s:taboption("basic", Button, "_reload", translate("Reload Service"), translate("Reload service to take effect of new configuration")) +o.write = function() + sys.exec("/etc/init.d/mosdns reload") end -reload_service:depends("configfile", "/etc/mosdns/config_custom.yaml") +o:depends("configfile", "/etc/mosdns/config_custom.yaml") -config = s:option(TextValue, "manual-config") -config.description = translate("View the Custom YAML Configuration file used by this MosDNS. You can edit it as you own need.") -config.template = "cbi/tvalue" -config.rows = 25 -config:depends("configfile", "/etc/mosdns/config_custom.yaml") +o = s:taboption("basic", TextValue, "manual-config") +o.description = translate("View the Custom YAML Configuration file used by this MosDNS. You can edit it as you own need.") +o.template = "cbi/tvalue" +o.rows = 25 +o:depends("configfile", "/etc/mosdns/config_custom.yaml") -function config.cfgvalue(self, section) - return nixio.fs.readfile("/etc/mosdns/config_custom.yaml") +function o.cfgvalue(self, section) + return fs.readfile("/etc/mosdns/config_custom.yaml") end -function config.write(self, section, value) +function o.write(self, section, value) value = value:gsub("\r\n?", "\n") - nixio.fs.writefile("/etc/mosdns/config_custom.yaml", value) + fs.writefile("/etc/mosdns/config_custom.yaml", value) end return m diff --git a/luci-app-mosdns/po/zh-cn/mosdns.po b/luci-app-mosdns/po/zh-cn/mosdns.po index dc22de0..82505c6 100644 --- a/luci-app-mosdns/po/zh-cn/mosdns.po +++ b/luci-app-mosdns/po/zh-cn/mosdns.po @@ -1,6 +1,12 @@ msgid "Basic Setting" msgstr "基本设置" +msgid "Basic Options" +msgstr "基本选项" + +msgid "Advanced Options" +msgstr "高级选项" + msgid "MosDNS is a 'programmable' DNS forwarder." msgstr "MosDNS 是一个插件化的 DNS 转发/分流器。" @@ -13,7 +19,7 @@ msgstr "未运行" msgid "Collecting data..." msgstr "获取数据中..." -msgid "Enable" +msgid "Enabled" msgstr "启用" msgid "Listen port" @@ -34,6 +40,9 @@ msgstr "启用 DNS 广告过滤" msgid "ADblock Source" msgstr "广告过滤规则来源" +msgid "When using custom rule sources, use the rule types supported by MosDNS" +msgstr "使用自定义规则来源时,请使用 MosDNS 支持的规则类型" + msgid "Reload Service" msgstr "重载服务" @@ -151,9 +160,15 @@ msgstr "自动保存缓存间隔(秒)" msgid "Minimum TTL" msgstr "覆盖最小 TTL 值(默认 0)" +msgid "Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating no modification" +msgstr "修改 DNS 应答结果的最小 TTL 值 (秒),0 表示不修改" + msgid "Maximum TTL" msgstr "覆盖最大 TTL 值(默认 0)" +msgid "Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating no modification" +msgstr "修改 DNS 应答结果的最大 TTL 值(秒),0 表示不修改" + msgid "Logs" msgstr "日志"