Merge pull request #289 from chris5560/master

luci-app-ddns: adaption to new luci structure and cleanup
This commit is contained in:
Jo-Philipp Wich 2015-01-11 00:27:14 +01:00
commit 546de2c81c
7 changed files with 40 additions and 287 deletions

View file

@ -1,51 +0,0 @@
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
- moved /usr/lib/ddns/dynamic_dns_lucihelper.sh to ddns-scripts package
- fixed error message when validating proxy
- modified validating ip_script to allow the usage of parameters
- using ipkg/postinst AND ipkg/postinst-pkg as long as LuCI Makefiles did not
fullfil requirements of new OpenWrt default_postinst and default_postrm
reported in Issue #255
- cleanup whitespaces at line ends
--------------------------------------------------------------------------------
Version: 2.1.0-1
Date: 2014-11-09
ddns-scripts: 2.1.0-1 or greater needed
fix verify of entry for DNS server Issue #244
https://github.com/openwrt/luci/issues/244
add support for option 'update_script'
add display of version information when click on "Dynamic DNS" on overview page
add verify of installed ddns-scripts version and show as hint if not correct version
modified epoch to date conversation
cbi object Flag did not set section.changed state, fixed in tools.flag_parse function
ucitrack entry no longer needed and removed
minor fixes
--------------------------------------------------------------------------------
Version: 2.0.1-1
Date: 2014-09-21
ddns-scripts: 2.0.1-1 up to 2.0.1-9
New DDNS status in System->Status overview
New Overview page with option to start/stop a section
New Detail page with tabbed view incl. logfile viewer
Extended verify of all entries before save to config
incl. connect test to DNS- and Proxy-server
Support for all available options of ddns-scripts 1.x and 2.x

View file

@ -1,13 +1,21 @@
# #
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org> # Copyright (C) 2008-2015 The LuCI Team <luci@lists.subsignal.org>
# #
# This is free software, licensed under the Apache License, Version 2.0 . # This is free software, licensed under the Apache License, Version 2.0 .
# #
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for Dynamic DNS LUCI_TITLE:=LuCI Support for Dynamic DNS (ddns-scripts)
LUCI_DEPENDS:=+ddns-scripts LUCI_DEPENDS:=+ddns-scripts +luci-mod-admin-full
PKG_NAME:=luci-app-ddns
PKG_VERSION:=2.1.0
PKG_RELEASE:=4
PKG_LICENSE:=Apache-2.0
PKGARCH:=all
PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
include ../../luci.mk include ../../luci.mk

View file

@ -3,6 +3,7 @@ LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org> Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net> Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
@ -25,8 +26,8 @@ local SYS = require "luci.sys"
local DDNS = require "luci.tools.ddns" -- ddns multiused functions local DDNS = require "luci.tools.ddns" -- ddns multiused functions
local UTIL = require "luci.util" local UTIL = require "luci.util"
local luci_ddns_version = "2.1.0-3" -- luci-app-ddns / openwrt Makefile compatible version local luci_ddns_version = "2.1.0-4" -- luci-app-ddns / openwrt Makefile compatible version
local ddns_scripts_min = "2.1.0-2" -- minimum version of ddns-scripts required local ddns_scripts_min = "2.1.0-3" -- minimum version of ddns-scripts required
function index() function index()
-- no services_ipv6 file or no dynamic_dns_lucihelper.sh -- no services_ipv6 file or no dynamic_dns_lucihelper.sh

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

@ -18,6 +18,9 @@ msgid ""
"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" "separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
msgstr "" msgstr ""
msgid "Build"
msgstr ""
msgid "" msgid ""
"BusyBox's nslookup and Wget do not support to specify the IP version to use " "BusyBox's nslookup and Wget do not support to specify the IP version to use "
"for communication with DDNS Provider." "for communication with DDNS Provider."
@ -279,6 +282,9 @@ msgstr ""
msgid "Please press [Read] button" msgid "Please press [Read] button"
msgstr "" msgstr ""
msgid "Please update to the current version!"
msgstr ""
msgid "Process ID" msgid "Process ID"
msgstr "" msgstr ""
@ -309,6 +315,9 @@ msgstr ""
msgid "Show more" msgid "Show more"
msgstr "" msgstr ""
msgid "Software update required"
msgstr ""
msgid "Source of IP address" msgid "Source of IP address"
msgstr "" msgstr ""
@ -318,6 +327,11 @@ msgstr ""
msgid "Stopped" msgid "Stopped"
msgstr "" msgstr ""
msgid ""
"The currently installed 'ddns-scripts' package did not support all available "
"settings."
msgstr ""
msgid "There is no service configured." msgid "There is no service configured."
msgstr "" msgstr ""
@ -347,6 +361,9 @@ msgstr ""
msgid "User defined script to read systems IP-Address" msgid "User defined script to read systems IP-Address"
msgstr "" msgstr ""
msgid "Version Information"
msgstr ""
msgid "" msgid ""
"Writes detailed messages to log file. File will be truncated automatically." "Writes detailed messages to log file. File will be truncated automatically."
msgstr "" msgstr ""
@ -407,6 +424,9 @@ msgstr ""
msgid "install update here" msgid "install update here"
msgstr "" msgstr ""
msgid "installed"
msgstr ""
msgid "interface" msgid "interface"
msgstr "" msgstr ""
@ -458,6 +478,9 @@ msgstr ""
msgid "or" msgid "or"
msgstr "" msgstr ""
msgid "or greater"
msgstr ""
msgid "please disable" msgid "please disable"
msgstr "" msgstr ""
@ -473,6 +496,9 @@ msgstr ""
msgid "proxy port missing" msgid "proxy port missing"
msgstr "" msgstr ""
msgid "required"
msgstr ""
msgid "seconds" msgid "seconds"
msgstr "" msgstr ""

