summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-ddns/luasrc
diff options
context:
space:
mode:
Diffstat (limited to 'applications/luci-app-ddns/luasrc')
-rw-r--r--applications/luci-app-ddns/luasrc/controller/ddns.lua45
-rw-r--r--applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua2
-rw-r--r--applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua3
-rw-r--r--applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua16
-rw-r--r--applications/luci-app-ddns/luasrc/tools/ddns.lua42
-rw-r--r--applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm2
-rw-r--r--applications/luci-app-ddns/luasrc/view/ddns/detail_value.htm2
-rw-r--r--applications/luci-app-ddns/luasrc/view/ddns/overview_startstop.htm2
-rw-r--r--applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm36
-rw-r--r--applications/luci-app-ddns/luasrc/view/ddns/system_status.htm7
10 files changed, 62 insertions, 95 deletions
diff --git a/applications/luci-app-ddns/luasrc/controller/ddns.lua b/applications/luci-app-ddns/luasrc/controller/ddns.lua
index 3cd52e5e3c..56d2b66e21 100644
--- a/applications/luci-app-ddns/luasrc/controller/ddns.lua
+++ b/applications/luci-app-ddns/luasrc/controller/ddns.lua
@@ -15,19 +15,21 @@ local SYS = require "luci.sys"
local DDNS = require "luci.tools.ddns" -- ddns multiused functions
local UTIL = require "luci.util"
-local luci_ddns_version = "2.1.0-4" -- luci-app-ddns / openwrt Makefile compatible version
-local ddns_scripts_min = "2.1.0-3" -- minimum version of ddns-scripts required
+DDNS_MIN = "2.1.0-2" -- minimum version of service required
function index()
- -- no services_ipv6 file or no dynamic_dns_lucihelper.sh
- -- do NOT start
- if not nixio.fs.access("/usr/lib/ddns/services_ipv6")
- or not nixio.fs.access("/usr/lib/ddns/dynamic_dns_lucihelper.sh") then
+ local nxfs = require "nixio.fs" -- global definitions not available
+ local sys = require "luci.sys" -- in function index()
+ local ddns = require "luci.tools.ddns" -- ddns multiused functions
+ local verinst = ddns.ipkg_ver_installed("ddns-scripts")
+ local verok = ddns.ipkg_ver_compare(verinst, ">=", "2.0.0-0")
+ -- do NOT start it not ddns-scripts version 2.x
+ if not verok then
return
end
-- no config create an empty one
- if not nixio.fs.access("/etc/config/ddns") then
- nixio.fs.writefile("/etc/config/ddns", "")
+ if not nxfs.access("/etc/config/ddns") then
+ nxfs.writefile("/etc/config/ddns", "")
end
entry( {"admin", "services", "ddns"}, cbi("ddns/overview"), _("Dynamic DNS"), 59)
@@ -44,17 +46,11 @@ local function _get_status()
local uci = UCI.cursor()
local service = SYS.init.enabled("ddns") and 1 or 0
local url_start = DISP.build_url("admin", "system", "startup")
- local luci_build = DDNS.ipkg_version("luci-app-ddns").version
- local ddns_act = DDNS.ipkg_version("ddns-scripts").version
local data = {} -- Array to transfer data to javascript
data[#data+1] = {
enabled = service, -- service enabled
url_up = url_start, -- link to enable DDS (System-Startup)
- luci_ver = luci_ddns_version, -- luci-app-ddns / openwrt Makefile compatible version
- luci_build = luci_build, -- installed luci build
- script_min = ddns_scripts_min, -- minimum version of ddns-scripts needed
- script_ver = ddns_act -- installed ddns-scripts
}
uci:foreach("ddns", "service", function (s)
@@ -63,8 +59,8 @@ local function _get_status()
-- and enabled state
local section = s[".name"]
local enabled = tonumber(s["enabled"]) or 0
- local datelast = "_empty_" -- formated date of last update
- local datenext = "_empty_" -- formated date of next update
+ local datelast = "_empty_" -- formatted date of last update
+ local datenext = "_empty_" -- formatted date of next update
-- get force seconds
local force_seconds = DDNS.calc_seconds(
@@ -182,7 +178,7 @@ function startstop(section, enabled)
return
end
- -- read uncommited changes
+ -- read uncommitted changes
-- we don't save and commit data from other section or other options
-- only enabled will be done
local exec = true
@@ -210,9 +206,9 @@ function startstop(section, enabled)
end
-- we can not execute because other
- -- uncommited changes pending, so exit here
+ -- uncommitted changes pending, so exit here
if not exec then
- HTTP.write("_uncommited_")
+ HTTP.write("_uncommitted_")
return
end
@@ -238,14 +234,3 @@ function status()
HTTP.prepare_content("application/json")
HTTP.write_json(data)
end
-
--- check if installed ddns-scripts version < required version
-function update_needed()
- local sver = DDNS.ipkg_version("ddns-scripts")
- local rver = UTIL.split(ddns_scripts_min, "[%.%-]", nil, true)
- return (sver.major < (tonumber(rver[1]) or 0))
- or (sver.minor < (tonumber(rver[2]) or 0))
- or (sver.patch < (tonumber(rver[3]) or 0))
- or (sver.build < (tonumber(rver[4]) or 0))
-end
-
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 057b8c8aa2..77753c03a7 100644
--- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua
+++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua
@@ -22,7 +22,7 @@ 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
+has_force = has_ssl and has_dnstcp -- Force IP Protocoll
-- html constants -- ###########################################################
font_red = "<font color='red'>"
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 15da0289f1..009ba99eb8 100644
--- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua
+++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua
@@ -11,7 +11,8 @@ local DDNS = require "luci.tools.ddns" -- ddns multiused functions
has_ssl = DDNS.check_ssl() -- HTTPS support
has_proxy = DDNS.check_proxy() -- Proxy support
has_dnstcp = DDNS.check_bind_host() -- DNS TCP support
-need_update = CTRL.update_needed() -- correct ddns-scripts version
+-- correct ddns-scripts version
+need_update = DDNS.ipkg_ver_compare(DDNS.ipkg_ver_installed("ddns-scripts"), "<<", CTRL.DDNS_MIN)
-- html constants
font_red = [[<font color="red">]]
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 2944ec52f9..83b10e9366 100644
--- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
+++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
@@ -14,7 +14,8 @@ show_hints = not (DDNS.check_ipv6() -- IPv6 support
and DDNS.check_proxy() -- Proxy support
and DDNS.check_bind_host() -- DNS TCP support
)
-need_update = CTRL.update_needed() -- correct ddns-scripts version
+-- correct ddns-scripts version
+need_update = DDNS.ipkg_ver_compare(DDNS.ipkg_ver_installed("ddns-scripts"), "<<", CTRL.DDNS_MIN)
-- html constants
font_red = [[<font color="red">]]
@@ -28,8 +29,17 @@ 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="#" onclick="onclick_maptitle();">]] ..
- translate("Dynamic DNS")
+m.title = [[</a><a href="javascript:alert(']]
+ .. translate("Version Information")
+ .. [[\n\nluci-app-ddns]]
+ .. [[\n\t]] .. translate("Version") .. [[:\t]] .. DDNS.ipkg_ver_installed("luci-app-ddns")
+ .. [[\n\nddns-scripts ]] .. translate("required") .. [[:]]
+ .. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.DDNS_MIN .. [[ ]] .. translate("or higher")
+ .. [[\n\nddns-scripts ]] .. translate("installed") .. [[:]]
+ .. [[\n\t]] .. translate("Version") .. [[:\t]] .. DDNS.ipkg_ver_installed("ddns-scripts")
+ .. [[\n\n]]
+ .. [[')">]]
+ .. translate("Dynamic DNS")
m.description = translate("Dynamic DNS allows that your router can be reached with " ..
"a fixed hostname while having a dynamically changing " ..
diff --git a/applications/luci-app-ddns/luasrc/tools/ddns.lua b/applications/luci-app-ddns/luasrc/tools/ddns.lua
index 5c8ced50b3..2fbcff8bad 100644
--- a/applications/luci-app-ddns/luasrc/tools/ddns.lua
+++ b/applications/luci-app-ddns/luasrc/tools/ddns.lua
@@ -96,33 +96,29 @@ function get_pid(section)
return pid
end
--- read version information for given package if installed
-function ipkg_version(package)
- if not package then
+-- 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
- local info = OPKG.info(package)
- local data = {}
- local version = ""
- local i = 0
- for k, v in pairs(info) do
- if v.Package == package and v.Status.installed then
- version = v.Version
- i = i + 1
- end
+ return (tonumber(SYS.call(
+ [[opkg compare-versions "]] .. ver1 .. [[" "]] .. comp .. [[" "]] .. ver2 .. [["]]
+ )) == 1)
+end
+
+-- read version information for given package if installed
+function ipkg_ver_installed(pkg)
+ if not pkg then
+ return nil
end
- if i > 1 then -- more then one valid record
- return data
+ -- 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
end
- local sver = UTIL.split(version, "[%.%-]", nil, true)
- data = {
- version = version,
- major = tonumber(sver[1]) or 0,
- minor = tonumber(sver[2]) or 0,
- patch = tonumber(sver[3]) or 0,
- build = tonumber(sver[4]) or 0
- }
- return data
+ return nil
end
-- replacement of build-in read of UCI option
diff --git a/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm b/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm
index d516837b2b..0bcfd44283 100644
--- a/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm
+++ b/applications/luci-app-ddns/luasrc/view/ddns/detail_lvalue.htm
@@ -1,6 +1,6 @@
<!-- ++ BEGIN ++ Dynamic DNS ++ detail_lvalue.htm ++ -->
-<!-- no value header to supress next line -->
+<!-- no value header to suppress next line -->
&#160;
<% if self.widget == "select" then %>
<select class="cbi-input-select" onchange="cbi_d_update(this.id)"<%= attr("id", cbid) .. attr("name", cbid) .. ifattr(self.size, "size") %>>
diff --git a/applications/luci-app-ddns/luasrc/view/ddns/detail_value.htm b/applications/luci-app-ddns/luasrc/view/ddns/detail_value.htm
index 7cb28e282e..cbe76abc6e 100644
--- a/applications/luci-app-ddns/luasrc/view/ddns/detail_value.htm
+++ b/applications/luci-app-ddns/luasrc/view/ddns/detail_value.htm
@@ -5,5 +5,5 @@
attr("name", cbid) .. attr("id", cbid) .. attr("value", self:cfgvalue(section) or self.default) ..
ifattr(self.size, "size") .. ifattr(self.placeholder, "placeholder")
%> />
-<!-- no value footer to supress next line -->
+<!-- no value footer to suppress next line -->
<!-- ++ END ++ Dynamic DNS ++ detail_value.htm ++ -->
diff --git a/applications/luci-app-ddns/luasrc/view/ddns/overview_startstop.htm b/applications/luci-app-ddns/luasrc/view/ddns/overview_startstop.htm
index 8255aa63f3..327028cbea 100644
--- a/applications/luci-app-ddns/luasrc/view/ddns/overview_startstop.htm
+++ b/applications/luci-app-ddns/luasrc/view/ddns/overview_startstop.htm
@@ -6,7 +6,7 @@
-- We need to garantie that function cfgvalue run first to set missing parameters
%>
<!-- style="font-size: 100%;" needed for openwrt theme to fix font size -->
- <!-- type="button" onclick="..." enable standard onclick functionalty -->
+ <!-- type="button" onclick="..." enable standard onclick functionality -->
<input class="cbi-button cbi-input-<%=self.inputstyle or "button" %>" style="font-size: 100%;" type="button" onclick="onclick_startstop(this.id)"
<%=
attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled")
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 37c54be25f..6cca0e75d9 100644
--- a/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm
+++ b/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm
@@ -2,12 +2,6 @@
<!-- ++ BEGIN ++ Dynamic DNS ++ overview_status.htm ++ -->
<script type="text/javascript">//<![CDATA[
- // variables to store version information
- var luci_version
- var luci_build
- var ddns_version
- var ddns_required
-
// helper to extract section from objects id
// cbi.ddns.SECTION._xyz
function _id2section(id) {
@@ -19,13 +13,6 @@
// screen objects
// called by XHR.poll and onclick_startstop
function _data2elements(data) {
- // DDNS Service
- // fill Version informations
- luci_version = data[0].luci_ver
- luci_build = data[0].luci_build
- ddns_version = data[0].script_ver
- ddns_required = data[0].script_min
-
// Service sections
for( i = 1; i < data.length; i++ )
{
@@ -135,27 +122,13 @@
}
}
- // event handler for map.title link
- function onclick_maptitle() {
- var str = "<%:Version Information%>";
- str += "\n\nluci-app-ddns:";
- str += "\n\t<%:Version%>:\t" + luci_version;
- str += "\n\t<%:Build%>:\t" + luci_build;
- str += "\n\nddns-scripts <%:required%>:";
- str += "\n\t<%:Version%>:\t" + ddns_required + " <%:or greater%>";
- str += "\n\nddns-scripts <%:installed%>:";
- str += "\n\t<%:Version%>:\t" + ddns_version;
- str += "\n\n"
- alert(str);
- }
-
// event handler for start/stop button
function onclick_startstop(id) {
// extract section
var section = _id2section(id);
// get elements
var cbx = document.getElementById("cbid.ddns." + section + ".enabled"); // Enabled
- var obj = document.getElementById("cbi-ddns-overview-status-legend"); // objext defined below to make in-/visible
+ var obj = document.getElementById("cbi-ddns-overview-status-legend"); // object defined below to make in-/visible
if ( !(obj && cbx) ) { return; } // security check
// make me visible
@@ -165,7 +138,7 @@
var btnXHR = new XHR();
btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "startstop")%>/' + section + '/' + cbx.checked, null,
function(x, data) {
- if (x.responseText == "_uncommited_") {
+ if (x.responseText == "_uncommitted_") {
// we need a trick to display Ampersand "&" in stead of "&#38;" or "&amp;"
// after translation
txt="<%:Please [Save & Apply] your changes first%>";
@@ -182,8 +155,9 @@
);
}
+ var ddns_ov_XHR = new XHR();
// force to immediate show status on page load (not waiting for XHR.poll)
- XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ ddns_ov_XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
_data2elements(data);
}
@@ -192,7 +166,7 @@
// 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
- XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ ddns_ov_XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, 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 db9d1d1a01..7c60726e24 100644
--- a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm
+++ b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm
@@ -106,7 +106,7 @@
break;
}
- // monitored interfacce
+ // monitored interface
if (data[i].iface == "_nonet_")
tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
else
@@ -125,14 +125,15 @@
}
}
+ var ddns_status_XHR = new XHR();
// force to immediate show status (not waiting for XHR.poll)
- XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ ddns_status_XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
_data2elements(x, data);
}
);
- XHR.poll(10, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+ ddns_status_XHR.poll(10, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
function(x, data) {
_data2elements(x, data);
}