luci-app-unbound: clean up presentation of advanced LuCI tabs 1376/head
authorEric Luehrsen <ericluehrsen@hotmail.com>
Mon, 18 Sep 2017 03:31:15 +0000 (23:31 -0400)
committerEric Luehrsen <ericluehrsen@hotmail.com>
Sat, 23 Sep 2017 03:04:40 +0000 (23:04 -0400)
Add CSS for editing tabs to provide monospace font and offset
editing window color from read only windows. Expand 'control'
option to match with net/unbound. Add 'extended_stats' option
to match with net/unbound.

Signed-off-by: Eric Luehrsen <ericluehrsen@hotmail.com>
applications/luci-app-unbound/luasrc/controller/unbound.lua
applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua
applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua
applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua
applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua
applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm [new file with mode: 0644]
applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm

index 296d020..b44bf03 100644 (file)
@@ -8,7 +8,7 @@ module("luci.controller.unbound", package.seeall)
 
 function index()
   local ucl = luci.model.uci.cursor()
-  local valexp = ucl:get_first("unbound", "unbound", "luci_expanded")
+  local valexp = ucl:get_first("unbound", "unbound", "extended_luci")
   local valman = ucl:get_first("unbound", "unbound", "manual_conf")
 
 
@@ -89,7 +89,7 @@ end
 function QueryStatistics()
   local lclhead = "Unbound Control Stats"
   local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf stats_noreset")
-  local lcldesc = luci.i18n.translate("This shows some performances statistics tracked by Unbound.")
+  local lcldesc = luci.i18n.translate("This shows some performance statistics tracked by Unbound.")
   luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
 end
 
@@ -97,7 +97,7 @@ end
 function QueryLocalData()
   local lclhead = "Unbound Control Local Data"
   local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf list_local_data")
-  local lcldesc = luci.i18n.translate("This shows local RR including this router, DHCP assignments, and RFC1918 SOA stubs.")
+  local lcldesc = luci.i18n.translate("This shows local host records that shortcut recursion.")
   luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
 end
 
@@ -105,31 +105,47 @@ end
 function QueryLocalZone()
   local lclhead = "Unbound Control Local Zones"
   local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf list_local_zones")
-  local lcldesc = luci.i18n.translate("This shows local zones including LAN, adblock, forwarding, and RFC1918 in-arpa. ")
+  local lcldesc = luci.i18n.translate("This shows local zone definitions that affect recursion routing or processing. ")
   luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
 end
 
 
 function ShowUnboundConf()
+  local unboundfile = "/var/lib/unbound/unbound.conf"
   local lclhead = "Unbound Conf"
-  local lcldata = luci.util.exec("cat /var/lib/unbound/unbound.conf")
-  local lcldesc = luci.i18n.translate("This shows '/var/lib/unbound/unbound.conf' generated by UCI.")
+  local lcldata = nixio.fs.readfile(unboundfile)
+  local lcldesc = luci.i18n.translate("This shows configuration generated by UCI:")
+  lcldesc = lcldesc .. " (" .. unboundfile .. ")"
   luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
 end
 
 
 function ShowDHCPConf()
+  local dhcpfile = "/var/lib/unbound/unbound_dhcp.conf"
   local lclhead = "DHCP Conf"
-  local lcldata = luci.util.exec("cat /var/lib/unbound/unbound_dhcp.conf")
-  local lcldesc = luci.i18n.translate("This shows '/var/lib/unbound/unbound_dhcp.conf' generated by DHCP hook script(s).")
+  local lcldata = nixio.fs.readfile(dhcpfile)
+  local lcldesc = luci.i18n.translate("This shows LAN hosts added by DHCP hook scripts:")
+  lcldesc = lcldesc .. " (" .. dhcpfile .. ")"
   luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
 end
 
 
 function ShowAdblock()