View file

@ -1,24 +1,10 @@
#!/bin/sh #!/bin/sh
# 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
# no longer needed for "Save and Apply" to restart ddns # no longer needed for "Save and Apply" to restart ddns
uci -q batch <<-EOF >/dev/null uci -q batch <<-EOF >/dev/null
delete ucitrack.@ddns[-1] delete ucitrack.@ddns[-1]
commit ucitrack commit ucitrack
EOF EOF
# make helper script executable
chmod 755 /usr/lib/ddns/dynamic_dns_lucihelper.sh
# update application section for luci-app-ddns
uci -q get ddns.global > /dev/null || uci -q set ddns.global='ddns'
uci -q get ddns.global.date_format > /dev/null || uci -q set ddns.global.date_format='%F %R'
uci -q get ddns.global.log_lines > /dev/null || uci -q set ddns.global.log_lines='250'
uci -q commit ddns
rm -f /tmp/luci-indexcache rm -f /tmp/luci-indexcache
exit 0 exit 0

View file

@ -1,82 +0,0 @@
#!/bin/sh
# /usr/lib/ddns/luci_dns_helper.sh
#
# Written by Christian Schoenebeck in August 2014 to support:
# this script is used by luci-app-ddns
# - getting registered IP
# - check if possible to get local IP
# - verifing given DNS- or Proxy-Server
#
# variables in small chars are read from /etc/config/ddns
# variables in big chars are defined inside these scripts as gloval vars
# variables in big chars beginning with "__" are local defined inside functions only
# set -vx #script debugger
[ $# -lt 2 ] && exit 1
. /usr/lib/ddns/dynamic_dns_functions.sh # global vars are also defined here
# set -vx #script debugger
# preset some variables wrong or not set in dynamic_dns_functions.sh
SECTION_ID="dynamic_dns_lucihelper"
LOGFILE="$LOGDIR/$SECTION_ID.log"
LUCI_HELPER="ACTIV" # supress verbose and critical logging
# global variables normally set by reading DDNS UCI configuration
use_logfile=0
use_syslog=0
case "$1" in
get_registered_ip)
local IP
domain=$2 # Hostname/Domain
use_ipv6=${3:-"0"} # Use IPv6 - default IPv4
force_ipversion=${4:-"0"} # Force IP Version - default 0 - No
force_dnstcp=${5:-"0"} # Force TCP on DNS - default 0 - No
dns_server=${6:-""} # DNS server - default No DNS
get_registered_ip IP
[ $? -ne 0 ] && IP=""
echo -n "$IP" # suppress LF
;;
verify_dns)
# $2 == dns-server to verify # no need for force_dnstcp because
# verify with nc (netcat) uses tcp anyway
use_ipv6=${3:-"0"} # Use IPv6 - default IPv4
force_ipversion=${4:-"0"} # Force IP Version - default 0 - No
verify_dns "$2"
;;
verify_proxy)
# $2 == proxy string to verify
use_ipv6=${3:-"0"} # Use IPv6 - default IPv4
force_ipversion=${4:-"0"} # Force IP Version - default 0 - No
verify_proxy "$2"
;;
get_local_ip)
local IP
use_ipv6="$2" # Use IPv6
ip_source="$3" # IP source
ip_network="$4" # set if source = "network" otherwise "-"
ip_url="$5" # set if source = "web" otherwise "-"
ip_interface="$6" # set if source = "interface" itherwiase "-"
ip_script="$7" # set if source = "script" otherwise "-"
proxy="$8" # proxy if set
force_ipversion="0" # not needed but must be set
use_https="0" # not needed but must be set
[ -n "$proxy" -a "$ip_source" == "web" ] && {
# proxy defined, used for ip_source=web
export HTTP_PROXY="http://$proxy"
export HTTPS_PROXY="http://$proxy"
export http_proxy="http://$proxy"
export https_proxy="http://$proxy"
}
# don't need IP only the return code
[ "$ip_source" == "web" -o "$ip_source" == "script"] && {
# we wait only 3 seconds for an
# answer from "web" or "script"
__timeout 3 -- get_local_ip IP
} || get_local_ip IP
;;
*)
return 1
;;
esac