1 -- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
2 -- Licensed to the public under the Apache License 2.0.
4 local NX = require "nixio"
5 local NXFS = require "nixio.fs"
6 local DISP = require "luci.dispatcher"
7 local SYS = require "luci.sys"
8 local DDNS = require "luci.tools.ddns" -- ddns multiused functions
10 -- cbi-map definition -- #######################################################
13 -- first need to close <a> from cbi map template our <a> closed by template
14 m.title = [[</a><a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]]
15 .. translate("Dynamic DNS")
17 m.description = translate("Dynamic DNS allows that your router can be reached with " ..
18 "a fixed hostname while having a dynamically changing IP address.")
20 m.redirect = DISP.build_url("admin", "services", "ddns")
22 function m.commit_handler(self)
23 if self.changed then -- changes ?
24 os.execute("/etc/init.d/ddns reload &") -- reload configuration
28 -- cbi-section definition -- ###################################################
29 local ns = m:section( NamedSection, "global", "ddns",
30 translate("Global Settings"),
31 translate("Configure here the details for all Dynamic DNS services including this LuCI application.")
33 .. translate("It is NOT recommended for casual users to change settings on this page.")
34 .. [[</strong><br />]]
35 .. [[<a href="http://wiki.openwrt.org/doc/uci/ddns#version_2x1" target="_blank">]]
36 .. translate("For detailed information about parameter settings look here.")
39 -- section might not exist
40 function ns.cfgvalue(self, section)
41 if not self.map:get(section) then
42 self.map:set(section, nil, self.sectiontype)
44 return self.map:get(section)
47 -- allow_local_ip -- ##########################################################
48 local ali = ns:option(Flag, "allow_local_ip")
49 ali.title = translate("Allow non-public IP's")
50 ali.description = translate("Non-public and by default blocked IP's") .. ":"
51 .. [[<br /><strong>IPv4: </strong>]]
52 .. "0/8, 10/8, 100.64/10, 127/8, 169.254/16, 172.16/12, 192.168/16"
53 .. [[<br /><strong>IPv6: </strong>]]
57 function ali.parse(self, section)
58 DDNS.flag_parse(self, section)
60 function ali.validate(self, value)
61 if value == self.default then
62 return "" -- default = empty
67 -- date_format -- #############################################################
68 local df = ns:option(Value, "date_format")
69 df.title = translate("Date format")
70 df.description = [[<a href="http://www.cplusplus.com/reference/ctime/strftime/" target="_blank">]]
71 .. translate("For supported codes look here")
73 df.template = "ddns/global_value"
77 function df.cfgvalue(self, section)
78 local value = AbstractValue.cfgvalue(self, section) or self.default
79 local epoch = os.time()
80 self.date_string = DDNS.epoch2date(epoch, value)
83 function df.validate(self, value)
84 if value == self.default then
85 return "" -- default = empty
90 -- run_dir -- #################################################################
91 local rd = ns:option(Value, "run_dir")
92 rd.title = translate("Status directory")
93 rd.description = translate("Directory contains PID and other status information for each running section")
95 rd.default = "/var/run/ddns"
96 function rd.validate(self, value)
97 if value == self.default then
98 return "" -- default = empty
103 -- log_dir -- #################################################################
104 local ld = ns:option(Value, "log_dir")
105 ld.title = translate("Log directory")
106 ld.description = translate("Directory contains Log files for each running section")
108 ld.default = "/var/log/ddns"
109 function ld.validate(self, value)
110 if value == self.default then
111 return "" -- default = empty
116 -- log_lines -- ###############################################################
117 local ll = ns:option(Value, "log_lines")
118 ll.title = translate("Log length")
119 ll.description = translate("Number of last lines stored in log files")
122 ll.datatype = "and(uinteger,min(1))"
123 function ll.validate(self, value)
124 local n = tonumber(value)
125 if not n or math.floor(n) ~= n or n < 1 then
126 return nil, self.title .. ": " .. translate("minimum value '1'")
128 if value == self.default then
129 return "" -- default = empty
134 -- use_curl -- ################################################################
135 if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0)
136 and NXFS.access("/usr/bin/curl") then
137 local pc = ns:option(Flag, "use_curl")
138 pc.title = translate("Use cURL")
139 pc.description = translate("If both cURL and GNU Wget are installed, Wget is used by default.")
141 .. translate("To use cURL activate this option.")
142 pc.orientation = "horizontal"
145 function pc.parse(self, section)
146 DDNS.flag_parse(self, section)
148 function pc.validate(self, value)
149 if value == self.default then
150 return "" -- default = empty