+  local adblockfile = "/var/lib/unbound/adb_list.overall"
   local lclhead = "Adblock Conf"
-  local lcldata = luci.util.exec("cat /var/lib/unbound/adb_list.overall")
-  local lcldesc = luci.i18n.translate("This shows '/var/lib/unbound/adb_list.overall' provided by Adblock script(s).")
-  luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+  local lcldata, lcldesc
+
+
+  if nixio.fs.stat(adblockfile).size > 262144 then
+    lcldesc = luci.i18n.translate("Adblock domain list is too large for LuCI:")
+    lcldesc = lcldesc .. " (" .. adblockfile .. ")"
+    luci.template.render("unbound/show-empty", {heading = lclhead, description = lcldesc})
+
+  else
+    lcldata = nixio.fs.readfile(adblockfile)
+    lcldesc = luci.i18n.translate("This shows blocked domains provided by Adblock scripts:")
+    lcldesc = lcldesc .. " (" .. adblockfile .. ")"
+    luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+  end
 end
 
index 61dca76..cdf7757 100644 (file)
@@ -6,7 +6,7 @@
 local m1, s1
 local ena, mcf, lci, lsv, rlh, rpv, vld, nvd, eds, prt, tlm
 local ctl, dlk, dom, dty, lfq, wfq, exa, dp6, d64, pfx, qry, qrs
-local pro, tgr, rsc, rsn, ag2
+local pro, tgr, rsc, rsn, ag2, stt
 local ucl = luci.model.uci.cursor()
 local valman = ucl:get_first("unbound", "unbound", "manual_conf")
 
@@ -34,8 +34,8 @@ mcf = s1:taboption("basic", Flag, "manual_conf", translate("Manual Conf:"),
   translate("Skip UCI and use /etc/unbound/unbound.conf"))
 mcf.rmempty = false
 
-lci = s1:taboption("basic", Flag, "luci_expanded", translate("LuCI Expanded:"),
-  translate("See more detailed tabs for debug"))
+lci = s1:taboption("basic", Flag, "extended_luci", translate("Advanced LuCI:"),
+  translate("See detailed tabs for debug and advanced manual configuration"))
 lci.rmempty = false
 
 
@@ -109,9 +109,14 @@ if valman ~= "1" then
   tlm.rmempty = false
 
   --Advanced Tab
-  ctl = s1:taboption("advanced", Flag, "unbound_control", translate("Unbound Control App:"),
-    translate("Enable unecrypted localhost access for unbound-control"))
+  ctl = s1:taboption("advanced", ListValue, "unbound_control", translate("Unbound Control App:"),
+    translate("Enable access for unbound-control"))
   ctl.rmempty = false
+  ctl:value("0", translate("No Remote Control"))
+  ctl:value("1", translate("Local Host, No Encryption"))
+  ctl:value("2", translate("Local Host, Encrypted"))
+  ctl:value("3", translate("Local Subnet, Encrypted"))
+  ctl:value("4", translate("Local Subnet, Static Encryption"))
 
   dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"),
     translate("Link to supported programs to load DHCP into DNS"))
@@ -223,6 +228,10 @@ if valman ~= "1" then
   ag2:value("24", "24")
   ag2:value("99", "99 ("..translate("never")..")")
 
+  stt = s1:taboption("resource", Flag, "extended_stats", translate("Extended Statistics:"),
+    translate("Extended statistics are printed from unbound-control"))
+  stt.rmempty = false
+
   tgr = s1:taboption("resource", Value, "trigger", translate("Trigger Networks:"),
     translate("Networks that may trigger Unbound to reload (avoid wan6)"))
   tgr.template = "cbi/network_netlist"
index 0225712..67d2ec6 100644 (file)
@@ -1,17 +1,16 @@
 -- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
 -- Licensed to the public under the Apache License 2.0.
 
-local filename = "/etc/unbound/unbound_ext.conf"
 local m4, s4, frm
