luci-app-ddns: Update to support ddns-scripts 2.1.0-3

- modified controller
-- remove support for ddns-scripts Version 1.x
-- ddns-scripts not correctly installed do not start
-- no config file create an empty one
- moved log settings to advanced tab
- set default syslog level "Notice"
- removed special handling for dynamic_dns_helper.sh in postinst

Signed-off-by: Christian Schoenebeck <christian.schoenebeck@gmail.com>
This commit is contained in:
Christian Schoenebeck 2014-12-07 21:31:57 +01:00
parent 91532de617
commit 61c6c67ae6
8 changed files with 63 additions and 203 deletions

View file

@ -1,3 +1,16 @@
Version: 2.1.0-3
Date: 2014-12-07
ddns-scripts: 2.1.0-2 or greater needed
- modified controller
- remove support for ddns-scripts Version 1.x
- ddns-scripts not correctly installed do not start
- no config file create an empty one
- moved log settings to advanced tab
- set default syslog level "Notice"
- removed special handling for dynamic_dns_helper.sh in postinst
--------------------------------------------------------------------------------
Version: 2.1.0-2
Date: 2014-11-15
ddns-scripts: 2.1.0-2 or greater needed

View file

@ -1,10 +1,5 @@
#!/bin/sh
[ -n "${IPKG_INSTROOT}" ] || {
# luci updates are not in sync with ddns-script updates !!!
# needed because luci update might delete helper script
# copy dynamic_dns_helper.tmp.sh from ddns-scripts
cp -f /usr/lib/ddns/dynamic_dns_lucihelper.tmp.sh /usr/lib/ddns/dynamic_dns_lucihelper.sh
( . /etc/uci-defaults/luci-ddns ) && rm -f /etc/uci-defaults/luci-ddns
exit 0
}

View file

@ -1,10 +1,5 @@
#!/bin/sh
[ -n "${IPKG_INSTROOT}" ] || {
# luci updates are not in sync with ddns-script updates !!!
# needed because luci update might delete helper script
# copy dynamic_dns_helper.tmp.sh from ddns-scripts
cp -f /usr/lib/ddns/dynamic_dns_lucihelper.tmp.sh /usr/lib/ddns/dynamic_dns_lucihelper.sh
( . /etc/uci-defaults/luci-ddns ) && rm -f /etc/uci-defaults/luci-ddns
exit 0
}

View file

@ -25,35 +25,28 @@ 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-2" -- luci-app-ddns / openwrt Makefile compatible version
local luci_ddns_version = "2.1.0-3" -- luci-app-ddns / openwrt Makefile compatible version
local ddns_scripts_min = "2.1.0-2" -- minimum version of ddns-scripts required
function index()
-- above 'require "mod"' definitions are not recognized
-- inside index() during initialisation
-- no configuration file, don't start
if not nixio.fs.access("/etc/config/ddns") then
-- 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
return
end
-- ddns-scripts 1.0.0 installed, run old luci app
if not nixio.fs.access("/usr/lib/ddns/services_ipv6")
or nixio.fs.access("/usr/lib/ddns/url_escape.sed") then
local page
page = entry({"admin", "services", "ddns"}, cbi("ddns/ddns"), _("Dynamic DNS"), 60)
page.dependent = true
page = entry({"mini", "network", "ddns"}, cbi("ddns/ddns", {autoapply=true}), _("Dynamic DNS"), 60)
page.dependent = true
-- it looks like ddns-scripts 2.x.x are installed
else
entry( {"admin", "services", "ddns"}, cbi("ddns/overview"), _("Dynamic DNS"), 59)
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", "logview"}, call("logread") ).leaf = true
entry( {"admin", "services", "ddns", "startstop"}, call("startstop") ).leaf = true
entry( {"admin", "services", "ddns", "status"}, call("status") ).leaf = true
-- no config create an empty one
if not nixio.fs.access("/etc/config/ddns") then
nixio.fs.writefile("/etc/config/ddns", "")
end
entry( {"admin", "services", "ddns"}, cbi("ddns/overview"), _("Dynamic DNS"), 59)
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", "logview"}, call("logread") ).leaf = true
entry( {"admin", "services", "ddns", "startstop"}, call("startstop") ).leaf = true
entry( {"admin", "services", "ddns", "status"}, call("status") ).leaf = true
end
-- function to read all sections status and return data array

