Merge pull request #325 from chris5560/master-app-ddns

luci-app-ddns: update to version 2.2.0-1
This commit is contained in:
Jo-Philipp Wich 2015-02-28 13:25:57 +01:00
commit f47be40cd4
12 changed files with 538 additions and 101 deletions

View file

@ -9,16 +9,17 @@ 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
LUCI_PKGARCH:=all
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.0
# 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>

View file

@ -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"

View file

@ -5,7 +5,7 @@
-- 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,22 @@ 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 LFLF = (DDNS.get_theme() == "Bootstrap") and [[<br /><br />]] or [[]]
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 +137,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 +348,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 +769,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 +859,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 +1230,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")

View file

@ -0,0 +1,159 @@
-- 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
-- Bootstrap theme needs 2 or 3 additional linefeeds for tab description for better optic
local LFLF = (DDNS.get_theme() == "Bootstrap") and [[<br /><br />]] or [[]]
-- 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>]]
.. LFLF )
-- 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

View file

@ -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")

View file

@ -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

View file

@ -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
@ -121,6 +121,20 @@ function ipkg_ver_installed(pkg)
return nil
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")
for k, v in pairs(luci.config.themes) do
if k:sub(1, 1) ~= "." and v == _base then
return k
end
end
return nil
end
-- replacement of build-in read of UCI option
-- modified AbstractValue.cfgvalue(self, section) from cbi.lua
-- needed to read from other option then current value definition

View file

@ -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'), '&nbsp;&nbsp;&nbsp;&nbsp;');
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 ++ -->

View file

@ -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); }
}
);

View file

@ -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">

View file

@ -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"
@ -270,6 +324,13 @@ msgstr ""
"Wenn deaktiviert kann die Aktualisierung nicht gestartet werden.<br />Weder "
"ü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 ""
@ -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,12 +373,25 @@ 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"
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."
@ -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"

View file

@ -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,11 +257,19 @@ 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,12 +303,23 @@ msgstr ""
msgid "Log File Viewer"
msgstr ""
msgid "Log directory"
msgstr ""
msgid "Log length"
msgstr ""
msgid "Log to file"
msgstr ""
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."
@ -276,24 +343,30 @@ 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: Network to use for communication"
msgstr ""
msgid "OPTIONAL: Proxy-Server for detection and updates."
msgstr ""
msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
msgstr ""
msgid "Old version of ddns-scripts installed"
msgstr ""
msgid "On Error the script will retry the failed action after given time"
msgstr ""
@ -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 ""