diff options
Diffstat (limited to 'applications/luci-app-ddns/luasrc/model/cbi')
3 files changed, 73 insertions, 51 deletions
diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua index 977dbe34b1..10d39c7183 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua @@ -292,6 +292,10 @@ function luh.parse(self, section, novld) end -- use_ipv6 -- ################################################################ + +--We call it globally as it's called 11 times even outside specific function, saves 11 os.execute slow command! +local has_ipv6 = DDNS.env_info("has_ipv6") + usev6 = ns:taboption("basic", ListValue, "use_ipv6", translate("IP address version"), translate("Defines which IP address 'IPv4/IPv6' is send to the DDNS provider") ) @@ -300,16 +304,16 @@ usev6.default = "0" usev6:value("0", translate("IPv4-Address") ) function usev6.cfgvalue(self, section) local value = AbstractValue.cfgvalue(self, section) or "0" - if DDNS.has_ipv6 or (value == "1" and not DDNS.has_ipv6) then + if has_ipv6 or (value == "1" and not has_ipv6) then self:value("1", translate("IPv6-Address") ) end - if value == "1" and not DDNS.has_ipv6 then + if value == "1" and not has_ipv6 then self.description = err_ipv6_basic end return value end function usev6.validate(self, value) - if (value == "1" and DDNS.has_ipv6) or value == "0" then + if (value == "1" and has_ipv6) or value == "0" then return value end return nil, err_tab_basic(self) .. err_ipv6_plain @@ -360,7 +364,7 @@ svc6 = ns:taboption("basic", ListValue, "ipv6_service_name", translate("DDNS Service provider") .. " [IPv6]" ) svc6.default = "-" svc6:depends("use_ipv6", "1") -- only show on IPv6 -if not DDNS.has_ipv6 then +if not has_ipv6 then svc6.description = err_ipv6_basic end function svc6.cfgvalue(self, section) @@ -374,7 +378,7 @@ function svc6.cfgvalue(self, section) end function svc6.validate(self, value) if usev6:formvalue(section) == "1" then -- do only on IPv6 - if DDNS.has_ipv6 then return value end + if has_ipv6 then return value end return nil, err_tab_basic(self) .. err_ipv6_plain else return "" -- suppress validate error @@ -586,13 +590,17 @@ end svc6:value("-", translate("-- custom --") ) -- IPv4/IPv6 - use_https -- ################################################### -if DDNS.has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then + +--We call it globally as it's called 4 times outside specific function. +local has_ssl = DDNS.env_info("has_ssl") + +if has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then https = ns:taboption("basic", Flag, "use_https", translate("Use HTTP Secure") ) https.orientation = "horizontal" function https.cfgvalue(self, section) local value = AbstractValue.cfgvalue(self, section) - if not DDNS.has_ssl and value == "1" then + if not has_ssl and value == "1" then self.description = bold_on .. font_red .. translate("HTTPS not supported") .. font_off .. "<br />" .. translate("please disable") .. " !" .. bold_off @@ -602,7 +610,7 @@ if DDNS.has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then return value end function https.validate(self, value) - if (value == "1" and DDNS.has_ssl ) or value == "0" then return value end + if (value == "1" and has_ssl ) or value == "0" then return value end return nil, err_tab_basic(self) .. translate("HTTPS not supported") .. " !" end function https.write(self, section, value) @@ -616,7 +624,7 @@ if DDNS.has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then end -- IPv4/IPv6 - cacert -- ###################################################### -if DDNS.has_ssl then +if has_ssl then cert = ns:taboption("basic", Value, "cacert", translate("Path to CA-Certificate"), translate("directory or path/file") .. "<br />" .. @@ -706,7 +714,7 @@ src6:value("network", translate("Network")) src6:value("web", translate("URL")) src6:value("interface", translate("Interface")) src6:value("script", translate("Script")) -if not DDNS.has_ipv6 then +if not has_ipv6 then src6.description = err_ipv6_other end function src6.cfgvalue(self, section) @@ -715,7 +723,7 @@ end function src6.validate(self, value) if usev6:formvalue(section) ~= "1" then return "" -- ignore on IPv4 selected - elseif not DDNS.has_ipv6 then + elseif not has_ipv6 then return nil, err_tab_adv(self) .. err_ipv6_plain elseif not _verify_ip_source() then return nil, err_tab_adv(self) .. @@ -794,7 +802,7 @@ ipn6 = ns:taboption("advanced", ListValue, "ipv6_network", ipn6:depends("ipv6_source", "network") ipn6.default = "wan6" WADM.cbi_add_networks(ipn6) -if DDNS.has_ipv6 then +if has_ipv6 then ipn6.description = translate("Defines the network to read systems IPv6-Address from") else ipn6.description = err_ipv6_other @@ -808,7 +816,7 @@ function ipn6.validate(self, value) -- ignore if IPv4 selected OR -- ignore everything except "network" return "" - elseif DDNS.has_ipv6 then + elseif has_ipv6 then return value else return nil, err_tab_adv(self) .. err_ipv6_plain @@ -881,7 +889,7 @@ iurl6 = ns:taboption("advanced", Value, "ipv6_url", translate("URL to detect") .. " [IPv6]" ) iurl6:depends("ipv6_source", "web") iurl6.default = "http://checkipv6.dyndns.com" -if DDNS.has_ipv6 then +if has_ipv6 then iurl6.description = translate("Defines the Web page to read systems IPv6-Address from") else iurl6.description = err_ipv6_other @@ -895,7 +903,7 @@ function iurl6.validate(self, value) -- ignore if IPv4 selected OR -- ignore everything except "web" return "" - elseif not DDNS.has_ipv6 then + elseif not has_ipv6 then return nil, err_tab_adv(self) .. err_ipv6_plain elseif not value or #value == 0 then return nil, err_tab_adv(self) .. translate("missing / required") @@ -1051,7 +1059,7 @@ eif6:depends("ipv6_source", "web") eif6:depends("ipv6_source", "script") eif6.default = "wan6" WADM.cbi_add_networks(eif6) -if not DDNS.has_ipv6 then +if not has_ipv6 then eif6.description = err_ipv6_other else eif6.description = translate("Network on which the ddns-updater scripts will be started") @@ -1065,7 +1073,7 @@ function eif6.validate(self, value) or fsrc6 == "network" or fsrc6 == "interface" then return "" -- ignore IPv4, network, interface - elseif not DDNS.has_ipv6 then + elseif not has_ipv6 then return nil, err_tab_adv(self) .. err_ipv6_plain else return value @@ -1084,10 +1092,13 @@ function eif6.write(self, section, value) end function eif6.parse(self, section, novld) DDNS.value_parse(self, section, novld) -end +end -- IPv4/IPv6 - bind_network -- ################################################ -if DDNS.has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then + +local has_bindnet = DDNS.env_info("has_bindnet") + +if has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then bnet = ns:taboption("advanced", ListValue, "bind_network", translate("Bind Network") ) bnet:depends("ipv4_source", "web") @@ -1097,7 +1108,7 @@ if DDNS.has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then WADM.cbi_add_networks(bnet) function bnet.cfgvalue(self, section) local value = AbstractValue.cfgvalue(self, section) - if not DDNS.has_bindnet and value ~= "" then + if not has_bindnet and value ~= "" then self.description = bold_on .. font_red .. translate("Binding to a specific network not supported") .. font_off .. "<br />" .. translate("please set to 'default'") .. " !" .. bold_off @@ -1108,7 +1119,7 @@ if DDNS.has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then return value end function bnet.validate(self, value) - if ( (value ~= "") and DDNS.has_bindnet ) or (value == "") then return value end + if ( (value ~= "") and has_bindnet ) or (value == "") then return value end return nil, err_tab_adv(self) .. translate("Binding to a specific network not supported") .. " !" end function bnet.parse(self, section, novld) @@ -1119,13 +1130,16 @@ end -- IPv4 + IPv6 - force_ipversion -- ########################################### -- optional to force wget/curl and host to use only selected IP version -- command parameter "-4" or "-6" -if DDNS.has_forceip or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) then + +local has_forceip = DDNS.env_info("has_forceip") + +if has_forceip or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) then fipv = ns:taboption("advanced", Flag, "force_ipversion", translate("Force IP Version") ) fipv.orientation = "horizontal" function fipv.cfgvalue(self, section) local value = AbstractValue.cfgvalue(self, section) - if not DDNS.has_forceip and value ~= "0" then + if not has_forceip and value ~= "0" then self.description = bold_on .. font_red .. translate("Force IP Version not supported") .. font_off .. "<br />" .. translate("please disable") .. " !" .. bold_off @@ -1135,14 +1149,17 @@ if DDNS.has_forceip or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) t return value end function fipv.validate(self, value) - if (value == "1" and DDNS.has_forceip) or value == "0" then return value end + if (value == "1" and has_forceip) or value == "0" then return value end return nil, err_tab_adv(self) .. translate("Force IP Version not supported") end end -- IPv4 + IPv6 - dns_server -- ################################################ -- optional DNS Server to use resolving my IP -if DDNS.has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then + +local has_dnsserver = DDNS.env_info("has_dnsserver") + +if has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then dns = ns:taboption("advanced", Value, "dns_server", translate("DNS-Server"), translate("OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'.") .. "<br />" .. @@ -1152,7 +1169,7 @@ if DDNS.has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then -- if .datatype is set, then it is checked before calling this function if not value or (#value == 0) then return "" -- ignore on empty - elseif not DDNS.has_dnsserver then + elseif not has_dnsserver then return nil, err_tab_adv(self) .. translate("Specifying a DNS-Server is not supported") elseif not DTYP.host(value) then return nil, err_tab_adv(self) .. translate("use hostname, FQDN, IPv4- or IPv6-Address") @@ -1179,13 +1196,16 @@ if DDNS.has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then end -- IPv4 + IPv6 - force_dnstcp -- ############################################## -if DDNS.has_bindhost or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) then + +local has_bindhost = DDNS.env_info("has_bindhost") + +if has_bindhost or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) then tcp = ns:taboption("advanced", Flag, "force_dnstcp", translate("Force TCP on DNS") ) tcp.orientation = "horizontal" function tcp.cfgvalue(self, section) local value = AbstractValue.cfgvalue(self, section) - if not DDNS.has_bindhost and value ~= "0" then + if not has_bindhost and value ~= "0" then self.description = bold_on .. font_red .. translate("DNS requests via TCP not supported") .. font_off .. "<br />" .. translate("please disable") .. " !" .. bold_off @@ -1195,7 +1215,7 @@ if DDNS.has_bindhost or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) the return value end function tcp.validate(self, value) - if (value == "1" and DDNS.has_bindhost ) or value == "0" then + if (value == "1" and has_bindhost ) or value == "0" then return value end return nil, err_tab_adv(self) .. translate("DNS requests via TCP not supported") @@ -1204,13 +1224,16 @@ end -- IPv4 + IPv6 - proxy -- ##################################################### -- optional Proxy to use for http/https requests [user:password@]proxyhost[:port] -if DDNS.has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then + +local has_proxy = DDNS.env_info("has_proxy") + +if has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then pxy = ns:taboption("advanced", Value, "proxy", translate("PROXY-Server") ) pxy.placeholder="user:password@myproxy.lan:8080" function pxy.cfgvalue(self, section) local value = AbstractValue.cfgvalue(self, section) - if not DDNS.has_proxy and value ~= "" then + if not has_proxy and value ~= "" then self.description = bold_on .. font_red .. translate("PROXY-Server not supported") .. font_off .. "<br />" .. translate("please remove entry") .. "!" .. bold_off @@ -1226,7 +1249,7 @@ if DDNS.has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then -- if .datatype is set, then it is checked before calling this function if not value or (#value == 0) then return "" -- ignore on empty - elseif DDNS.has_proxy then + elseif has_proxy then local ipv6 = usev6:formvalue(section) or "0" local force = fipv:formvalue(section) or "0" local command = CTRL.luci_helper .. [[ -]] diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua index df39a3a7e5..419201548b 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua @@ -48,7 +48,7 @@ if not SYS.init.enabled("ddns") then end -- No IPv6 support -if not DDNS.has_ipv6 then +if not DDNS.env_info("has_ipv6") then local v6 = s:option(DummyValue, "_no_ipv6") v6.titleref = 'http://www.openwrt.org" target="_blank' v6.rawhtml = true @@ -60,7 +60,7 @@ if not DDNS.has_ipv6 then end -- No HTTPS support -if not DDNS.has_ssl then +if not DDNS.env_info("has_ssl") then local sl = s:option(DummyValue, "_no_https") sl.titleref = DISP.build_url("admin", "system", "packages") sl.rawhtml = true @@ -74,7 +74,7 @@ if not DDNS.has_ssl then end -- No bind_network -if not DDNS.has_bindnet then +if not DDNS.env_info("has_bindnet") then local bn = s:option(DummyValue, "_no_bind_network") bn.titleref = DISP.build_url("admin", "system", "packages") bn.rawhtml = true @@ -90,7 +90,7 @@ if not DDNS.has_bindnet then end -- currently only cURL possibly without proxy support -if not DDNS.has_proxy then +if not DDNS.env_info("has_proxy") then local px = s:option(DummyValue, "_no_proxy") px.titleref = DISP.build_url("admin", "system", "packages") px.rawhtml = true @@ -104,7 +104,7 @@ if not DDNS.has_proxy then end -- "Force IP Version not supported" -if not DDNS.has_forceip then +if not DDNS.env_info("has_forceip") then local fi = s:option(DummyValue, "_no_force_ip") fi.titleref = DISP.build_url("admin", "system", "packages") fi.rawhtml = true @@ -112,11 +112,11 @@ if not DDNS.has_forceip then translate("Force IP Version not supported") .. bold_off local value = translate("BusyBox's nslookup and Wget do not support to specify " .. "the IP version to use for communication with DDNS Provider!") - if not (DDNS.has_wgetssl or DDNS.has_curl or DDNS.has_fetch) then + if not (DDNS.env_info("has_wgetssl") or DDNS.env_info("has_curl") or DDNS.env_info("has_fetch")) then value = value .. "<br />- " .. translate("You should install 'wget' or 'curl' or 'uclient-fetch' package.") end - if not DDNS.has_bindhost then + if not DDNS.env_info("has_bindhost") then value = value .. "<br />- " .. translate("You should install 'bind-host' or 'knot-host' or 'drill' package for DNS requests.") end @@ -124,7 +124,7 @@ if not DDNS.has_forceip then end -- "DNS requests via TCP not supported" -if not DDNS.has_bindhost then +if not DDNS.env_info("has_bindhost") then local dt = s:option(DummyValue, "_no_dnstcp") dt.titleref = DISP.build_url("admin", "system", "packages") dt.rawhtml = true @@ -137,7 +137,7 @@ if not DDNS.has_bindhost then end -- nslookup compiled with musl produce problems when using -if not DDNS.has_dnsserver then +if not DDNS.env_info("has_dnsserver") then local ds = s:option(DummyValue, "_no_dnsserver") ds.titleref = DISP.build_url("admin", "system", "packages") ds.rawhtml = true @@ -151,7 +151,7 @@ if not DDNS.has_dnsserver then end -- certificates installed -if DDNS.has_ssl and not DDNS.has_cacerts then +if DDNS.env_info("has_ssl") and not DDNS.env_info("has_cacerts") then local ca = s:option(DummyValue, "_no_certs") ca.titleref = DISP.build_url("admin", "system", "packages") ca.rawhtml = true diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua index 114f831c17..11f73800ea 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua @@ -1,21 +1,20 @@ -- Copyright 2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Licensed to the public under the Apache License 2.0. -local NXFS = require "nixio.fs" local DISP = require "luci.dispatcher" local HTTP = require "luci.http" local SYS = require "luci.sys" local CTRL = require "luci.controller.ddns" -- this application's controller local DDNS = require "luci.tools.ddns" -- ddns multiused functions -local show_hints = not (DDNS.has_ipv6 -- IPv6 support - and DDNS.has_ssl -- HTTPS support - and DDNS.has_proxy -- Proxy support - and DDNS.has_bindhost -- DNS TCP support - and DDNS.has_forceip -- Force IP version - and DDNS.has_dnsserver -- DNS server support - and DDNS.has_bindnet -- Bind to network/interface - and DDNS.has_cacerts -- certificates installed at /etc/ssl/certs +local show_hints = not (DDNS.env_info("has_ipv6") -- IPv6 support + and DDNS.env_info("has_ssl") -- HTTPS support + and DDNS.env_info("has_proxy") -- Proxy support + and DDNS.env_info("has_bindhost") -- DNS TCP support + and DDNS.env_info("has_forceip") -- Force IP version + and DDNS.env_info("has_dnsserver") -- DNS server support + and DDNS.env_info("has_bindnet") -- Bind to network/interface + and DDNS.env_info("has_cacerts") -- certificates installed at /etc/ssl/certs ) local not_enabled = not SYS.init.enabled("ddns") local need_update = not CTRL.service_ok() |