View file

@ -1,135 +0,0 @@
--[[
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
]]--
require("luci.tools.webadmin")
m = Map("ddns", translate("Dynamic DNS"),
translate("Dynamic DNS allows that your router can be reached with " ..
"a fixed hostname while having a dynamically changing " ..
"IP address."))
s = m:section(TypedSection, "service", "")
s.addremove = true
s.anonymous = false
s:option(Flag, "enabled", translate("Enable"))
interface = s:option(ListValue, "interface", translate("Event interface"), translate("Network on which the ddns-updater scripts will be started"))
luci.tools.webadmin.cbi_add_networks(interface)
interface.default = "wan"
svc = s:option(ListValue, "service_name", translate("Service"))
svc.rmempty = false
svc.default = "dyndns.org"
local services = { }
local fd = io.open("/usr/lib/ddns/services", "r")
if fd then
local ln
repeat
ln = fd:read("*l")
local s = ln and ln:match('^%s*"([^"]+)"')
if s then services[#services+1] = s end
until not ln
fd:close()
end
local v
for _, v in luci.util.vspairs(services) do
svc:value(v)
end
function svc.cfgvalue(...)
local v = Value.cfgvalue(...)
if not v or #v == 0 then
return "-"
else
return v
end
end
function svc.write(self, section, value)
if value == "-" then
m.uci:delete("ddns", section, self.option)
else
Value.write(self, section, value)
end
end
svc:value("-", "-- "..translate("custom").." --")
local url = s:option(Value, "update_url", translate("Custom update-URL"))
url:depends("service_name", "-")
url.rmempty = true
local hostname = s:option(Value, "domain", translate("Hostname"))
hostname.rmempty = true
hostname.default = "mypersonaldomain.dyndns.org"
hostname.datatype = "host"
local username = s:option(Value, "username", translate("Username"))
username.rmempty = true
local pw = s:option(Value, "password", translate("Password"))
pw.rmempty = true
pw.password = true
require("luci.tools.webadmin")
local src = s:option(ListValue, "ip_source",
translate("Source of IP address"))
src.default = "network"
src:value("network", translate("network"))
src:value("interface", translate("interface"))
src:value("web", translate("URL"))
local iface = s:option(ListValue, "ip_network", translate("Network"))
iface:depends("ip_source", "network")
iface.rmempty = true
iface.default = "wan"
luci.tools.webadmin.cbi_add_networks(iface)
iface = s:option(ListValue, "ip_interface", translate("Interface"))
iface:depends("ip_source", "interface")
iface.rmempty = true
for k, v in pairs(luci.sys.net.devices()) do
iface:value(v)
end
local web = s:option(Value, "ip_url", translate("URL"))
web:depends("ip_source", "web")
web.default = "http://checkip.dyndns.com/"
web.rmempty = true
local ci = s:option(Value, "check_interval", translate("Check for changed IP every"))
ci.datatype = "and(uinteger,min(1))"
ci.default = 10
local unit = s:option(ListValue, "check_unit", translate("Check-time unit"))
unit.default = "minutes"
unit:value("minutes", translate("min"))
unit:value("hours", translate("h"))
fi = s:option(Value, "force_interval", translate("Force update every"))
fi.datatype = "and(uinteger,min(1))"
fi.default = 72
local unit = s:option(ListValue, "force_unit", translate("Force-time unit"))
unit.default = "hours"
unit:value("minutes", translate("min"))
unit:value("hours", translate("h"))
return m

View file

@ -468,29 +468,6 @@ if has_ssl then
end
end
-- use_syslog -- ###############################################################
slog = ns:taboption("basic", ListValue, "use_syslog",
translate("Log to syslog"),
translate("Writes log messages to syslog. Critical Errors will always be written to syslog.") )
slog.default = "0"
slog:value("0", translate("No logging"))
slog:value("1", translate("Info"))
slog:value("2", translate("Notice"))
slog:value("3", translate("Warning"))
slog:value("4", translate("Error"))
-- use_logfile (NEW) -- ########################################################
logf = ns:taboption("basic", Flag, "use_logfile",
translate("Log to file"),
translate("Writes detailed messages to log file. File will be truncated automatically.") .. "<br />" ..
translate("File") .. [[: "]] .. log_dir .. [[/]] .. section .. [[.log"]] )
logf.orientation = "horizontal"
logf.rmempty = false -- we want to save in /etc/config/ddns file on "0" because
logf.default = "1" -- if not defined write to log by default
function logf.parse(self, section)
DDNS.flag_parse(self, section)
end
-- TAB: Advanced ##################################################################################
-- IPv4 - ip_source -- #########################################################
src4 = ns:taboption("advanced", ListValue, "ipv4_source",
@ -1027,6 +1004,29 @@ if has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then
end
end
-- use_syslog -- ###############################################################
slog = ns:taboption("advanced", ListValue, "use_syslog",
translate("Log to syslog"),
translate("Writes log messages to syslog. Critical Errors will always be written to syslog.") )
slog.default = "2"
slog:value("0", translate("No logging"))
slog:value("1", translate("Info"))
slog:value("2", translate("Notice"))
slog:value("3", translate("Warning"))
slog:value("4", translate("Error"))
-- use_logfile (NEW) -- ########################################################
logf = ns:taboption("advanced", Flag, "use_logfile",
translate("Log to file"),
translate("Writes detailed messages to log file. File will be truncated automatically.") .. "<br />" ..
translate("File") .. [[: "]] .. log_dir .. [[/]] .. section .. [[.log"]] )
logf.orientation = "horizontal"
logf.rmempty = false -- we want to save in /etc/config/ddns file on "0" because
logf.default = "1" -- if not defined write to log by default
function logf.parse(self, section)
DDNS.flag_parse(self, section)
end
-- TAB: Timer #####################################################################################
-- check_interval -- ###########################################################
ci = ns:taboption("timer", Value, "check_interval",
@ -1148,9 +1148,8 @@ rc = ns:taboption("timer", Value, "retry_count",
rc.default = 5
rc.rmempty = false -- validate ourselves for translatable error messages
function rc.validate(self, value)
if not DTYP.uinteger(value)
or tonumber(value) < 1 then
return nil, err_tab_timer(self) .. translate("minimum value '1'")
if not DTYP.uinteger(value) then
return nil, err_tab_timer(self) .. translate("minimum value '0'")
else
return value
end

View file

@ -28,8 +28,8 @@
-- one button on top, one at the buttom
%>
<input class="cbi-button cbi-input-button" style="align: center; width: 100%" type="button" onclick="onclick_logview(this.name, false)"
<%=
attr("name", section) .. attr("id", cbid .. ".btn1") .. attr("value", self.inputtitle)
<%=
attr("name", section) .. attr("id", cbid .. ".btn1") .. attr("value", self.inputtitle)
%> />
<br /><br />
@ -39,15 +39,15 @@ attr("name", section) .. attr("id", cbid .. ".btn1") .. attr("value", self.input
-- in openwrt theme there are problems with a width of 100 so we check for theme and set to lower value
%>
<textarea style="width: <%if media == "/luci-static/openwrt.org" then%>98.7%<%else%>100%<%end%> ; min-height: 500px; border: 3px solid #cccccc; padding: 5px; font-family: monospace; resize: none;" wrap="off" readonly="readonly"
<%=
attr("name", cbid .. ".txt") .. attr("id", cbid .. ".txt") .. ifattr(self.rows, "rows")
<%=
attr("name", cbid .. ".txt") .. attr("id", cbid .. ".txt") .. ifattr(self.rows, "rows")
%> >
<%-=pcdata(self:cfgvalue(section))-%>
</textarea>
<br /><br />
<%
-- one button on top, one at the buttom
<%
-- one button on top, one at the buttom
%>
<input class="cbi-button cbi-input-button" style="align: center; width: 100%" type="button" onclick="onclick_logview(this.name, true)"
<%= attr("name", section) .. attr("id", cbid .. ".btn2") .. attr("value", self.inputtitle) %> />

View file

@ -3,13 +3,13 @@
<%+cbi/valueheader%>
<% if self:cfgvalue(section) ~= false then
-- We need to garantie that function cfgvalue run first to set missing parameters
-- 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 -->
<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")
<%=
attr("name", section) .. attr("id", cbid) .. attr("value", self.inputtitle) .. ifattr(self.disabled, "disabled")
%> />
<% end %>