summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-adblock/luasrc/model/cbi
diff options
context:
space:
mode:
authorDirk Brenken <dev@brenken.org>2017-03-25 21:58:51 +0100
committerDirk Brenken <dev@brenken.org>2017-03-26 08:49:02 +0200
commit1bc3833e6876c9e2796fb7ec1ad2711bc12ef85f (patch)
treea53dc5e0c88ff78b34f82cfe9cf6682982fda678 /applications/luci-app-adblock/luasrc/model/cbi
parent0ec9636be4e82c22b37fa379bd350ef661a8b5ab (diff)
luci-app-adblock: major update
* multi-tab navigation Overview/View Logfile/Advanced Advanced: Edit Blacklist/Whitelist/Configuration Query domains * all adblock options are now configurable via LuCI Signed-off-by: Dirk Brenken <dev@brenken.org>
Diffstat (limited to 'applications/luci-app-adblock/luasrc/model/cbi')
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock.lua63
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua39
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua36
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua119
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua39
5 files changed, 233 insertions, 63 deletions
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua
deleted file mode 100644
index 0a4a4cdd2f..0000000000
--- a/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua
+++ /dev/null
@@ -1,63 +0,0 @@
--- Copyright 2016 Hannu Nyman
--- Licensed to the public under the Apache License 2.0.
-
-m = Map("adblock", translate("Adblock"),
- translate("Configuration of the adblock package to block ad/abuse domains by using DNS."))
-
--- General options
-
-s = m:section(NamedSection, "global", "adblock", translate("Global options"))
-
-o1 = s:option(Flag, "adb_enabled", translate("Enable adblock"))
-o1.rmempty = false
-o1.default = 0
-
-o3 = s:option(Value, "adb_whitelist", translate("Whitelist file"),
- translate("File with whitelisted hosts/domains that are allowed despite being on a blocklist."))
-o3.rmempty = false
-o3.datatype = "file"
-
--- Blocklist options
-
-bl = m:section(TypedSection, "source", translate("Blocklist sources"),
- translate("Available blocklist sources (")
- .. [[<a href="https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md" target="_blank">]]
- .. translate("see list details")
- .. [[</a>]]
- .. translate("). Note that list URLs and Shallalist category selections are not configurable via Luci."))
-bl.template = "cbi/tblsection"
-
-name = bl:option(Flag, "enabled", translate("Enabled"))
-name.rmempty = false
-
-des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
-
--- Additional options
-
-s2 = m:section(NamedSection, "global", "adblock", translate("Backup options"))
-
-o4 = s2:option(Flag, "adb_backup", translate("Enable blocklist backup"))
-o4.rmempty = false
-o4.default = 0
-
-o5 = s2:option(Value, "adb_backupdir", translate("Backup directory"))
-o5.rmempty = false
-o5.datatype = "directory"
-
--- Extra options
-
-e = m:section(NamedSection, "global", "adblock", translate("Extra options"),
- translate("Options for further tweaking in case the defaults are not suitable for you."))
-
-a = e:option(Flag, "adb_debug", translate("Enable verbose debug logging"))
-a.default = a.disabled
-a.rmempty = false
-
-a = e:option(Value, "adb_iface", translate("Restrict reload trigger to certain interface(s)"),
- translate("Space separated list of wan interfaces that trigger reload action. " ..
- "To disable reload trigger set it to 'false'. Default: empty"))
-a.datatype = "network"
-a.rmempty = true
-
-return m
-
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua
new file mode 100644
index 0000000000..de24d77fbf
--- /dev/null
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua
@@ -0,0 +1,39 @@
+-- Copyright 2016 Hannu Nyman
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local uci = require("uci")
+local adbinput = uci.get("adblock", "blacklist", "adb_src")
+
+if not nixio.fs.access(adbinput) then
+ m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+ return m
+end
+
+m = SimpleForm("input", nil)
+ m:append(Template("adblock/config_css"))
+
+s = m:section(SimpleSection, nil,
+ translate("This form allows you to modify the content of the adblock blacklist (" .. adbinput .. ").<br />")
+ .. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards & regex are not."))
+
+f = s:option(TextValue, "data")
+ f.rmempty = true
+ f.datatype = "string"
+ f.rows = 20
+
+ function f.cfgvalue()
+ return nixio.fs.readfile(adbinput) or ""
+ end
+
+ function f.write(self, section, data)
+ return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+ end
+
+ function s.handle(self, state, data)
+ return true
+ end
+
+return m
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua
new file mode 100644
index 0000000000..035b99e5e3
--- /dev/null
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua
@@ -0,0 +1,36 @@
+-- Copyright 2016 Hannu Nyman
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local adbinput = "/etc/config/adblock"
+
+if not nixio.fs.access(adbinput) then
+ m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+ return m
+end
+
+m = SimpleForm("input", nil)
+ m:append(Template("adblock/config_css"))
+
+s = m:section(SimpleSection, nil,
+translate("This form allows you to modify the content of the main adblock configuration file (/etc/config/adblock)."))
+
+f = s:option(TextValue, "data")
+ f.rmempty = true
+ f.rows = 20
+
+ function f.cfgvalue()
+ return nixio.fs.readfile(adbinput) or ""
+ end
+
+ function f.write(self, section, data)
+ return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+ end
+
+ function s.handle(self, state, data)
+ return true
+ end
+
+return m
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
new file mode 100644
index 0000000000..51039232ab
--- /dev/null
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
@@ -0,0 +1,119 @@
+-- Copyright 2016 Hannu Nyman
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local sys = require("luci.sys")
+local util = require("luci.util")
+local data = util.ubus("service", "get_data", "name", "adblock") or { }
+local dnsFile1 = sys.exec("find '/tmp/dnsmasq.d' -maxdepth 1 -type f -name 'adb_list*' -print")
+local dnsFile2 = sys.exec("find '/var/lib/unbound' -maxdepth 1 -type f -name 'adb_list*' -print")
+
+m = Map("adblock", translate("Adblock"),
+ translate("Configuration of the adblock package to block ad/abuse domains by using DNS. ")
+ .. translate("For further information ")
+ .. [[<a href="https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md" target="_blank">]]
+ .. translate("see online documentation")
+ .. [[</a>]]
+ .. translate("."))
+
+-- Main adblock options
+
+s = m:section(NamedSection, "global", "adblock")
+
+o1 = s:option(Flag, "adb_enabled", translate("Enable adblock"))
+o1.rmempty = false
+o1.default = 0
+
+if data.adblock ~= nil and (dnsFile1 ~= "" or dnsFile2 ~= "") then
+btn = s:option( Button, "_btn", translate("Suspend adblock"))
+ btn.inputstyle = "reset"
+ function btn.write()
+ luci.sys.call("/etc/init.d/adblock suspend")
+ end
+else
+ btn = s:option( Button, "_btn", translate("Resume adblock"))
+ btn.inputstyle = "apply"
+ function btn.write()
+ luci.sys.call("/etc/init.d/adblock resume")
+ end
+end
+
+o2 = s:option(Flag, "adb_debug", translate("Enable verbose debug logging"))
+o2.default = o2.disabled
+o2.rmempty = false
+
+o3 = s:option(Value, "adb_iface", translate("Restrict interface reload trigger to certain interface(s)"),
+ translate("Space separated list of interfaces that trigger a reload action. "..
+ "To disable reload trigger at all set it to 'false'."))
+o3.rmempty =false
+
+-- Runtime information
+
+ ds = s:option(DummyValue, "_dummy", translate("Runtime information"))
+ ds.template = "cbi/nullsection"
+
+ dv1 = s:option(DummyValue, "adblock_version", translate("Adblock version"))
+ if data.adblock ~= nil then
+ dv1.value = data.adblock.adblock.adblock_version or "?"
+ else
+ dv1.value = "?"
+ end
+ dv1.template = "adblock/runtime"
+
+ dv2 = s:option(DummyValue, "status", translate("Status"))
+ if dnsFile1 ~= "" or dnsFile2 ~= "" then
+ dv2.value = "active"
+ else
+ dv2.value = "suspended"
+ end
+ dv2.template = "adblock/runtime"
+
+ dv3 = s:option(DummyValue, "dns_backend", translate("DNS backend"))
+ if data.adblock ~= nil then
+ dv3.value = data.adblock.adblock.dns_backend or "?"
+ else
+ dv3.value = "?"
+ end
+ dv3.template = "adblock/runtime"
+
+ dv4 = s:option(DummyValue, "blocked_domains", translate("Blocked domains (overall)"))
+ if data.adblock ~= nil then
+ dv4.value = data.adblock.adblock.blocked_domains or "?"
+ else
+ dv4.value = "?"
+ end
+ dv4.template = "adblock/runtime"
+
+ dv5 = s:option(DummyValue, "last_rundate", translate("Last rundate"))
+ if data.adblock ~= nil then
+ dv5.value = data.adblock.adblock.last_rundate or "?"
+ else
+ dv5.value = "?"
+ end
+ dv5.template = "adblock/runtime"
+
+-- Blocklist options
+
+bl = m:section(TypedSection, "source", translate("Blocklist sources"),
+ translate("Available blocklist sources. ")
+ .. translate("Note that list URLs and Shallalist category selections are configurable in the 'Advanced' section."))
+bl.template = "cbi/tblsection"
+
+name = bl:option(Flag, "enabled", translate("Enabled"))
+name.rmempty = false
+
+des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
+
+-- Backup options
+
+s = m:section(NamedSection, "global", "adblock", translate("Backup options"))
+
+o4 = s:option(Flag, "adb_backup", translate("Enable blocklist backup"))
+o4.rmempty = false
+o4.default = 0
+
+o5 = s:option(Value, "adb_backupdir", translate("Backup directory"))
+o5.rmempty = false
+o5.datatype = "directory"
+
+return m
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua
new file mode 100644
index 0000000000..52db9a6941
--- /dev/null
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua
@@ -0,0 +1,39 @@
+-- Copyright 2016 Hannu Nyman
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local uci = require("uci")
+local adbinput = uci.get("adblock", "global", "adb_whitelist") or " "
+
+if not nixio.fs.access(adbinput) then
+ m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+ return m
+end
+
+m = SimpleForm("input", nil)
+ m:append(Template("adblock/config_css"))
+
+s = m:section(SimpleSection, nil,
+ translate("This form allows you to modify the content of the adblock whitelist (" .. adbinput .. ").<br />")
+ .. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards & regex are not."))
+
+f = s:option(TextValue, "data")
+ f.rmempty = true
+ f.datatype = "string"
+ f.rows = 20
+
+ function f.cfgvalue()
+ return nixio.fs.readfile(adbinput) or ""
+ end
+
+ function f.write(self, section, data)
+ return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+ end
+
+ function s.handle(self, state, data)
+ return true
+ end
+
+return m