2017-03-25 20:58:51 +00:00
-- Copyright 2017 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
2017-09-09 15:28:27 +00:00
local fs = require ( " nixio.fs " )
local uci = require ( " luci.model.uci " ) . cursor ( )
local sys = require ( " luci.sys " )
local util = require ( " luci.util " )
local dump = util.ubus ( " network.interface " , " dump " , { } )
local json = require ( " luci.jsonc " )
2017-04-10 05:01:33 +00:00
local adbinput = uci.get ( " adblock " , " global " , " adb_rtfile " ) or " /tmp/adb_runtime.json "
2017-09-09 15:28:27 +00:00
2017-11-04 13:13:22 +00:00
if not uci : get ( " adblock " , " extra " ) then
m = SimpleForm ( " " , nil , translate ( " Please update your adblock config file to use this package.<br /> " )
.. translatef ( " During opkg package installation use the '--force-maintainer' option to overwrite the pre-existing config file or download a fresh default config from "
2017-09-09 15:28:27 +00:00
.. " <a href= \" %s \" target= \" _blank \" > "
.. " here</a> " , " https://raw.githubusercontent.com/openwrt/packages/master/net/adblock/files/adblock.conf " ) )
m.submit = false
m.reset = false
return m
2017-06-29 10:58:33 +00:00
end
2017-03-25 20:58:51 +00:00
m = Map ( " adblock " , translate ( " Adblock " ) ,
translate ( " Configuration of the adblock package to block ad/abuse domains by using DNS. " )
2017-05-08 09:15:19 +00:00
.. translatef ( " For further information "
.. " <a href= \" %s \" target= \" _blank \" > "
2017-11-04 13:13:22 +00:00
.. " check the online documentation</a> " , " https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md " ) )
2017-05-08 09:15:19 +00:00
function m . on_after_commit ( self )
2017-11-04 13:13:22 +00:00
luci.sys . call ( " /etc/init.d/adblock reload >/dev/null 2>&1 " )
2017-05-08 09:15:19 +00:00
luci.http . redirect ( luci.dispatcher . build_url ( " admin " , " services " , " adblock " ) )
end
2017-03-25 20:58:51 +00:00
-- Main adblock options
s = m : section ( NamedSection , " global " , " adblock " )
2017-09-09 15:28:27 +00:00
local parse = json.parse ( fs.readfile ( adbinput ) or " " )
if parse then
status = parse.data . adblock_status
version = parse.data . adblock_version
2017-11-04 13:13:22 +00:00
domains = parse.data . overall_domains
2017-09-09 15:28:27 +00:00
fetch = parse.data . fetch_utility
backend = parse.data . dns_backend
rundate = parse.data . last_rundate
end
o1 = s : option ( Flag , " adb_enabled " , translate ( " Enable Adblock " ) )
o1.default = o1.disabled
2017-03-25 20:58:51 +00:00
o1.rmempty = false
2017-09-09 15:28:27 +00:00
btn = s : option ( Button , " " , translate ( " Suspend / Resume Adblock " ) )
if parse and status == " enabled " then
btn.inputtitle = translate ( " Suspend " )
btn.inputstyle = " reset "
2017-03-27 09:36:41 +00:00
btn.disabled = false
2017-03-25 20:58:51 +00:00
function btn . write ( )
2017-09-09 15:28:27 +00:00
luci.sys . call ( " /etc/init.d/adblock suspend >/dev/null 2>&1 " )
2017-05-08 09:15:19 +00:00
luci.http . redirect ( luci.dispatcher . build_url ( " admin " , " services " , " adblock " ) )
2017-03-25 20:58:51 +00:00
end
2017-09-09 15:28:27 +00:00
elseif parse and status == " paused " then
btn.inputtitle = translate ( " Resume " )
btn.inputstyle = " apply "
2017-03-27 09:36:41 +00:00
btn.disabled = false
2017-03-25 20:58:51 +00:00
function btn . write ( )
2017-09-09 15:28:27 +00:00
luci.sys . call ( " /etc/init.d/adblock resume >/dev/null 2>&1 " )
2017-05-08 09:15:19 +00:00
luci.http . redirect ( luci.dispatcher . build_url ( " admin " , " services " , " adblock " ) )
2017-03-25 20:58:51 +00:00
end
2017-09-09 15:28:27 +00:00
else
btn.inputtitle = translate ( " ------- " )
btn.inputstyle = " button "
btn.disabled = true
2017-03-25 20:58:51 +00:00
end
2017-09-09 15:28:27 +00:00
o2 = s : option ( ListValue , " adb_dns " , translate ( " DNS Backend (DNS Directory) " ) ,
translate ( " List of supported DNS backends with their default list export directory.<br /> " )
.. translate ( " To overwrite the default path use the 'DNS Directory' option in the extra section below. " ) )
o2 : value ( " dnsmasq " , " dnsmasq (/tmp/dnsmasq.d) " )
o2 : value ( " unbound " , " unbound (/var/lib/unbound) " )
2017-11-04 13:13:22 +00:00
o2 : value ( " named " , " named (/var/lib/bind) " )
2017-09-09 15:28:27 +00:00
o2 : value ( " kresd " , " kresd (/etc/kresd) " )
o2 : value ( " dnscrypt-proxy " , " dnscrypt-proxy (/tmp) " )
o2.rmempty = false
o3 = s : option ( ListValue , " adb_trigger " , translate ( " Startup Trigger " ) ,
2017-11-04 13:13:22 +00:00
translate ( " List of available network interfaces. Usually the startup will be triggered by the 'wan' interface.<br /> " )
2017-09-09 15:28:27 +00:00
.. translate ( " Choose 'none' to disable automatic startups, 'timed' to use a classic timeout (default 30 sec.) or select another trigger interface. " ) )
o3 : value ( " none " )
o3 : value ( " timed " )
if dump then
local i , v
for i , v in ipairs ( dump.interface ) do
if v.interface ~= " loopback " then
o3 : value ( v.interface )
end
end
end
2017-04-10 05:01:33 +00:00
o3.rmempty = false
2017-03-25 20:58:51 +00:00
-- Runtime information
2017-12-04 21:26:18 +00:00
ds = m : section ( NamedSection , " global " , " adblock " , translate ( " Runtime Information " ) )
2017-03-25 20:58:51 +00:00
2017-12-04 21:26:18 +00:00
dv1 = ds : option ( DummyValue , " " , translate ( " Adblock Status " ) )
2017-04-10 05:01:33 +00:00
dv1.template = " adblock/runtime "
if parse == nil then
dv1.value = translate ( " n/a " )
else
2017-09-11 13:08:37 +00:00
if status == " error " then
dv1.value = translate ( " error " )
elseif status == " disabled " then
dv1.value = translate ( " disabled " )
elseif status == " paused " then
dv1.value = translate ( " paused " )
else
dv1.value = translate ( " enabled " )
end
2017-04-10 05:01:33 +00:00
end
2017-06-29 10:58:33 +00:00
2017-12-04 21:26:18 +00:00
dv2 = ds : option ( DummyValue , " " , translate ( " Adblock Version " ) )
2017-04-10 05:01:33 +00:00
dv2.template = " adblock/runtime "
2017-06-29 10:58:33 +00:00
if parse == nil then
2017-04-10 05:01:33 +00:00
dv2.value = translate ( " n/a " )
2017-06-29 10:58:33 +00:00
else
dv2.value = version
2017-04-10 05:01:33 +00:00
end
2017-03-25 20:58:51 +00:00
2017-12-04 21:26:18 +00:00
dv3 = ds : option ( DummyValue , " " , translate ( " Download Utility (SSL Library) " ) ,
2017-04-10 05:01:33 +00:00
translate ( " For SSL protected blocklist sources you need a suitable SSL library, e.g. 'libustream-ssl' or the wget 'built-in'. " ) )
dv3.template = " adblock/runtime "
2017-06-29 10:58:33 +00:00
if parse == nil then
2017-04-10 05:01:33 +00:00
dv3.value = translate ( " n/a " )
2017-06-29 10:58:33 +00:00
else
dv3.value = fetch
2017-04-10 05:01:33 +00:00
end
2017-03-25 20:58:51 +00:00
2017-12-04 21:26:18 +00:00
dv4 = ds : option ( DummyValue , " " , translate ( " DNS Backend (DNS Directory) " ) )
2017-04-10 05:01:33 +00:00
dv4.template = " adblock/runtime "
2017-06-29 10:58:33 +00:00
if parse == nil then
2017-04-10 05:01:33 +00:00
dv4.value = translate ( " n/a " )
2017-06-29 10:58:33 +00:00
else
dv4.value = backend
2017-04-10 05:01:33 +00:00
end
2017-03-25 20:58:51 +00:00
2017-12-04 21:26:18 +00:00
dv5 = ds : option ( DummyValue , " " , translate ( " Overall Domains " ) )
2017-04-10 05:01:33 +00:00
dv5.template = " adblock/runtime "
2017-06-29 10:58:33 +00:00
if parse == nil then
2017-04-10 05:01:33 +00:00
dv5.value = translate ( " n/a " )
2017-06-29 10:58:33 +00:00
else
dv5.value = domains
2017-04-10 05:01:33 +00:00
end
2017-03-25 20:58:51 +00:00
2017-12-04 21:26:18 +00:00
dv6 = ds : option ( DummyValue , " " , translate ( " Last Run " ) )
2017-04-10 05:01:33 +00:00
dv6.template = " adblock/runtime "
2017-06-29 10:58:33 +00:00
if parse == nil then
2017-04-10 05:01:33 +00:00
dv6.value = translate ( " n/a " )
2017-06-29 10:58:33 +00:00
else
dv6.value = rundate
2017-04-10 05:01:33 +00:00
end
2017-03-25 20:58:51 +00:00
2017-04-10 05:01:33 +00:00
-- Blocklist table
2017-03-25 20:58:51 +00:00
2017-09-09 15:28:27 +00:00
bl = m : section ( TypedSection , " source " , translate ( " Blocklist Sources " ) ,
2017-03-25 20:58:51 +00:00
translate ( " Available blocklist sources. " )
2017-09-09 15:28:27 +00:00
.. translate ( " List URLs and Shallalist category selections are configurable in the 'Advanced' section.<br /> " )
2017-11-04 13:13:22 +00:00
.. translate ( " Caution: To prevent OOM exceptions on low memory devices with less than 64 MB free RAM, please do not select too many lists - 5-6 should be sufficient! " ) )
2017-03-25 20:58:51 +00:00
bl.template = " cbi/tblsection "
name = bl : option ( Flag , " enabled " , translate ( " Enabled " ) )
2017-04-10 05:01:33 +00:00
name.rmempty = false
ssl = bl : option ( DummyValue , " adb_src " , translate ( " SSL req. " ) )
function ssl . cfgvalue ( self , section )
local source = self.map : get ( section , " adb_src " )
if source and source : match ( " https:// " ) then
return translate ( " Yes " )
else
return translate ( " No " )
end
end
2017-03-25 20:58:51 +00:00
des = bl : option ( DummyValue , " adb_src_desc " , translate ( " Description " ) )
2017-04-25 21:17:08 +00:00
-- Extra options
2017-03-25 20:58:51 +00:00
2017-11-04 13:13:22 +00:00
e = m : section ( NamedSection , " extra " , " adblock " , translate ( " Extra Options " ) ,
2017-04-25 21:17:08 +00:00
translate ( " Options for further tweaking in case the defaults are not suitable for you. " ) )
2017-03-25 20:58:51 +00:00
2017-09-09 15:28:27 +00:00
e1 = e : option ( Flag , " adb_debug " , translate ( " Verbose Debug Logging " ) ,
translate ( " Enable verbose debug logging in case of any processing error. " ) )
2017-04-25 21:17:08 +00:00
e1.default = e1.disabled
e1.rmempty = false
2017-04-10 05:01:33 +00:00
2017-09-09 15:28:27 +00:00
e2 = e : option ( Flag , " adb_forcedns " , translate ( " Force Local DNS " ) ,
translate ( " Redirect all DNS queries from 'lan' zone to the local resolver. " ) )
2017-04-25 21:17:08 +00:00
e2.default = e2.disabled
e2.rmempty = false
2017-09-09 15:28:27 +00:00
e3 = e : option ( Flag , " adb_forcesrt " , translate ( " Force Overall Sort " ) ,
2017-11-04 13:13:22 +00:00
translate ( " Enable memory intense overall sort / duplicate removal on low memory devices (< 64 MB free RAM) " ) )
2017-04-25 21:17:08 +00:00
e3.default = e3.disabled
e3.rmempty = false
2017-11-04 13:13:22 +00:00
e4 = e : option ( Flag , " adb_backup " , translate ( " Enable Blocklist Backup " ) ,
translate ( " Create compressed blocklist backups, they will be used in case of download errors or during startup in backup mode. " ) )
2017-06-07 17:33:31 +00:00
e4.default = e4.disabled
2017-04-25 21:17:08 +00:00
e4.rmempty = false
2017-03-25 20:58:51 +00:00
2017-11-04 13:13:22 +00:00
e5 = e : option ( Value , " adb_backupdir " , translate ( " Backup Directory " ) ,
translate ( " Target directory for adblock backups. Please use only non-volatile disks, e.g. an external usb stick. " ) )
e5 : depends ( " adb_backup " , 1 )
e5.datatype = " directory "
e5.default = " /mnt "
e5.rmempty = true
2017-06-07 17:33:31 +00:00
2017-11-04 13:13:22 +00:00
e6 = e : option ( Flag , " adb_backup_mode " , translate ( " Backup Mode " ) ,
translate ( " Do not automatically update blocklists during startup, use blocklist backups instead. " ) )
e6 : depends ( " adb_backup " , 1 )
e6.default = e6.disabled
e6.rmempty = true
2017-09-09 15:28:27 +00:00
2017-11-04 13:13:22 +00:00
e7 = e : option ( Flag , " adb_whitelist_mode " , translate ( " Whitelist Mode " ) ,
translate ( " Block access to all domains except those explicitly listed in the whitelist file. " ) )
e7.default = e7.disabled
e7.rmempty = true
e8 = e : option ( Value , " adb_dnsdir " , translate ( " DNS Directory " ) ,
2017-09-09 15:28:27 +00:00
translate ( " Target directory for the generated blocklist 'adb_list.overall'. " ) )
2017-11-04 13:13:22 +00:00
e8.datatype = " directory "
e8.optional = true
2017-09-09 15:28:27 +00:00
2017-11-04 13:13:22 +00:00
e9 = e : option ( Value , " adb_whitelist " , translate ( " Whitelist File " ) ,
translate ( " Full path to the whitelist file. " ) )
e9.datatype = " file "
e9.default = " /etc/adblock/adblock.whitelist "
e9.optional = true
e10 = e : option ( Value , " adb_triggerdelay " , translate ( " Trigger Delay " ) ,
2017-09-09 15:28:27 +00:00
translate ( " Additional trigger delay in seconds before adblock processing begins. " ) )
2017-11-04 13:13:22 +00:00
e10.datatype = " range(1,60) "
e10.optional = true
2017-09-09 15:28:27 +00:00
2017-03-25 20:58:51 +00:00
return m