Merge pull request #2017 from chris5560/master-ddns
[oweals/luci.git] / applications / luci-app-adblock / luasrc / model / cbi / adblock / overview_tab.lua
1 -- Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
2 -- This is free software, licensed under the Apache License, Version 2.0
3
4 local fs   = require("nixio.fs")
5 local uci  = require("luci.model.uci").cursor()
6 local util = require("luci.util")
7 local dump = util.ubus("network.interface", "dump", {})
8
9 m = Map("adblock", translate("Adblock"),
10         translate("Configuration of the adblock package to block ad/abuse domains by using DNS. ")
11         .. translatef("For further information "
12         .. "<a href=\"%s\" target=\"_blank\">"
13         .. "check the online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md"))
14
15 -- Main adblock options
16
17 s = m:section(NamedSection, "global", "adblock")
18
19 o1 = s:option(Flag, "adb_enabled", translate("Enable Adblock"))
20 o1.default = o1.disabled
21 o1.rmempty = false
22
23 o2 = s:option(ListValue, "adb_dns", translate("DNS Backend (DNS Directory)"),
24         translate("List of supported DNS backends with their default list export directory. ")
25         .. translate("To overwrite the default path use the 'DNS Directory' option in the extra section below."))
26 o2:value("dnsmasq", "dnsmasq (/tmp)")
27 o2:value("unbound", "unbound (/var/lib/unbound)")
28 o2:value("named", "named (/var/lib/bind)")
29 o2:value("kresd", "kresd (/etc/kresd)")
30 o2:value("dnscrypt-proxy","dnscrypt-proxy (/tmp)")
31 o2.default = "dnsmasq (/tmp)"
32 o2.rmempty = false
33
34 o3 = s:option(ListValue, "adb_fetchutil", translate("Download Utility"),
35 translate("List of supported and fully pre-configured download utilities."))
36 o3:value("uclient-fetch")
37 o3:value("wget")
38 o3:value("curl")
39 o3:value("aria2c")
40 o3:value("wget-nossl", "wget-nossl (noSSL)")
41 o3:value("busybox", "wget-busybox (noSSL)")
42 o3.default = "uclient-fetch"
43 o3.rmempty = false
44
45 o4 = s:option(ListValue, "adb_trigger", translate("Startup Trigger"),
46         translate("List of available network interfaces. Usually the startup will be triggered by the 'wan' interface. ")
47         .. translate("Choose 'none' to disable automatic startups, 'timed' to use a classic timeout (default 30 sec.) or select another trigger interface."))
48 o4:value("none")
49 o4:value("timed")
50 if dump then
51         local i, v
52         for i, v in ipairs(dump.interface) do
53                 if v.interface ~= "loopback" then
54                         o4:value(v.interface)
55                 end
56         end
57 end
58 o4.rmempty = false
59
60 -- Runtime information
61
62 ds = s:option(DummyValue, "_dummy")
63 ds.template = "adblock/runtime"
64
65 -- Blocklist table
66
67 bl = m:section(TypedSection, "source", translate("Blocklist Sources"),
68         translate("<b>Caution:</b> To prevent OOM exceptions on low memory devices with less than 64 MB free RAM, please only select a few of them!"))
69 bl.template = "adblock/blocklist"
70
71 name = bl:option(Flag, "enabled", translate("Enabled"))
72 name.rmempty = false
73
74 ssl = bl:option(DummyValue, "adb_src", translate("SSL req."))
75 function ssl.cfgvalue(self, section)
76         local source = self.map:get(section, "adb_src")
77         if source and source:match("https://") then
78                 return translate("Yes")
79         else
80                 return translate("No")
81         end
82 end
83
84 des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
85
86 cat = bl:option(DynamicList, "adb_src_cat", translate("Archive Categories"))
87 cat.datatype = "uciname"
88 cat.optional = true
89
90 -- Extra options
91
92 e = m:section(NamedSection, "extra", "adblock", translate("Extra Options"),
93         translate("Options for further tweaking in case the defaults are not suitable for you."))
94
95 e1 = e:option(Flag, "adb_debug", translate("Verbose Debug Logging"),
96         translate("Enable verbose debug logging in case of any processing error."))
97 e1.default = e1.disabled
98 e1.rmempty = false
99
100 e2 = e:option(Flag, "adb_nice", translate("Low Priority Service"),
101         translate("Set the nice level to 'low priority' and the adblock background processing will take less resources from the system. ")
102         ..translate("This change requires a manual service stop/re-start to take effect."))
103 e2.default = e2.disabled
104 e2.disabled = "0"
105 e2.enabled = "10"
106 e2.rmempty = false
107
108 e3 = e:option(Flag, "adb_forcedns", translate("Force Local DNS"),
109         translate("Redirect all DNS queries from 'lan' zone to the local resolver, apply to udp and tcp protocol on ports 53, 853 and 5353."))
110 e3.default = e3.disabled
111 e3.rmempty = false
112
113 e4 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"),
114         translate("Enable memory intense overall sort / duplicate removal on low memory devices (&lt; 64 MB free RAM)"))
115 e4.default = e4.disabled
116 e4.rmempty = false
117
118 e5 = e:option(Flag, "adb_backup", translate("Enable Blocklist Backup"),
119         translate("Create compressed blocklist backups, they will be used in case of download errors or during startup in backup mode."))
120 e5.default = e5.disabled
121 e5.rmempty = false
122
123 e6 = e:option(Value, "adb_backupdir", translate("Backup Directory"),
124         translate("Target directory for adblock backups. Please use only non-volatile disks, e.g. an external usb stick."))
125 e6:depends("adb_backup", 1)
126 e6.datatype = "directory"
127 e6.default = "/mnt"
128 e5.rmempty = true
129
130 e7 = e:option(Flag, "adb_backup_mode", translate("Backup Mode"),
131         translate("Do not automatically update blocklists during startup, use blocklist backups instead."))
132 e7:depends("adb_backup", 1)
133 e7.default = e7.disabled
134 e7.rmempty = true
135
136 e8 = e:option(Value, "adb_maxqueue", translate("Max. Download Queue"),
137         translate("Size of the download queue to handle downloads &amp; list processing in parallel (default '4'). ")
138         .. translate("For further performance improvements you can raise this value, e.g. '8' or '16' should be safe."))
139 e8.default = 4
140 e8.datatype = "range(1,32)"
141 e8.rmempty = false
142
143 e9 = e:option(Flag, "adb_jail", translate("'Jail' Blocklist Creation"),
144         translate("Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all domains except those listed in the whitelist file. ")
145         .. translate("You can use this restrictive blocklist manually e.g. for guest wifi or kidsafe configurations."))
146 e9.default = e9.disabled
147 e9.rmempty = true
148
149 e9 = e:option(Flag, "adb_dnsflush", translate("Flush DNS Cache"),
150         translate("Flush DNS Cache after adblock processing."))
151 e9.default = e9.disabled
152 e9.rmempty = true
153
154 e10 = e:option(Flag, "adb_notify", translate("Email Notification"),
155         translate("Send notification emails in case of a processing error or if domain count is &le; 0. ")
156         .. translate("Please note: this needs additional 'msmtp' package installation and setup."))
157 e10.default = e10.disabled
158 e10.rmempty = true
159
160 e11 = e:option(Value, "adb_notifycnt", translate("Email Notification Count"),
161         translate("Raise the minimum email notification count, to get emails if the overall count is less or equal to the given limit (default 0), ")
162         .. translate("e.g. to receive an email notification with every adblock update set this value to 150000."))
163 e11.default = 0
164 e11.datatype = "min(0)"
165 e11.optional = true
166
167 e12 = e:option(Value, "adb_dnsdir", translate("DNS Directory"),
168         translate("Target directory for the generated blocklist 'adb_list.overall'."))
169 e12.datatype = "directory"
170 e12.optional = true
171
172 e13 = e:option(Value, "adb_whitelist", translate("Whitelist File"),
173         translate("Full path to the whitelist file."))
174 e13.datatype = "file"
175 e13.default = "/etc/adblock/adblock.whitelist"
176 e13.optional = true
177
178 e14 = e:option(Value, "adb_triggerdelay", translate("Trigger Delay"),
179         translate("Additional trigger delay in seconds before adblock processing begins."))
180 e14.datatype = "range(1,60)"
181 e14.optional = true
182
183 return m