diff options
Diffstat (limited to 'applications')
19 files changed, 797 insertions, 292 deletions
diff --git a/applications/luci-app-ddns/Makefile b/applications/luci-app-ddns/Makefile index 18906cd1c2..f20b49e902 100644 --- a/applications/luci-app-ddns/Makefile +++ b/applications/luci-app-ddns/Makefile @@ -6,32 +6,33 @@ include $(TOPDIR)/rules.mk -# LuCI specific settings -LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts) -LUCI_DEPENDS:=+luci-mod-admin-full +ddns-scripts - PKG_NAME:=luci-app-ddns # Version == major.minor.patch # increase on new functionality (minor) or patches (patch) -PKG_VERSION:=2.1.1 +PKG_VERSION:=2.2.1 # Release == build # increase on changes of translation files -PKG_RELEASE:=0 +PKG_RELEASE:=1 PKG_LICENSE:=Apache-2.0 PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com> +# LuCI specific settings +LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts) +LUCI_DEPENDS:=+luci-mod-admin-full +ddns-scripts +LUCI_PKGARCH:=all + define Package/$(PKG_NAME)/config # shown in make menuconfig <Help> help $(LUCI_TITLE) - - Version : $(PKG_VERSION)-$(PKG_RELEASE) - Maintainer: $(PKG_MAINTAINER) + . + Version: $(PKG_VERSION)-$(PKG_RELEASE) + $(PKG_MAINTAINER) endef -include ../../luci.mk +include $(TOPDIR)/feeds/luci/luci.mk # call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-ddns/luasrc/controller/ddns.lua b/applications/luci-app-ddns/luasrc/controller/ddns.lua index 56d2b66e21..0b82021e2a 100644 --- a/applications/luci-app-ddns/luasrc/controller/ddns.lua +++ b/applications/luci-app-ddns/luasrc/controller/ddns.lua @@ -15,7 +15,7 @@ local SYS = require "luci.sys" local DDNS = require "luci.tools.ddns" -- ddns multiused functions local UTIL = require "luci.util" -DDNS_MIN = "2.1.0-2" -- minimum version of service required +DDNS_MIN = "2.2.0-1" -- minimum version of service required function index() local nxfs = require "nixio.fs" -- global definitions not available @@ -36,6 +36,7 @@ function index() entry( {"admin", "services", "ddns", "detail"}, cbi("ddns/detail"), nil ).leaf = true entry( {"admin", "services", "ddns", "hints"}, cbi("ddns/hints", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}), nil ).leaf = true + entry( {"admin", "services", "ddns", "global"}, cbi("ddns/global"), nil ).leaf = true entry( {"admin", "services", "ddns", "logview"}, call("logread") ).leaf = true entry( {"admin", "services", "ddns", "startstop"}, call("startstop") ).leaf = true entry( {"admin", "services", "ddns", "status"}, call("status") ).leaf = true @@ -90,7 +91,7 @@ local function _get_status() end -- process running but update needs to happen - -- problems it force_seconds > uptime + -- problems if force_seconds > uptime force_seconds = (force_seconds > uptime) and uptime or force_seconds if pid > 0 and ( lasttime + force_seconds - uptime ) <= 0 then datenext = "_verify_" @@ -103,7 +104,7 @@ local function _get_status() elseif pid == 0 and enabled == 0 then datenext = "_disabled_" - -- no process running and NOT + -- no process running and enabled elseif pid == 0 and enabled ~= 0 then datenext = "_stopped_" end @@ -149,11 +150,11 @@ end -- called by XHR.get from detail_logview.htm function logread(section) -- read application settings - local uci = UCI.cursor() - local log_dir = uci:get("ddns", "global", "log_dir") or "/var/log/ddns" - local lfile=log_dir .. "/" .. section .. ".log" + local uci = UCI.cursor() + local log_dir = uci:get("ddns", "global", "log_dir") or "/var/log/ddns" + local lfile = log_dir .. "/" .. section .. ".log" + local ldata = NXFS.readfile(lfile) - local ldata=NXFS.readfile(lfile) if not ldata or #ldata == 0 then ldata="_nodata_" end @@ -164,10 +165,10 @@ end -- called by XHR.get from overview_status.htm function startstop(section, enabled) local uci = UCI.cursor() + local pid = DDNS.get_pid(section) local data = {} -- Array to transfer data to javascript -- if process running we want to stop and return - local pid = DDNS.get_pid(section) if pid > 0 then local tmp = NX.kill(pid, 15) -- terminate NX.nanosleep(2) -- 2 second "show time" 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 77753c03a7..40a66ef152 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua @@ -1,11 +1,11 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> -- Copyright 2013 Manuel Munz <freifunk at somakoma dot de> --- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> +-- Copyright 2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Licensed to the public under the Apache License 2.0. local NX = require "nixio" -local FS = require "nixio.fs" +local NXFS = require "nixio.fs" local SYS = require "luci.sys" local UTIL = require "luci.util" local DISP = require "luci.dispatcher" @@ -14,21 +14,21 @@ local DTYP = require "luci.cbi.datatypes" local DDNS = require "luci.tools.ddns" -- ddns multiused functions -- takeover arguments -- ####################################################### -section = arg[1] +local section = arg[1] -- check supported options -- ################################################## -- saved to local vars here because doing multiple os calls slow down the system -has_ipv6 = DDNS.check_ipv6() -- IPv6 support -has_ssl = DDNS.check_ssl() -- HTTPS support -has_proxy = DDNS.check_proxy() -- Proxy support -has_dnstcp = DDNS.check_bind_host() -- DNS TCP support -has_force = has_ssl and has_dnstcp -- Force IP Protocoll +local has_ipv6 = DDNS.check_ipv6() -- IPv6 support +local has_ssl = DDNS.check_ssl() -- HTTPS support +local has_proxy = DDNS.check_proxy() -- Proxy support +local has_dnstcp = DDNS.check_bind_host() -- DNS TCP support +local has_force = has_ssl and has_dnstcp -- Force IP Protocoll -- html constants -- ########################################################### -font_red = "<font color='red'>" -font_off = "</font>" -bold_on = "<strong>" -bold_off = "</strong>" +local font_red = "<font color='red'>" +local font_off = "</font>" +local bold_on = "<strong>" +local bold_off = "</strong>" -- error text constants -- ##################################################### err_ipv6_plain = translate("IPv6 not supported") .. " - " .. @@ -136,7 +136,10 @@ log_dir = m.uci:get(m.config, "global", "log_dir") or "/var/log/ddns" -- cbi-section definition -- ################################################### ns = m:section( NamedSection, section, "service", translate("Details for") .. ([[: <strong>%s</strong>]] % section), - translate("Configure here the details for selected Dynamic DNS service") ) + translate("Configure here the details for selected Dynamic DNS service.") + .. [[<br /><a href="http://wiki.openwrt.org/doc/uci/ddns#version_1x" target="_blank">]] + .. translate("For detailed information about parameter settings look here.") + .. [[</a>]] ) ns.instance = section -- arg [1] ns:tab("basic", translate("Basic Settings"), nil ) ns:tab("advanced", translate("Advanced Settings"), nil ) @@ -344,7 +347,7 @@ function ush.validate(self, value) end elseif (#url > 0) then return nil, err_tab_basic(self) .. translate("either url or script could be set") - elseif not FS.access(value) then + elseif not NXFS.access(value) then return nil, err_tab_basic(self) .. translate("File not found") end return value @@ -765,7 +768,7 @@ function ips.validate(self, value) if (usev6:formvalue(section) == "0" and src4:formvalue(section) ~= "script") or (usev6:formvalue(section) == "1" and src6:formvalue(section) ~= "script") then return "" - elseif not value or not (#value > 0) or not FS.access(split[1], "x") then + elseif not value or not (#value > 0) or not NXFS.access(split[1], "x") then return nil, err_tab_adv(self) .. translate("not found or not executable - Sample: '/path/to/script.sh'") else @@ -855,6 +858,34 @@ function eif6.write(self, section, value) end end +-- IPv4/IPv6 - bind_network -- ################################################# +if has_ssl or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then + bnet = ns:taboption("advanced", ListValue, "bind_network", + translate("Bind Network") ) + bnet:depends("ipv4_source", "web") + bnet:depends("ipv6_source", "web") + bnet.rmempty = true + bnet.default = "" + bnet:value("", translate("-- default --")) + WADM.cbi_add_networks(bnet) + function bnet.cfgvalue(self, section) + local value = AbstractValue.cfgvalue(self, section) + if not has_ssl 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 + else + self.description = translate("OPTIONAL: Network to use for communication") .. + "<br />" .. translate("Casual users should not change this setting") + end + return value + end + function bnet.validate(self, value) + if (value ~= "" and has_ssl ) or value == "" then return value end + return nil, err_tab_adv(self) .. translate("Binding to a specific network not supported") .. " !" + end +end + -- IPv4 + IPv6 - force_ipversion (NEW) -- ###################################### -- optional to force wget/curl and host to use only selected IP version -- command parameter "-4" or "-6" @@ -1198,7 +1229,7 @@ lv.inputtitle = translate("Read / Reread log file") lv.rows = 50 function lv.cfgvalue(self, section) local lfile=log_dir .. "/" .. section .. ".log" - if FS.access(lfile) then + if NXFS.access(lfile) then return lfile .. "\n" .. translate("Please press [Read] button") end return lfile .. "\n" .. translate("File not found or empty") diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua new file mode 100644 index 0000000000..e1718739f9 --- /dev/null +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua @@ -0,0 +1,156 @@ +-- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> +-- Licensed to the public under the Apache License 2.0. + +local NX = require "nixio" +local NXFS = require "nixio.fs" +local DISP = require "luci.dispatcher" +local SYS = require "luci.sys" +local DDNS = require "luci.tools.ddns" -- ddns multiused functions + +-- cbi-map definition -- ####################################################### +local m = Map("ddns") + +-- first need to close <a> from cbi map template our <a> closed by template +m.title = [[</a><a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]] + .. translate("Dynamic DNS") + +m.description = translate("Dynamic DNS allows that your router can be reached with " .. + "a fixed hostname while having a dynamically changing IP address.") + +m.redirect = DISP.build_url("admin", "services", "ddns") + +function m.commit_handler(self) + if self.changed then -- changes ? + os.execute("/etc/init.d/ddns reload &") -- reload configuration + end +end + +-- cbi-section definition -- ################################################### +local ns = m:section( NamedSection, "global", "ddns", + translate("Global Settings"), + translate("Configure here the details for all Dynamic DNS services including this LuCI application.") + .. [[<br /><strong>]] + .. translate("It is NOT recommended for casual users to change settings on this page.") + .. [[</strong><br />]] + .. [[<a href="http://wiki.openwrt.org/doc/uci/ddns#version_2x1" target="_blank">]] + .. translate("For detailed information about parameter settings look here.") + .. [[</a>]] + +-- section might not exist +function ns.cfgvalue(self, section) + if not self.map:get(section) then + self.map:set(section, nil, self.sectiontype) + end + return self.map:get(section) +end + +-- allow_local_ip -- ########################################################## +local ali = ns:option(Flag, "allow_local_ip") +ali.title = translate("Allow non-public IP's") +ali.description = translate("Non-public and by default blocked IP's") .. ":" + .. [[<br /><strong>IPv4: </strong>]] + .. "0/8, 10/8, 100.64/10, 127/8, 169.254/16, 172.16/12, 192.168/16" + .. [[<br /><strong>IPv6: </strong>]] + .. "::/32, f000::/4" +ali.reempty = true +ali.default = "0" +function ali.parse(self, section) + DDNS.flag_parse(self, section) +end +function ali.validate(self, value) + if value == self.default then + return "" -- default = empty + end + return value +end + +-- date_format -- ############################################################# +local df = ns:option(Value, "date_format") +df.title = translate("Date format") +df.description = [[<a href="http://www.cplusplus.com/reference/ctime/strftime/" target="_blank">]] + .. translate("For supported codes look here") + .. [[</a>]] +df.template = "ddns/global_value" +df.rmempty = true +df.default = "%F %R" +df.date_string = "" +function df.cfgvalue(self, section) + local value = AbstractValue.cfgvalue(self, section) or self.default + local epoch = os.time() + self.date_string = DDNS.epoch2date(epoch, value) + return value +end +function df.validate(self, value) + if value == self.default then + return "" -- default = empty + end + return value +end + +-- run_dir -- ################################################################# +local rd = ns:option(Value, "run_dir") +rd.title = translate("Status directory") +rd.description = translate("Directory contains PID and other status information for each running section") +rd.rmempty = true +rd.default = "/var/run/ddns" +function rd.validate(self, value) + if value == self.default then + return "" -- default = empty + end + return value +end + +-- log_dir -- ################################################################# +local ld = ns:option(Value, "log_dir") +ld.title = translate("Log directory") +ld.description = translate("Directory contains Log files for each running section") +ld.rmempty = true +ld.default = "/var/log/ddns" +function ld.validate(self, value) + if value == self.default then + return "" -- default = empty + end + return value +end + +-- log_lines -- ############################################################### +local ll = ns:option(Value, "log_lines") +ll.title = translate("Log length") +ll.description = translate("Number of last lines stored in log files") +ll.rmempty = true +ll.default = "250" +ll.datatype = "and(uinteger,min(1))" +function ll.validate(self, value) + local n = tonumber(value) + if not n or math.floor(n) ~= n or n < 1 then + return nil, self.title .. ": " .. translate("minimum value '1'") + end + if value == self.default then + return "" -- default = empty + end + return value +end + +-- use_curl -- ################################################################ +if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0) +and NXFS.access("/usr/bin/curl") then + local pc = ns:option(Flag, "use_curl") + pc.title = translate("Use cURL") + pc.description = translate("If both cURL and GNU Wget are installed, Wget is used by default.") + .. [[<br />]] + .. translate("To use cURL activate this option.") + pc.orientation = "horizontal" + pc.rmempty = true + pc.default = "0" + function pc.parse(self, section) + DDNS.flag_parse(self, section) + end + function pc.validate(self, value) + if value == self.default then + return "" -- default = empty + end + return value + end +end + +return m 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 009ba99eb8..ff7aa7a41c 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua @@ -8,7 +8,7 @@ local DDNS = require "luci.tools.ddns" -- ddns multiused functions -- check supported options -- ################################################## -- saved to local vars here because doing multiple os calls slow down the system -has_ssl = DDNS.check_ssl() -- HTTPS support +has_ssl = DDNS.check_ssl() -- HTTPS support and --bind-network / --interface has_proxy = DDNS.check_proxy() -- Proxy support has_dnstcp = DDNS.check_bind_host() -- DNS TCP support -- correct ddns-scripts version @@ -88,6 +88,22 @@ if not has_ssl then translate("In some versions cURL/libcurl in OpenWrt is compiled without proxy support.") end +-- No bind_network +if not has_ssl then + local dv = s:option(DummyValue, "_no_bind_network") + dv.titleref = DISP.build_url("admin", "system", "packages") + dv.rawhtml = true + dv.title = bold_on .. + translate("Binding to a specific network not supported") .. bold_off + dv.value = translate("Neither GNU Wget with SSL nor cURL installed to select a network to use for communication.") .. + "<br />- " .. + translate("You should install GNU Wget with SSL or cURL package.") .. + "<br />- " .. + translate("GNU Wget will use the IP of given network, cURL will use the physical interface.") .. + "<br />- " .. + translate("In some versions cURL/libcurl in OpenWrt is compiled without proxy support.") +end + -- cURL without proxy support if has_ssl and not has_proxy then local dv = s:option(DummyValue, "_no_proxy") 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 83b10e9366..9e8df2d089 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua @@ -27,8 +27,6 @@ bold_off = [[</strong>]] m = Map("ddns") -- first need to close <a> from cbi map template our <a> closed by template ---m.title = [[</a><a href="javascript:alert(']] .. CTRL.show_versions() ..[[')">]] .. --- translate("Dynamic DNS") m.title = [[</a><a href="javascript:alert(']] .. translate("Version Information") .. [[\n\nluci-app-ddns]] @@ -109,9 +107,13 @@ end -- TableSection definition -- ################################################## ts = m:section( TypedSection, "service", translate("Overview"), - translate("Below is a list of configured DDNS configurations and their current state." .. "<br />" .. - "If you want to send updates for IPv4 and IPv6 you need to define two separate Configurations " .. - "i.e. 'myddns_ipv4' and 'myddns_ipv6'") ) + translate("Below is a list of configured DDNS configurations and their current state.") + .. "<br />" + .. translate("If you want to send updates for IPv4 and IPv6 you need to define two separate Configurations " + .. "i.e. 'myddns_ipv4' and 'myddns_ipv6'") + .. "<br />" + .. [[<a href="]] .. DISP.build_url("admin", "services", "ddns", "global") .. [[">]] + .. translate("To change global settings click here") .. [[</a>]] ) ts.sectionhead = translate("Configuration") ts.template = "cbi/tblsection" ts.addremove = true diff --git a/applications/luci-app-ddns/luasrc/tools/ddns.lua b/applications/luci-app-ddns/luasrc/tools/ddns.lua index 2fbcff8bad..6d53931469 100644 --- a/applications/luci-app-ddns/luasrc/tools/ddns.lua +++ b/applications/luci-app-ddns/luasrc/tools/ddns.lua @@ -35,7 +35,7 @@ end -- check if Wget with SSL support or cURL installed function check_ssl() - if (SYS.call([[ grep -iq "\+ssl" /usr/bin/wget 2>/dev/null ]]) == 0) then + if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0) then return true else return NXFS.access("/usr/bin/curl") @@ -45,12 +45,12 @@ end -- check if Wget with SSL or cURL with proxy support installed function check_proxy() -- we prefere GNU Wget for communication - if (SYS.call([[ grep -iq "\+ssl" /usr/bin/wget 2>/dev/null ]]) == 0) then + if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0) then return true -- if not installed cURL must support proxy elseif NXFS.access("/usr/bin/curl") then - return (SYS.call([[ grep -iq all_proxy /usr/lib/libcurl.so* 2>/dev/null ]]) == 0) + return (SYS.call([[ grep -i all_proxy /usr/lib/libcurl.so* >/dev/null 2>&1 ]]) == 0) -- only BusyBox Wget is installed else @@ -100,25 +100,67 @@ end function ipkg_ver_compare(ver1, comp, ver2) if not ver1 or not (#ver1 > 0) or not ver2 or not (#ver2 > 0) - or not comp or not (#comp > 0) then - return nil + or not comp or not (#comp > 0) then return nil end + -- correct compare string + if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~=" + elseif comp == "<=" or comp == "<" or comp == "=<" then comp = "<=" + elseif comp == ">=" or comp == ">" or comp == "=>" then comp = ">=" + elseif comp == "=" or comp == "==" then comp = "==" + elseif comp == "<<" then comp = "<" + elseif comp == ">>" then comp = ">" + else return nil end + + local av1 = UTIL.split(ver1, "[%.%-]", nil, true) + local av2 = UTIL.split(ver2, "[%.%-]", nil, true) + + for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do + local s1 = av1[i] or "" + local s2 = av2[i] or "" + local n1 = tonumber(s1) + local n2 = tonumber(s2) + + -- one numeric and other empty string then set other to 0 + if n1 and not n2 and (not s2 or #s2 == 0) then n2 = 0 end + if n2 and not n1 and (not s1 or #s1 == 0) then n1 = 0 end + + local nc = (n1 and n2) -- numeric compare + + if nc then + -- first "not equal" found return true + if comp == "~=" and (n1 ~= n2) then return true end + -- first "lower" found return true + if (comp == "<" or comp == "<=") and (n1 < n2) then return true end + -- first "greater" found return true + if (comp == ">" or comp == ">=") and (n1 > n2) then return true end + -- not equal then return false + if (n1 ~= n2) then return false end + else + if comp == "~=" and (s1 ~= s2) then return true end + if (comp == "<" or comp == "<=") and (s1 < s2) then return true end + if (comp == ">" or comp == ">=") and (s1 > s2) then return true end + if (s1 ~= s2) then return false end + end end - return (tonumber(SYS.call( - [[opkg compare-versions "]] .. ver1 .. [[" "]] .. comp .. [[" "]] .. ver2 .. [["]] - )) == 1) + -- all equal then true + return true end -- read version information for given package if installed function ipkg_ver_installed(pkg) - if not pkg then - return nil - end - -- opkg list-installed [pkg] | cut -d " " -f 3 - return version as sting - local ver = SYS.exec([[opkg list-installed ]] .. pkg .. [[ | cut -d " " -f 3 ]]) - if (#ver > 0) then - return ver + local version = nil + local control = io.open("/usr/lib/opkg/info/%s.control" % pkg, "r") + if control then + local ln + repeat + ln = control:read("*l") + if ln and ln:match("^Version: ") then + version = ln:gsub("^Version: ", "") + break + end + until not ln + control:close() end - return nil + return version end -- replacement of build-in read of UCI option diff --git a/applications/luci-app-ddns/luasrc/view/ddns/global_value.htm b/applications/luci-app-ddns/luasrc/view/ddns/global_value.htm new file mode 100644 index 0000000000..159cb60147 --- /dev/null +++ b/applications/luci-app-ddns/luasrc/view/ddns/global_value.htm @@ -0,0 +1,34 @@ + +<!-- ++ BEGIN ++ Dynamic DNS ++ global_value.htm ++ --> +<%+cbi/valueheader%> +<script type="text/javascript">//<![CDATA[ + // event handler on changed date + function onkeyup_date(value) { + var obj = document.getElementById("cbid.ddns.global.date_format.help"); + if ( !obj ) { return; } // security check + + if ( value == "" || value.length == 0 ) { value = "%F %R"; } + var now = new Date(); + var txt = now.toLocaleFormat(value); + // handle newline(%n) and tab(%t) needs to be converted to HTML + txt = txt.replace(new RegExp('\r?\n','g'), '<br />'); + txt = txt.replace(new RegExp('\t','g'), ' '); + obj.innerHTML = "<%:Current setting%>: <strong>" + txt + "<\/strong>"; + } +//]]></script> + +<input type="text" class="cbi-input-text" onchange="cbi_d_update(this.id)" onkeyup="onkeyup_date(this.value)" + <%= + attr("name", cbid) .. attr("id", cbid) .. attr("value", self:cfgvalue(section) or self.default) .. + ifattr(self.size, "size") .. ifattr(self.placeholder, "placeholder") + %> +/> +<br /> +<div class="cbi-value-description"> + <span class="cbi-value-helpicon"><img src="<%=resource%>/cbi/help.gif" alt="<%:help%>" /><%=self.description%></span> + <br /> + <span id="<%=cbid%>.help" class="cbi-value-helpicon"><%:Current setting%>: <strong><%=self.date_string%></strong></span> +</div> <!-- div class="cbi-value-description" --> +</div> <!-- div class="cbi-value-field" --> +</div> <!-- div class="cbi-value cbi-value-last" --> +<!-- ++ END ++ Dynamic DNS ++ global_value.htm ++ --> diff --git a/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm b/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm index 6cca0e75d9..ea8e4a1e31 100644 --- a/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm +++ b/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm @@ -146,8 +146,7 @@ } else { // should have data because status changed // so update screen - if (data) - _data2elements(data); + if (data) { _data2elements(data); } } // make me invisible obj.parentNode.style.display = "none"; @@ -155,20 +154,19 @@ ); } - var ddns_ov_XHR = new XHR(); // force to immediate show status on page load (not waiting for XHR.poll) - ddns_ov_XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, + XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, function(x, data) { - _data2elements(data); + if (data) { _data2elements(data); } } ); // define only ONE XHR.poll in a page because if one is running it blocks the other one // optimum is to define on Map or Section Level from here you can reach all elements // we need update every 15 seconds only - ddns_ov_XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, + XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, function(x, data) { - _data2elements(data); + if (data) { _data2elements(data); } } ); diff --git a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm index 7c60726e24..4ca0abb0e5 100644 --- a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm +++ b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm @@ -14,53 +14,38 @@ tbl.deleteRow(1); // variable for Modulo-Division use to set cbi-rowstyle-? (0 or 1) - var x = -1; - var i = 1; - - // no data => no ddns-scripts Version 2 installed - if ( !data ) { - var txt = '<br /><strong><font color="red"><%:Old version of ddns-scripts installed%></font>' ; - var url = '<a href="' ; - url += '<%=luci.dispatcher.build_url("admin", "system", "packages")%>' ; - url += '"><%:install update here%></a></strong>' ; - var tr = tbl.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((i + x) % 2) + 1); - var td = tr.insertCell(-1); - td.colSpan = 2 ; - td.innerHTML = txt + " - " + url - tr.insertCell(-1).colSpan = 3 ; - return; - } + var i = -1; + var j = 1; // DDNS Service disabled if (data[0].enabled == 0) { var txt = '<strong><font color="red"><%:DDNS Autostart disabled%></font>' ; var url = '<a href="' + data[0].url_up + '"><%:enable here%></a></strong>' ; var tr = tbl.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((i + x) % 2) + 1); + tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((j + i) % 2) + 1); var td = tr.insertCell(-1); td.colSpan = 2 ; td.innerHTML = txt + " - " + url tr.insertCell(-1).colSpan = 3 ; - x++ ; + i++ ; } - for( i = 1; i < data.length; i++ ) + for( j = 1; j < data.length; j++ ) { var tr = tbl.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((i + x) % 2) + 1) ; + tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((j + i) % 2) + 1) ; // configuration - tr.insertCell(-1).innerHTML = '<strong>' + data[i].section + '</strong>' ; + tr.insertCell(-1).innerHTML = '<strong>' + data[j].section + '</strong>' ; // pid - // data[i].pid ignored here + // data[j].pid ignored here // last update - // data[i].datelast ignored here + // data[j].datelast ignored here // next update - switch (data[i].datenext) { + switch (data[j].datenext) { case "_empty_": tr.insertCell(-1).innerHTML = '<em><%:Unknown error%></em>' ; break; @@ -80,18 +65,18 @@ tr.insertCell(-1).innerHTML = '<em><%:Verify%></em>'; break; default: - tr.insertCell(-1).innerHTML = data[i].datenext ; + tr.insertCell(-1).innerHTML = data[j].datenext ; break; } // domain - if (data[i].domain == "_nodomain_") + if (data[j].domain == "_nodomain_") tr.insertCell(-1).innerHTML = '<em><%:config error%></em>'; else - tr.insertCell(-1).innerHTML = data[i].domain; + tr.insertCell(-1).innerHTML = data[j].domain; // registered IP - switch (data[i].reg_ip) { + switch (data[j].reg_ip) { case "_nodomain_": tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>'; break; @@ -102,15 +87,15 @@ tr.insertCell(-1).innerHTML = '<em><%:IPv6 not supported%></em>'; break; default: - tr.insertCell(-1).innerHTML = data[i].reg_ip; + tr.insertCell(-1).innerHTML = data[j].reg_ip; break; } // monitored interface - if (data[i].iface == "_nonet_") + if (data[j].iface == "_nonet_") tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>'; else - tr.insertCell(-1).innerHTML = data[i].iface; + tr.insertCell(-1).innerHTML = data[j].iface; } if (tbl.rows.length == 1 || (data[0].enabled == 0 && tbl.rows.length == 2) ) { @@ -125,19 +110,19 @@ } } - var ddns_status_XHR = new XHR(); // force to immediate show status (not waiting for XHR.poll) - ddns_status_XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, + XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, function(x, data) { - _data2elements(x, data); + if (data) { _data2elements(x, data); } } ); - ddns_status_XHR.poll(10, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, + XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, function(x, data) { - _data2elements(x, data); + if (data) { _data2elements(x, data); } } ); + //]]></script> <fieldset class="cbi-section" id="ddns_status_section"> diff --git a/applications/luci-app-ddns/po/de/ddns.po b/applications/luci-app-ddns/po/de/ddns.po index b965a91fd3..f6e0d5e393 100644 --- a/applications/luci-app-ddns/po/de/ddns.po +++ b/applications/luci-app-ddns/po/de/ddns.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: luci-app-ddns\n" -"POT-Creation-Date: 2015-01-17 18:28+0100\n" -"PO-Revision-Date: 2015-01-17 18:36+0100\n" +"POT-Creation-Date: 2015-02-08 18:30+0100\n" +"PO-Revision-Date: 2015-02-08 18:36+0100\n" "Last-Translator: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n" "Language-Team: \n" "Language: de\n" @@ -20,9 +20,15 @@ msgstr "&" msgid "-- custom --" msgstr "-- benutzerdefiniert --" +msgid "-- default --" +msgstr "-- Standard --" + msgid "Advanced Settings" msgstr "Erweiterte Einstellungen" +msgid "Allow non-public IP's" +msgstr "Erlaube Nicht-öffentliche IPs" + msgid "Applying changes" msgstr "Änderungen anwenden" @@ -38,12 +44,14 @@ msgstr "" msgid "" "Below is a list of configured DDNS configurations and their current state." -"<br />If you want to send updates for IPv4 and IPv6 you need to define two " -"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" msgstr "" -"Liste der definierten DDNS Konfigurationen und ihr aktueller Status.<br /" -">Wenn Sie Aktualisierungen für IPv4 und IPv6 senden möchten benötigen Sie " -"zwei Konfigurationen z.B. 'myddns_ipv4' und 'myddns_ipv6'" +"Liste der konfigurierten DDNS Konfigurationen und ihr momentaner Status." + +msgid "Bind Network" +msgstr "Bind-Netzwerk" + +msgid "Binding to a specific network not supported" +msgstr "'Bind' an ein bestimmtes Netzwerk wird nicht unterstützt" msgid "" "BusyBox's nslookup and Wget do not support to specify the IP version to use " @@ -59,6 +67,9 @@ msgstr "" "BusyBox's nslookup unterstützt es nicht das TCP-Protokoll für DNS Anfragen " "anstelle des standardmäßigen UDP-Protokolls." +msgid "Casual users should not change this setting" +msgstr "Standard Benutzer sollten diese Einstellung nicht ändern." + msgid "Check Interval" msgstr "Prüfinterval" @@ -71,8 +82,18 @@ msgstr "Konfigurationsfehler" msgid "Configuration" msgstr "Einstellungen" -msgid "Configure here the details for selected Dynamic DNS service" -msgstr "Konfiguriere hier die Details für den gewählten Dynamik DNS Dienst" +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" +"Konfiguriere hier die Details für alle Dynamik DNS Dienste einschließlich " +"dieser LuCI Anwendung." + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "Konfiguriere hier die Details für den gewählten Dynamik DNS Dienst." + +msgid "Current setting" +msgstr "Aktuelle Einstellung" msgid "" "Currently DDNS updates are not started at boot or on interface events.<br /" @@ -113,6 +134,9 @@ msgstr "DNS Anfragen über TCP nicht unterstützt" msgid "DNS-Server" msgstr "DNS-Server" +msgid "Date format" +msgstr "Datumsformat " + msgid "Defines the Web page to read systems IPv4-Address from" msgstr "" "Definiert die Web-Seite von der die aktuelle IPv4-Adresse des System gelesen " @@ -159,6 +183,16 @@ msgstr "" msgid "Details for" msgstr "Details für" +msgid "Directory contains Log files for each running section" +msgstr "" +"Das Verzeichnis enthält die Protokolldateien aller laufenden Konfigurationen." + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" +"Das Verzeichnis enthält die PID und andere Statusinformationen aller " +"laufenden Konfigurationen." + msgid "Disabled" msgstr "Deaktiviert" @@ -206,6 +240,13 @@ msgstr "" "Folgen Sie dem Link<br />Hier finden Sie weitere Hinweise um Ihr System für " "die Nutzung aller Optionen der DDNS Skripte zu optimieren." +msgid "For detailed information about parameter settings look here." +msgstr "" +"Detaillierte Informationen zu den Parametereinstellungen finden Sie hier." + +msgid "For supported codes look here" +msgstr "Unterstützte Kodierungen finden Sie hier." + msgid "Force IP Version" msgstr "Erzwinge IP-Version" @@ -227,6 +268,16 @@ msgstr "Format" msgid "Format: IP or FQDN" msgstr "Format: IP-Adresse oder FQDN" +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" +"GNU Wget verwendet die IP des gewählten Netzwerkes; cURL verwendet die " +"physikalische Schnittstelle." + +msgid "Global Settings" +msgstr "Globale Einstellungen" + msgid "HTTPS not supported" msgstr "HTTPS nicht unterstützt" @@ -263,6 +314,9 @@ msgstr "IPv6 nicht unterstützt" msgid "IPv6-Address" msgstr "IPv6-Adresse" +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "Wenn cURL und GNU Wget installiert sind, wird Wget verwendet." + msgid "" "If this service section is disabled it could not be started.<br />Neither " "from LuCI interface nor from console" @@ -271,6 +325,13 @@ msgstr "" "über das LuCI Web Interface noch von der Geräte-Konsole" msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" +"Wenn Sie Aktualisierungen für IPv4 und IPv6 senden möchten benötigen Sie " +"zwei Konfigurationen z.B. 'myddns_ipv4' und 'myddns_ipv6'" + +msgid "" "In some versions cURL/libcurl in OpenWrt is compiled without proxy support." msgstr "" "In einigen Versionen von OpenWrt wurde cURL/libcurl ohne Proxy Unterstützung " @@ -298,6 +359,11 @@ msgstr "" "werden.<br />Ein Wert von '0' führt das Skript nur einmalig aus. <br />Der " "Wert muss größer als das Prüfintervall sein oder '0'." +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" +"Es wird nicht empfohlen, dass Standard Benutzer die Einstellungen auf dieser " +"Seite ändern." + msgid "Last Update" msgstr "Letztes Aktualisierung" @@ -307,6 +373,12 @@ msgstr "Lade" msgid "Log File Viewer" msgstr "Protokolldatei" +msgid "Log directory" +msgstr "Protokoll-Verzeichnis" + +msgid "Log length" +msgstr "Protokolllänge" + msgid "Log to file" msgstr "Protokoll in Datei schreiben" @@ -314,6 +386,13 @@ msgid "Log to syslog" msgstr "Systemprotokoll verwenden" msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" +"Weder GNU Wget mit SSL noch cURL sind installiert um ein Netzwerk zur " +"Kommunikation festzulegen." + +msgid "" "Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS " "protocol." msgstr "" @@ -338,9 +417,16 @@ msgstr "Keine Daten" msgid "No logging" msgstr "Keine Protokollierung" +msgid "Non-public and by default blocked IP's" +msgstr "Nicht-öffentliche und standardmäßig blockierte IPs." + msgid "Notice" msgstr "Notiz" +msgid "Number of last lines stored in log files" +msgstr "" +"Anzahl der letzten Zeilen die in der Protokolldatei gespeichert werden." + msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." msgstr "" "OPTIONAL: Erzwingt die Verwendung einer reinen IPv4/IPv6 Kommunikation." @@ -349,6 +435,9 @@ msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." msgstr "" "OPTIONAL: Erzwingt die Verwendung von TCP anstelle von UDP bei DNS Anfragen." +msgid "OPTIONAL: Network to use for communication" +msgstr "OPTIONAL: Netzwerk das zur Kommunikation verwendet werden soll." + msgid "OPTIONAL: Proxy-Server for detection and updates." msgstr "OPTIONAL: Proxy-Server für Adresserkennung und Aktualisierungen" @@ -357,9 +446,6 @@ msgstr "" "OPTIONAL: Ersetzt den voreingestellten DNS-Server um die 'Registrierte IP' " "zu ermitteln." -msgid "Old version of ddns-scripts installed" -msgstr "Alte Version von ddns-scripts installiert" - msgid "On Error the script will retry the failed action after given time" msgstr "" "Bei Fehlern wird das Skript die fehlerhafte Aktion nach der gegebenen Zeit " @@ -428,6 +514,9 @@ msgstr "Start" msgid "Start / Stop" msgstr "Start / Stopp" +msgid "Status directory" +msgstr "Status-Verzeichnis" + msgid "Stopped" msgstr "Angehalten" @@ -444,6 +533,12 @@ msgstr "Kein Dienst konfiguriert" msgid "Timer Settings" msgstr "Zeitgeber Einstellungen" +msgid "To change global settings click here" +msgstr "Globale Einstellungen können sie hier ändern." + +msgid "To use cURL activate this option." +msgstr "Um cURL zu verwenden aktivieren sie diese Einstellung." + msgid "URL" msgstr "URL" @@ -466,6 +561,9 @@ msgstr "Aktualisierungsfehler" msgid "Use HTTP Secure" msgstr "Verwende sicheres HTTP" +msgid "Use cURL" +msgstr "Verwende cURL" + msgid "User defined script to read systems IP-Address" msgstr "" "Definiert das Skript mit dem die aktuelle IP-Adresse des System gelesen " @@ -511,6 +609,9 @@ msgstr "" "Sie sollten das Programmpaket GNU Wget mit SSL (bevorzugt) oder cURL " "installieren." +msgid "You should install GNU Wget with SSL or cURL package." +msgstr "Sie sollten das Programmpaket GNU Wget mit SSL oder cURL installieren." + msgid "You should install GNU Wget with SSL or replace libcurl." msgstr "" "Sie sollten das Programmpaket GNU Wget mit SSL installieren oder libcurl " @@ -548,12 +649,12 @@ msgstr "hier aktivieren" msgid "file or directory not found or not 'IGNORE'" msgstr "Datei oder Verzeichnis nicht gefunden oder nicht 'IGNORE'" +msgid "help" +msgstr "Hilfe" + msgid "hours" msgstr "Stunden" -msgid "install update here" -msgstr "Aktualisierung hier installieren" - msgid "installed" msgstr "installiert" @@ -615,6 +716,9 @@ msgstr "Bitte 'IPv4' Adressversion auswählen" msgid "please select 'IPv4' address version in" msgstr "Bitte 'IPv4' Adressversion auswählen in den" +msgid "please set to 'default'" +msgstr "Bitte auf 'Standard' setzen" + msgid "proxy port missing" msgstr "Proxy-Port fehlt" diff --git a/applications/luci-app-ddns/po/templates/ddns.pot b/applications/luci-app-ddns/po/templates/ddns.pot index 4b983cec1e..6e4f2fe08a 100644 --- a/applications/luci-app-ddns/po/templates/ddns.pot +++ b/applications/luci-app-ddns/po/templates/ddns.pot @@ -7,9 +7,15 @@ msgstr "" msgid "-- custom --" msgstr "" +msgid "-- default --" +msgstr "" + msgid "Advanced Settings" msgstr "" +msgid "Allow non-public IP's" +msgstr "" + msgid "Applying changes" msgstr "" @@ -23,8 +29,12 @@ msgstr "" msgid "" "Below is a list of configured DDNS configurations and their current state." -"<br />If you want to send updates for IPv4 and IPv6 you need to define two " -"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "Bind Network" +msgstr "" + +msgid "Binding to a specific network not supported" msgstr "" msgid "" @@ -37,6 +47,9 @@ msgid "" "UDP when requesting DNS server" msgstr "" +msgid "Casual users should not change this setting" +msgstr "" + msgid "Check Interval" msgstr "" @@ -49,7 +62,15 @@ msgstr "" msgid "Configuration" msgstr "" -msgid "Configure here the details for selected Dynamic DNS service" +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." +msgstr "" + +msgid "Configure here the details for selected Dynamic DNS service." +msgstr "" + +msgid "Current setting" msgstr "" msgid "" @@ -84,6 +105,9 @@ msgstr "" msgid "DNS-Server" msgstr "" +msgid "Date format" +msgstr "" + msgid "Defines the Web page to read systems IPv4-Address from" msgstr "" @@ -115,6 +139,13 @@ msgstr "" msgid "Details for" msgstr "" +msgid "Directory contains Log files for each running section" +msgstr "" + +msgid "" +"Directory contains PID and other status information for each running section" +msgstr "" + msgid "Disabled" msgstr "" @@ -158,6 +189,12 @@ msgid "" "run DDNS scripts with all options" msgstr "" +msgid "For detailed information about parameter settings look here." +msgstr "" + +msgid "For supported codes look here" +msgstr "" + msgid "Force IP Version" msgstr "" @@ -179,6 +216,14 @@ msgstr "" msgid "Format: IP or FQDN" msgstr "" +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." +msgstr "" + +msgid "Global Settings" +msgstr "" + msgid "HTTPS not supported" msgstr "" @@ -212,12 +257,20 @@ msgstr "" msgid "IPv6-Address" msgstr "" +msgid "If both cURL and GNU Wget are installed, Wget is used by default." +msgstr "" + msgid "" "If this service section is disabled it could not be started.<br />Neither " "from LuCI interface nor from console" msgstr "" msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" + +msgid "" "In some versions cURL/libcurl in OpenWrt is compiled without proxy support." msgstr "" @@ -238,6 +291,9 @@ msgid "" "Interval' except '0' are not supported" msgstr "" +msgid "It is NOT recommended for casual users to change settings on this page." +msgstr "" + msgid "Last Update" msgstr "" @@ -247,6 +303,12 @@ msgstr "" msgid "Log File Viewer" msgstr "" +msgid "Log directory" +msgstr "" + +msgid "Log length" +msgstr "" + msgid "Log to file" msgstr "" @@ -254,6 +316,11 @@ msgid "Log to syslog" msgstr "" msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." +msgstr "" + +msgid "" "Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS " "protocol." msgstr "" @@ -276,22 +343,28 @@ msgstr "" msgid "No logging" msgstr "" +msgid "Non-public and by default blocked IP's" +msgstr "" + msgid "Notice" msgstr "" +msgid "Number of last lines stored in log files" +msgstr "" + msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication." msgstr "" msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests." msgstr "" -msgid "OPTIONAL: Proxy-Server for detection and updates." +msgid "OPTIONAL: Network to use for communication" msgstr "" -msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." +msgid "OPTIONAL: Proxy-Server for detection and updates." msgstr "" -msgid "Old version of ddns-scripts installed" +msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'." msgstr "" msgid "On Error the script will retry the failed action after given time" @@ -360,6 +433,9 @@ msgstr "" msgid "Start / Stop" msgstr "" +msgid "Status directory" +msgstr "" + msgid "Stopped" msgstr "" @@ -374,6 +450,12 @@ msgstr "" msgid "Timer Settings" msgstr "" +msgid "To change global settings click here" +msgstr "" + +msgid "To use cURL activate this option." +msgstr "" + msgid "URL" msgstr "" @@ -394,6 +476,9 @@ msgstr "" msgid "Use HTTP Secure" msgstr "" +msgid "Use cURL" +msgstr "" + msgid "User defined script to read systems IP-Address" msgstr "" @@ -430,6 +515,9 @@ msgstr "" msgid "You should install GNU Wget with SSL (prefered) or cURL package." msgstr "" +msgid "You should install GNU Wget with SSL or cURL package." +msgstr "" + msgid "You should install GNU Wget with SSL or replace libcurl." msgstr "" @@ -463,10 +551,10 @@ msgstr "" msgid "file or directory not found or not 'IGNORE'" msgstr "" -msgid "hours" +msgid "help" msgstr "" -msgid "install update here" +msgid "hours" msgstr "" msgid "installed" @@ -529,6 +617,9 @@ msgstr "" msgid "please select 'IPv4' address version in" msgstr "" +msgid "please set to 'default'" +msgstr "" + msgid "proxy port missing" msgstr "" diff --git a/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua b/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua index 8cf35b79b6..c4be1818f2 100644 --- a/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua +++ b/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua @@ -30,7 +30,7 @@ function pwd.write(self, section, value) pass = value else local t = tonumber(nixio.getpid()*os.time()) - local salt = "$5$" .. t .. "$" + local salt = "$1$" .. t .. "$" pass = nixio.crypt(value, salt) end Value.write(self, section, pass) diff --git a/applications/luci-app-privoxy/Makefile b/applications/luci-app-privoxy/Makefile index 4c1fc578a8..bc2c57ee93 100644 --- a/applications/luci-app-privoxy/Makefile +++ b/applications/luci-app-privoxy/Makefile @@ -6,33 +6,33 @@ include $(TOPDIR)/rules.mk -# LuCI specific settings -LUCI_TITLE:=LuCI Support for Privoxy WEB proxy -LUCI_DEPENDS:=+luci-mod-admin-full +privoxy -LUCI_PKGARCH:=all - PKG_NAME:=luci-app-privoxy # Version == major.minor.patch # increase "minor" on new functionality and "patch" on patches/optimization -PKG_VERSION:=1.0.2 +PKG_VERSION:=1.0.3 # Release == build # increase on changes of translation files -PKG_RELEASE:=0 +PKG_RELEASE:=1 PKG_LICENSE:=Apache-2.0 PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com> +# LuCI specific settings +LUCI_TITLE:=LuCI Support for Privoxy WEB proxy +LUCI_DEPENDS:=+luci-mod-admin-full +privoxy +LUCI_PKGARCH:=all + define Package/$(PKG_NAME)/config # shown in make menuconfig <Help> help $(LUCI_TITLE) - - Version : $(PKG_VERSION)-$(PKG_RELEASE) - Maintainer: $(PKG_MAINTAINER) + . + Version: $(PKG_VERSION)-$(PKG_RELEASE) + $(PKG_MAINTAINER) endef -include ../../luci.mk +include $(TOPDIR)/feeds/luci/luci.mk # call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-privoxy/luasrc/controller/privoxy.lua b/applications/luci-app-privoxy/luasrc/controller/privoxy.lua index de73d0c5df..9ffc404ce9 100755 --- a/applications/luci-app-privoxy/luasrc/controller/privoxy.lua +++ b/applications/luci-app-privoxy/luasrc/controller/privoxy.lua @@ -7,26 +7,16 @@ local NX = require "nixio" local NXFS = require "nixio.fs" local HTTP = require "luci.http" local UCI = require "luci.model.uci" +local UTIL = require "luci.util" local SYS = require "luci.sys" PRIVOXY_MIN = "3.0.22-0" -- minimum version of service required function index() - local _sys = require "luci.sys" - local _verinst = _sys.exec([[opkg list-installed ]] .. "privoxy" .. [[ | cut -d " " -f 3 ]]) - local _cmd = [[opkg compare-versions "]] .. _verinst .. [[" ">=" "]] .. "3.0.22-0" .. [["]] - local _verok = tonumber(_sys.call(_cmd)) - - -- check config file and version - if not nixio.fs.access("/etc/config/privoxy") or (_verok == 0) then - entry( {"admin", "services", "privoxy"}, cbi("privoxy/apperror", - {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true }), _("Privoxy WEB proxy"), 59) - else - entry( {"admin", "services", "privoxy"}, cbi("privoxy/detail"), _("Privoxy WEB proxy"), 59) - entry( {"admin", "services", "privoxy", "logview"}, call("logread") ).leaf = true - entry( {"admin", "services", "privoxy", "startstop"}, call("startstop") ).leaf = true - entry( {"admin", "services", "privoxy", "status"}, call("get_pid") ).leaf = true - end + entry( {"admin", "services", "privoxy"}, cbi("privoxy"), _("Privoxy WEB proxy"), 59) + entry( {"admin", "services", "privoxy", "logview"}, call("logread") ).leaf = true + entry( {"admin", "services", "privoxy", "startstop"}, call("startstop") ).leaf = true + entry( {"admin", "services", "privoxy", "status"}, call("get_pid") ).leaf = true end -- called by XHR.get from detail_logview.htm @@ -80,18 +70,71 @@ function get_pid(from_lua) end end --- get the "name" of the current active theme -function get_theme() - local _uci = UCI.cursor() - local _base = _uci:get("luci", "main", "mediaurlbase") -- only pathname - _uci:unload("luci") +-- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>" +function ipkg_ver_compare(ver1, comp, ver2) + if not ver1 or not (#ver1 > 0) + or not ver2 or not (#ver2 > 0) + or not comp or not (#comp > 0) then return nil end + -- correct compare string + if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~=" + elseif comp == "<=" or comp == "<" or comp == "=<" then comp = "<=" + elseif comp == ">=" or comp == ">" or comp == "=>" then comp = ">=" + elseif comp == "=" or comp == "==" then comp = "==" + elseif comp == "<<" then comp = "<" + elseif comp == ">>" then comp = ">" + else return nil end + + local av1 = UTIL.split(ver1, "[%.%-]", nil, true) + local av2 = UTIL.split(ver2, "[%.%-]", nil, true) + + for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do + local s1 = av1[i] or "" + local s2 = av2[i] or "" + local n1 = tonumber(s1) + local n2 = tonumber(s2) + + -- one numeric and other empty string then set other to 0 + if n1 and not n2 and (not s2 or #s2 == 0) then n2 = 0 end + if n2 and not n1 and (not s1 or #s1 == 0) then n1 = 0 end - for k, v in pairs(luci.config.themes) do - if k:sub(1, 1) ~= "." and v == _base then - return k + local nc = (n1 and n2) -- numeric compare + + if nc then + -- first "not equal" found return true + if comp == "~=" and (n1 ~= n2) then return true end + -- first "lower" found return true + if (comp == "<" or comp == "<=") and (n1 < n2) then return true end + -- first "greater" found return true + if (comp == ">" or comp == ">=") and (n1 > n2) then return true end + -- not equal then return false + if (n1 ~= n2) then return false end + else + if comp == "~=" and (s1 ~= s2) then return true end + if (comp == "<" or comp == "<=") and (s1 < s2) then return true end + if (comp == ">" or comp == ">=") and (s1 > s2) then return true end + if (s1 ~= s2) then return false end end end - return nil + -- all equal then true + return true +end + +-- read version information for given package if installed +function ipkg_ver_installed(pkg) + local version = nil + local control = io.open("/usr/lib/opkg/info/%s.control" % pkg, "r") + if control then + local ln + repeat + ln = control:read("*l") + if ln and ln:match("^Version: ") then + version = ln:gsub("^Version: ", "") + break + end + until not ln + control:close() + end + return version end -- replacement of build-in Flag.parse of cbi.lua diff --git a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy/detail.lua b/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua index 2c846a1f99..c009313e3a 100755 --- a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy/detail.lua +++ b/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua @@ -1,37 +1,69 @@ --- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> +-- Copyright 2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Licensed under the Apache License, Version 2.0 local NXFS = require "nixio.fs" local SYS = require "luci.sys" local UTIL = require "luci.util" +local DISP = require "luci.dispatcher" local DTYP = require "luci.cbi.datatypes" local CTRL = require "luci.controller.privoxy" -- this application's controller -- Bootstrap theme needs 2 or 3 additional linefeeds for tab description for better optic -local LFLF = (CTRL.get_theme() == "Bootstrap") and [[<br /><br /><br />]] or [[]] local HELP = [[<a href="http://www.privoxy.org/user-manual/config.html#%s" target="_blank">%s</a>]] --- cbi-map -- ################################################################## -local m = Map("privoxy") -m.title = [[</a><a href="javascript:alert(']] +local VERINST = CTRL.ipkg_ver_installed("privoxy") +local VEROK = CTRL.ipkg_ver_compare(VERINST,">=",CTRL.PRIVOXY_MIN) + +local TITLE = [[</a><a href="javascript:alert(']] .. translate("Version Information") .. [[\n\nluci-app-privoxy]] .. [[\n\t]] .. translate("Version") .. [[:\t]] - .. SYS.exec([[opkg list-installed ]] .. [[luci-app-privoxy]] .. [[ | cut -d " " -f 3 ]]) + .. CTRL.ipkg_ver_installed("luci-app-privoxy") .. [[\n\nprivoxy ]] .. translate("required") .. [[:]] .. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.PRIVOXY_MIN .. [[ ]] .. translate("or higher") .. [[\n\nprivoxy ]] .. translate("installed") .. [[:]] - .. [[\n\t]] .. translate("Version") .. [[:\t]] - .. SYS.exec([[opkg list-installed ]] .. [[privoxy]] .. [[ | cut -d " " -f 3 ]]) + .. [[\n\t]] .. translate("Version") .. [[:\t]] .. VERINST .. [[\n\n]] .. [[')">]] .. translate("Privoxy WEB proxy") -m.description = translate("Privoxy is a non-caching web proxy with advanced filtering " + +local DESC = translate("Privoxy is a non-caching web proxy with advanced filtering " .. "capabilities for enhancing privacy, modifying web page data and HTTP headers, " .. "controlling access, and removing ads and other obnoxious Internet junk.") .. [[<br /><strong>]] .. translate("For help use link at the relevant option") .. [[</strong>]] + +-- Error handling if wrong privoxy version installed -- ######################## +if not nixio.fs.access("/etc/config/privoxy") or not VEROK then + local f = SimpleForm("_no_config") + f.title = TITLE + f.description = DESC + f.submit = false + f.reset = false + + local s = f:section(SimpleSection) + s.title = [[<font color="red">]] .. [[<strong>]] + .. translate("Software update required") + .. [[</strong>]] .. [[</font>]] + + local v = s:option(DummyValue, "_update_needed") + v.titleref = DISP.build_url("admin", "system", "packages") + v.rawhtml = true + v.value = [[<h3><strong><br /><br /> ]] + .. translate("The currently installed 'privoxy' package is not supported by LuCI application.") + .. [[<br /><br /> ]] + .. translate("required") .. ": " .. CTRL.PRIVOXY_MIN .. " *** ".. translate("installed") .. ": " .. VERINST + .. [[<br /><br /> ]] + .. translate("Please update to the current version!") + .. [[<br /><br /></strong></h3>]] + return f +end + +-- cbi-map -- ################################################################## +local m = Map("privoxy") +m.title = TITLE +m.description = DESC function m.commit_handler(self) if self.changed then -- changes ? os.execute("/etc/init.d/privoxy reload &") -- reload configuration @@ -45,8 +77,7 @@ ns:tab("local", translate("Local Set-up"), translate("If you intend to operate Privoxy for more users than just yourself, " .. "it might be a good idea to let them know how to reach you, what you block " - .. "and why you do that, your policies, etc.") - .. LFLF ) + .. "and why you do that, your policies, etc.") ) local function err_tab_local(title, msg) return string.format(translate("Local Set-up") .. " - %s: %s", title, msg ) end @@ -55,16 +86,14 @@ ns:tab("filter", translate("Files and Directories"), translate("Privoxy can (and normally does) use a number of other files " .. "for additional configuration, help and logging. This section of " - .. "the configuration file tells Privoxy where to find those other files.") - .. LFLF ) + .. "the configuration file tells Privoxy where to find those other files.") ) local function err_tab_filter(title, msg) return string.format(translate("Files and Directories") .. " - %s: %s", title, msg ) end ns:tab("access", translate("Access Control"), - translate("This tab controls the security-relevant aspects of Privoxy's configuration.") - .. LFLF ) + translate("This tab controls the security-relevant aspects of Privoxy's configuration.") ) local function err_tab_access(title, msg) return string.format(translate("Access Control") .. " - %s: %s", title, msg ) end @@ -73,8 +102,7 @@ ns:tab("forward", translate("Forwarding"), translate("Configure here the routing of HTTP requests through a chain of multiple proxies. " .. "Note that parent proxies can severely decrease your privacy level. " - .. "Also specified here are SOCKS proxies.") - .. LFLF ) + .. "Also specified here are SOCKS proxies.") ) ns:tab("misc", translate("Miscellaneous"), @@ -175,7 +203,7 @@ piu.optional = true piu.rmempty = true -- trust-info-url -------------------------------------------------------------- -local tiu = ns:taboption("local", DynamicList, "trust_info_url") +local tiu = ns:taboption("local", Value, "trust_info_url") tiu.title = string.format(HELP, "TRUST-INFO-URL", "Trust Info URLs" ) tiu.description = translate("A URL to be displayed in the error page that users will see if access to an untrusted page is denied.") .. [[<br /><strong>]] @@ -240,15 +268,15 @@ function cd.validate(self, value) end -- templdir -------------------------------------------------------------------- -local td = ns:taboption("filter", Value, "templdir") -td.title_base = "Template Directory" -td.title = string.format(HELP, "TEMPLDIR", td.title_base ) -td.description = translate("An alternative directory where the templates are loaded from.") +local tld = ns:taboption("filter", Value, "templdir") +tld.title_base = "Template Directory" +tld.title = string.format(HELP, "TEMPLDIR", tld.title_base ) +tld.description = translate("An alternative directory where the templates are loaded from.") .. [[<br />]] .. translate("No trailing '/', please.") -td.placeholder = "/etc/privoxy/templates" -td.rmempty = true -function td.validate(self, value) +tld.placeholder = "/etc/privoxy/templates" +tld.rmempty = true +function tld.validate(self, value) if not NXFS.access(value) then return nil, err_tab_filter(self.title_base, translate("Directory does not exist!") ) else @@ -256,6 +284,16 @@ function td.validate(self, value) end end +-- temporary-directory --------------------------------------------------------- +local td = ns:taboption("filter", Value, "temporary_directory") +td.title_base = "Temporary Directory" +td.title = string.format(HELP, "TEMPORARY-DIRECTORY", td.title_base ) +td.description = translate("A directory where Privoxy can create temporary files.") + .. [[<br /><strong>]] + .. translate("Only when using 'external filters', Privoxy has to create temporary files.") + .. [[</strong>]] +td.rmempty = true + -- actionsfile ----------------------------------------------------------------- local af = ns:taboption("filter", DynamicList, "actionsfile") af.title_base = "Action Files" @@ -343,7 +381,7 @@ tf.description = translate("The trust mechanism is an experimental feature for b .. [[<br /><strong>]] .. translate("It is NOT recommended for the casual user.") .. [[</strong>]] -tf.placeholder = "sites.trust" +tf.placeholder = "user.trust" tf.rmempty = true function tf.validate(self, value) local confdir = cd:formvalue(ns.section) @@ -767,133 +805,144 @@ function st.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d1 = ns:taboption("debug", Flag, "debug_1") -d1.title = string.format(HELP, "DEBUG", "Debug 1" ) -d1.description = translate("Log the destination for each request Privoxy let through. See also 'Debug 1024'.") +-- debug 1 --------------------------------------------------------------------- +local d0 = ns:taboption("debug", Flag, "debug_1") +d0.title = string.format(HELP, "DEBUG", "Debug 1" ) +d0.description = translate("Log the destination for each request Privoxy let through. See also 'Debug 1024'.") +d0.rmempty = true +function d0.parse(self, section) + CTRL.flag_parse(self, section) +end + +-- debug 2 --------------------------------------------------------------------- +local d1 = ns:taboption("debug", Flag, "debug_2") +d1.title = string.format(HELP, "DEBUG", "Debug 2" ) +d1.description = translate("Show each connection status") d1.rmempty = true function d1.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d2 = ns:taboption("debug", Flag, "debug_2") -d2.title = string.format(HELP, "DEBUG", "Debug 2" ) -d2.description = translate("Show each connection status") +-- debug 4 --------------------------------------------------------------------- +local d2 = ns:taboption("debug", Flag, "debug_4") +d2.title = string.format(HELP, "DEBUG", "Debug 4" ) +d2.description = translate("Show I/O status") d2.rmempty = true function d2.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d3 = ns:taboption("debug", Flag, "debug_4") -d3.title = string.format(HELP, "DEBUG", "Debug 4" ) -d3.description = translate("Show I/O status") +-- debug 8 --------------------------------------------------------------------- +local d3 = ns:taboption("debug", Flag, "debug_8") +d3.title = string.format(HELP, "DEBUG", "Debug 8" ) +d3.description = translate("Show header parsing") d3.rmempty = true function d3.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d4 = ns:taboption("debug", Flag, "debug_8") -d4.title = string.format(HELP, "DEBUG", "Debug 8" ) -d4.description = translate("Show header parsing") +-- debug 16 -------------------------------------------------------------------- +local d4 = ns:taboption("debug", Flag, "debug_16") +d4.title = string.format(HELP, "DEBUG", "Debug 16" ) +d4.description = translate("Log all data written to the network") d4.rmempty = true function d4.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d5 = ns:taboption("debug", Flag, "debug_16") -d5.title = string.format(HELP, "DEBUG", "Debug 16" ) -d5.description = translate("Log all data written to the network") +-- debug 32 -------------------------------------------------------------------- +local d5 = ns:taboption("debug", Flag, "debug_32") +d5.title = string.format(HELP, "DEBUG", "Debug 32" ) +d5.description = translate("Debug force feature") d5.rmempty = true function d5.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d6 = ns:taboption("debug", Flag, "debug_32") -d6.title = string.format(HELP, "DEBUG", "Debug 32" ) -d6.description = translate("Debug force feature") +-- debug 64 -------------------------------------------------------------------- +local d6 = ns:taboption("debug", Flag, "debug_64") +d6.title = string.format(HELP, "DEBUG", "Debug 64" ) +d6.description = translate("Debug regular expression filters") d6.rmempty = true function d6.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d7 = ns:taboption("debug", Flag, "debug_64") -d7.title = string.format(HELP, "DEBUG", "Debug 64" ) -d7.description = translate("Debug regular expression filters") +-- debug 128 ------------------------------------------------------------------- +local d7 = ns:taboption("debug", Flag, "debug_128") +d7.title = string.format(HELP, "DEBUG", "Debug 128" ) +d7.description = translate("Debug redirects") d7.rmempty = true function d7.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d8 = ns:taboption("debug", Flag, "debug_128") -d8.title = string.format(HELP, "DEBUG", "Debug 128" ) -d8.description = translate("Debug redirects") +-- debug 256 ------------------------------------------------------------------- +local d8 = ns:taboption("debug", Flag, "debug_256") +d8.title = string.format(HELP, "DEBUG", "Debug 256" ) +d8.description = translate("Debug GIF de-animation") d8.rmempty = true function d8.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d9 = ns:taboption("debug", Flag, "debug_256") -d9.title = string.format(HELP, "DEBUG", "Debug 256" ) -d9.description = translate("Debug GIF de-animation") +-- debug 512 ------------------------------------------------------------------- +local d9 = ns:taboption("debug", Flag, "debug_512") +d9.title = string.format(HELP, "DEBUG", "Debug 512" ) +d9.description = translate("Common Log Format") d9.rmempty = true function d9.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d10 = ns:taboption("debug", Flag, "debug_512") -d10.title = string.format(HELP, "DEBUG", "Debug 512" ) -d10.description = translate("Common Log Format") +-- debug 1024 ------------------------------------------------------------------ +local d10 = ns:taboption("debug", Flag, "debug_1024") +d10.title = string.format(HELP, "DEBUG", "Debug 1024" ) +d10.description = translate("Log the destination for requests Privoxy didn't let through, and the reason why.") d10.rmempty = true function d10.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d11 = ns:taboption("debug", Flag, "debug_1024") -d11.title = string.format(HELP, "DEBUG", "Debug 1024" ) -d11.description = translate("Log the destination for requests Privoxy didn't let through, and the reason why.") +-- debug 2048 ------------------------------------------------------------------ +local d11 = ns:taboption("debug", Flag, "debug_2048") +d11.title = string.format(HELP, "DEBUG", "Debug 2048" ) +d11.description = translate("CGI user interface") d11.rmempty = true function d11.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d12 = ns:taboption("debug", Flag, "debug_2048") -d12.title = string.format(HELP, "DEBUG", "Debug 2048" ) -d12.description = translate("CGI user interface") +-- debug 4096 ------------------------------------------------------------------ +local d12 = ns:taboption("debug", Flag, "debug_4096") +d12.title = string.format(HELP, "DEBUG", "Debug 4096" ) +d12.description = translate("Startup banner and warnings.") d12.rmempty = true function d12.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d13 = ns:taboption("debug", Flag, "debug_4096") -d13.title = string.format(HELP, "DEBUG", "Debug 4096" ) -d13.description = translate("Startup banner and warnings.") +-- debug 8192 ------------------------------------------------------------------ +local d13 = ns:taboption("debug", Flag, "debug_8192") +d13.title = string.format(HELP, "DEBUG", "Debug 8192" ) +d13.description = translate("Non-fatal errors - *we highly recommended enabling this*") d13.rmempty = true function d13.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- -local d14 = ns:taboption("debug", Flag, "debug_8192") -d14.title = string.format(HELP, "DEBUG", "Debug 8192" ) -d14.description = translate("Non-fatal errors - *we highly recommended enabling this*") +-- debug 16384 ----------------------------------------------------------------- +--[[ TODO ??? +local d14 = ns:taboption("debug", Flag, "debug_16384") +d14.title = string.format(HELP, "DEBUG", "Debug 16384" ) +d14.description = translate("") d14.rmempty = true function d14.parse(self, section) CTRL.flag_parse(self, section) end +]]-- --- debug ----------------------------------------------------------------------- +-- debug 32768 ----------------------------------------------------------------- local d15 = ns:taboption("debug", Flag, "debug_32768") d15.title = string.format(HELP, "DEBUG", "Debug 32768" ) d15.description = translate("Log all data read from the network") @@ -902,7 +951,7 @@ function d15.parse(self, section) CTRL.flag_parse(self, section) end --- debug ----------------------------------------------------------------------- +-- debug 65536 ----------------------------------------------------------------- local d16 = ns:taboption("debug", Flag, "debug_65536") d16.title = string.format(HELP, "DEBUG", "Debug 65536" ) d16.description = translate("Log the applying actions") diff --git a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy/apperror.lua b/applications/luci-app-privoxy/luasrc/model/cbi/privoxy/apperror.lua deleted file mode 100755 index fcbb88074d..0000000000 --- a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy/apperror.lua +++ /dev/null @@ -1,47 +0,0 @@ --- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> --- Licensed under the Apache License, Version 2.0 - -local CTRL = require "luci.controller.privoxy" -- this application's controller -local DISP = require "luci.dispatcher" -local SYS = require "luci.sys" - -local HELP = [[<a href="http://www.privoxy.org/user-manual/config.html#%s" target="_blank">%s</a>]] - --- cbi-map -- ################################################################## -local m = Map("privoxy") -m.title = [[</a><a href="javascript:alert(']] - .. translate("Version Information") - .. [[\n\nluci-app-privoxy]] - .. [[\n\t]] .. translate("Version") .. [[:\t]] - .. SYS.exec([[opkg list-installed ]] .. [[luci-app-privoxy]] .. [[ | cut -d " " -f 3 ]]) - .. [[\n\nprivoxy ]] .. translate("required") .. [[:]] - .. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.PRIVOXY_MIN .. [[ ]] .. translate("or higher") - .. [[\n\nprivoxy ]] .. translate("installed") .. [[:]] - .. [[\n\t]] .. translate("Version") .. [[:\t]] - .. SYS.exec([[opkg list-installed ]] .. [[privoxy]] .. [[ | cut -d " " -f 3 ]]) - .. [[\n\n]] - .. [[')">]] - .. translate("Privoxy WEB proxy") -m.description = translate("Privoxy is a non-caching web proxy with advanced filtering " - .. "capabilities for enhancing privacy, modifying web page data and HTTP headers, " - .. "controlling access, and removing ads and other obnoxious Internet junk.") - --- cbi-section -- ############################################################## -local s = m:section(SimpleSection) -s.title = [[<font color="red">]] .. [[<strong>]] - .. translate("Software update required") - .. [[</strong>]] .. [[</font>]] - --- old privoxy sofware version -------------------------------------------------------------- -local v = s:option(DummyValue, "_update_needed") -v.titleref = DISP.build_url("admin", "system", "packages") -v.rawhtml = true ---v.title = [[<h3>]] .. [[<font color="red">]] .. [[<strong>]] --- .. translate("Software update required") --- .. [[</strong>]] .. [[</font>]] .. [[</h3>]] .. [[<br />]] -v.value = [[<h3>]] .. [[<strong>]] - .. translate("The currently installed 'privoxy' package is not supported by LuCI application.") - .. [[<br />]] - .. translate("Please update to the current version!") - .. [[</strong>]] .. [[</h3>]] -return m diff --git a/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua b/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua index 329341ddc4..c532b4a6d3 100644 --- a/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua +++ b/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua @@ -150,7 +150,6 @@ function statistics_render() if png then luci.http.prepare_content("image/png") l12.pump.all(l12.source.file(png), luci.http.write) - png:close() end return end diff --git a/applications/luci-app-upnp/luasrc/controller/upnp.lua b/applications/luci-app-upnp/luasrc/controller/upnp.lua index 8fc697fd6a..790bf29d8c 100644 --- a/applications/luci-app-upnp/luasrc/controller/upnp.lua +++ b/applications/luci-app-upnp/luasrc/controller/upnp.lua @@ -19,7 +19,7 @@ function index() end function act_status() - local ipt = io.popen("iptables --line-numbers -t nat -xnvL MINIUPNPD") + local ipt = io.popen("iptables --line-numbers -t nat -xnvL MINIUPNPD 2>/dev/null") if ipt then local fwd = { } while true do |