+local filename = "/etc/unbound/unbound_ext.conf"
+local description =  translatef("Here you may edit 'forward:' and 'remote-control:' in an extended 'include:'")
+description = description .. " (" .. filename .. ")"
 
 m4 = SimpleForm("editing", nil)
+m4:append(Template("unbound/css-editing"))
 m4.submit = translate("Save")
 m4.reset = false
-
-s4 = m4:section(SimpleSection, "Unbound Extended Conf",
-  translatef("This allows you to edit %s which is copied to"
-  .. " /var/ and 'include:' last for 'forward:' and other clauses", filename))
-
+s4 = m4:section(SimpleSection, "Unbound Extended Conf", description)
 frm = s4:option(TextValue, "data")
 frm.datatype = "string"
 frm.rows = 20
@@ -23,7 +22,7 @@ end
 
 
 function frm.write(self, section, data)
-  return nixio.fs.writefile(filename, data)
+  return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
 end
 
 
index 694180d..5cfb9c3 100644 (file)
@@ -1,17 +1,16 @@
 -- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
 -- Licensed to the public under the Apache License 2.0.
 
-local filename = "/etc/unbound/unbound.conf"
 local m2, s2, frm
+local filename = "/etc/unbound/unbound.conf"
+local description =  translatef("Here you may edit raw 'unbound.conf' when you don't use UCI:")
+description = description .. " (" .. filename .. ")"
 
 m2 = SimpleForm("editing", nil)
+m2:append(Template("unbound/css-editing"))
 m2.submit = translate("Save")
 m2.reset = false
-
-s2 = m2:section(SimpleSection, "Unbound Conf",
-  translatef("This allows you to edit raw %s which is copied to"
-  .. " /var/ for Unbound's base conf when you don't use UCI", filename))
-
+s2 = m2:section(SimpleSection, "Unbound Conf", description)
 frm = s2:option(TextValue, "data")
 frm.datatype = "string"
 frm.rows = 20
@@ -23,7 +22,7 @@ end
 
 
 function frm.write(self, section, data)
-  return nixio.fs.writefile(filename, data)
+  return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
 end
 
 
index 1870462..d0ac407 100644 (file)
@@ -1,17 +1,16 @@
 -- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
 -- Licensed to the public under the Apache License 2.0.
 
-local filename = "/etc/unbound/unbound_srv.conf"
 local m3, s3, frm
+local filename = "/etc/unbound/unbound_srv.conf"
+local description =  translatef("Here you may edit the 'server:' clause in an internal 'include:'")
+description = description .. " (" .. filename .. ")"
 
 m3 = SimpleForm("editing", nil)
+m3:append(Template("unbound/css-editing"))
 m3.submit = translate("Save")
 m3.reset = false
-
-s3 = m3:section(SimpleSection, "Unbound Server Conf",
-  translatef("This allows you to edit %s which is copied to"
-  .. " /var/ and 'include:' within the 'server:' section.", filename))
-
+s3 = m3:section(SimpleSection, "Unbound Server Conf", description)
 frm = s3:option(TextValue, "data")
 frm.datatype = "string"
 frm.rows = 20
@@ -23,7 +22,7 @@ end
 
 
 function frm.write(self, section, data)
-  return nixio.fs.writefile(filename, data)
+  return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
 end
 
 
diff --git a/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm b/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm
new file mode 100644 (file)
index 0000000..44d0937
--- /dev/null
@@ -0,0 +1,8 @@
+<style type="text/css">
+  textarea
+  {
+    background-color: #fffff0;
+    font-family: monospace;
+  }
+</style>
+
index 69c9847..c0a7d13 100644 (file)
@@ -2,7 +2,7 @@
 <h3><%=heading:pcdata()%></h3>
 <p><%=description:pcdata()%></p>
 <div>
-<textarea style="width: 100%; height: 480px;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+<textarea style="width: 100%; height: 480px; font-family: monospace;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
 </div>
 <%+footer%>