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()
 
 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")
 
 
   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")
 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
 
   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")
 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
 
   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")
 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()
   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 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()
   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 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()
   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 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
 
 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 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")
 
 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
 
   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
 
 
 lci.rmempty = false
 
 
@@ -109,9 +109,14 @@ if valman ~= "1" then
   tlm.rmempty = false
 
   --Advanced Tab
   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.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"))
 
   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")..")")
 
   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"
   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.
 
 -- 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 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 = SimpleForm("editing", nil)
+m4:append(Template("unbound/css-editing"))
 m4.submit = translate("Save")
 m4.reset = false
 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
 frm = s4:option(TextValue, "data")
 frm.datatype = "string"
 frm.rows = 20
@@ -23,7 +22,7 @@ end
 
 
 function frm.write(self, section, data)
 
 
 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
 
 
 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.
 
 -- 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 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 = SimpleForm("editing", nil)
+m2:append(Template("unbound/css-editing"))
 m2.submit = translate("Save")
 m2.reset = false
 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
 frm = s2:option(TextValue, "data")
 frm.datatype = "string"
 frm.rows = 20
@@ -23,7 +22,7 @@ end
 
 
 function frm.write(self, section, data)
 
 
 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
 
 
 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.
 
 -- 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 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 = SimpleForm("editing", nil)
+m3:append(Template("unbound/css-editing"))
 m3.submit = translate("Save")
 m3.reset = false
 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
 frm = s3:option(TextValue, "data")
 frm.datatype = "string"
 frm.rows = 20
@@ -23,7 +22,7 @@ end
 
 
 function frm.write(self, section, data)
 
 
 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
 
 
 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>
 <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%>
 
 </div>
 <%+footer%>