Merge pull request #663 from NeoRaider/styleable-checkboxes
[project/luci.git] / applications / luci-app-ddns / luasrc / model / cbi / ddns / overview.lua
index 5b5925b..6ba3ea0 100644 (file)
@@ -1,21 +1,24 @@
--- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+-- Copyright 2014-2016 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
 -- Licensed to the public under the Apache License 2.0.
 
 local NXFS = require "nixio.fs"
-local CTRL = require "luci.controller.ddns"    -- this application's controller
 local DISP = require "luci.dispatcher"
 local HTTP = require "luci.http"
 local SYS  = require "luci.sys"
+local CTRL = require "luci.controller.ddns"    -- this application's controller
 local DDNS = require "luci.tools.ddns"         -- ddns multiused functions
 
--- show hints ?
-show_hints = not (DDNS.check_ipv6()            -- IPv6 support
-               and DDNS.check_ssl()            -- HTTPS support
-               and DDNS.check_proxy()          -- Proxy support
-               and DDNS.check_bind_host()      -- DNS TCP support
+local show_hints = not (DDNS.has_ipv6          -- IPv6 support
+                   and DDNS.has_ssl            -- HTTPS support
+                   and DDNS.has_proxy          -- Proxy support
+                   and DDNS.has_bindhost       -- DNS TCP support
+                   and DDNS.has_forceip        -- Force IP version
+                   and DDNS.has_dnsserver      -- DNS server support
+                   and DDNS.has_bindnet        -- Bind to network/interface
+                   and DDNS.has_cacerts        -- certificates installed at /etc/ssl/certs
                )
--- correct ddns-scripts version
-need_update = DDNS.ipkg_ver_compare(DDNS.ipkg_ver_installed("ddns-scripts"), "<<", CTRL.DDNS_MIN)
+local not_enabled = not SYS.init.enabled("ddns")
+local need_update = not CTRL.service_ok()
 
 -- html constants
 font_red = [[<font color="red">]]
@@ -25,50 +28,34 @@ bold_off = [[</strong>]]
 
 -- cbi-map definition -- #######################################################
 m = Map("ddns")
-
-m.title        = [[<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") .. [[</a>]]
-
-m.description = translate("Dynamic DNS allows that your router can be reached with " ..
-                       "a fixed hostname while having a dynamically changing " ..
-                       "IP address.")
+m.title                = CTRL.app_title_main()
+m.description  = CTRL.app_description()
 
 m.on_after_commit = function(self)
        if self.changed then    -- changes ?
+               local command = CTRL.luci_helper
                if SYS.init.enabled("ddns") then        -- ddns service enabled, restart all
-                       os.execute("/etc/init.d/ddns restart")
+                       command = command .. " -- restart"
+                       os.execute(command)
                else    -- ddns service disabled, send SIGHUP to running
-                       os.execute("killall -1 dynamic_dns_updater.sh")
+                       command = command .. " -- reload"
+                       os.execute(command)
                end
        end
 end
 
--- SimpleSection definiton -- ##################################################
+-- SimpleSection definition -- ##################################################
 -- with all the JavaScripts we need for "a good Show"
 a = m:section( SimpleSection )
 a.template = "ddns/overview_status"
 
 -- SimpleSection definition -- #################################################
 -- show Hints to optimize installation and script usage
--- only show if        service not enabled
---             or      no IPv6 support
---             or      not GNU Wget and not cURL       (for https support)
---             or      not GNU Wget but cURL without proxy support
---             or      not BIND's host
---             or      ddns-scripts package need update
-if show_hints or need_update or not SYS.init.enabled("ddns") then
+if show_hints or need_update or not_enabled then
+
        s = m:section( SimpleSection, translate("Hints") )
 
-       -- ddns_scripts needs to be updated for full functionality
+       -- ddns-scripts needs to be updated for full functionality
        if need_update then
                local dv = s:option(DummyValue, "_update_needed")
                dv.titleref = DISP.build_url("admin", "system", "packages")
@@ -81,7 +68,7 @@ if show_hints or need_update or not SYS.init.enabled("ddns") then
        end
 
        -- DDNS Service disabled
-       if not SYS.init.enabled("ddns") then
+       if not_enabled then
                local dv = s:option(DummyValue, "_not_enabled")
                dv.titleref = DISP.build_url("admin", "system", "startup")
                dv.rawhtml  = true
@@ -106,11 +93,11 @@ end
 -- TableSection definition -- ##################################################
 ts = m:section( TypedSection, "service",
        translate("Overview"),
-       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 />" 
+       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")
@@ -122,31 +109,34 @@ function ts.create(self, name)
        HTTP.redirect( self.extedit:format(name) )
 end
 
--- Domain and registered IP -- #################################################
-dom = ts:option(DummyValue, "_domainIP",
-       translate("Hostname/Domain") .. "<br />" .. translate("Registered IP") )
+-- Lookup_Host and registered IP -- #################################################
+dom = ts:option(DummyValue, "_lookupIP",
+       translate("Lookup Hostname") .. "<br />" .. translate("Registered IP") )
 dom.template = "ddns/overview_doubleline"
 function dom.set_one(self, section)
-       local domain = self.map:get(section, "domain") or ""
-       if domain ~= "" then
-               return domain
+       local lookup = self.map:get(section, "lookup_host") or ""
+       if lookup ~= "" then
+               return lookup
        else
                return [[<em>]] .. translate("config error") .. [[</em>]]
        end
 end
 function dom.set_two(self, section)
-       local domain = self.map:get(section, "domain") or ""
-       if domain == "" then return "" end
+       local lookup_host = self.map:get(section, "lookup_host") or ""
+       if lookup_host == "" then return "" end
        local dnsserver = self.map:get(section, "dnsserver") or ""
        local use_ipv6 = tonumber(self.map:get(section, "use_ipv6") or 0)
        local force_ipversion = tonumber(self.map:get(section, "force_ipversion") or 0)
        local force_dnstcp = tonumber(self.map:get(section, "force_dnstcp") or 0)
-       local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh]]
-       if not NXFS.access(command, "rwx", "rx", "rx") then
-               NXFS.chmod(command, 755)
-       end
-       command = command .. [[ get_registered_ip ]] .. domain .. [[ ]] .. use_ipv6 ..
-               [[ ]] .. force_ipversion .. [[ ]] .. force_dnstcp .. [[ ]] .. dnsserver
+       local is_glue = tonumber(self.map:get(section, "is_glue") or 0)
+       local command = CTRL.luci_helper .. [[ -]]
+       if (use_ipv6 == 1) then command = command .. [[6]] end
+       if (force_ipversion == 1) then command = command .. [[f]] end
+       if (force_dnstcp == 1) then command = command .. [[t]] end
+       if (is_glue == 1) then command = command .. [[g]] end
+       command = command .. [[l ]] .. lookup_host
+       if (#dnsserver > 0) then command = command .. [[ -d ]] .. dnsserver end
+       command = command .. [[ -- get_registered_ip]]
        local ip = SYS.exec(command)
        if ip == "" then ip = translate("no data") end
        return ip
@@ -157,9 +147,6 @@ ena = ts:option( Flag, "enabled",
        translate("Enabled"))
 ena.template = "ddns/overview_enabled"
 ena.rmempty = false
-function ena.parse(self, section)
-       DDNS.flag_parse(self, section)
-end
 
 -- show PID and next update
 upd = ts:option( DummyValue, "_update",