2015-05-20 13:38:16 +00:00
--[[
LuCI E2Guardian module
Copyright ( C ) 2015 , Itus Networks , Inc .
Licensed under the Apache License , Version 2.0 ( the " License " ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : // www.apache . org / licenses / LICENSE - 2.0
Author : Marko Ratkaj < marko.ratkaj @ sartura.hr >
Luka Perkov < luka.perkov @ sartura.hr >
] ] --
local fs = require " nixio.fs "
local sys = require " luci.sys "
m = Map ( " e2guardian " , translate ( " E2Guardian " ) )
m.on_after_commit = function ( ) luci.sys . call ( " /etc/init.d/e2guardian restart " ) end
s = m : section ( TypedSection , " e2guardian " )
s.anonymous = true
s.addremove = false
s : tab ( " tab_general " , translate ( " General Settings " ) )
s : tab ( " tab_additional " , translate ( " Additional Settings " ) )
s : tab ( " tab_logs " , translate ( " Logs " ) )
----------------- General Settings Tab -----------------------
filterip = s : taboption ( " tab_general " , Value , " filterip " , translate ( " IP that E2Guardian listens " ) )
filterip.datatype = " ip4addr "
filterports = s : taboption ( " tab_general " , Value , " filterports " , translate ( " Port that E2Guardian listens " ) )
filterports.datatype = " portrange "
filterports.placeholder = " 0-65535 "
proxyip = s : taboption ( " tab_general " , Value , " proxyip " , translate ( " IP address of the proxy " ) )
proxyip.datatype = " ip4addr "
proxyip.default = " 127.0.0.1 "
proxyport = s : taboption ( " tab_general " , Value , " proxyport " , translate ( " Port of the proxy " ) )
proxyport.datatype = " portrange "
proxyport.placeholder = " 0-65535 "
languagedir = s : taboption ( " tab_general " , Value , " languagedir " , translate ( " Language dir " ) )
languagedir.datatype = " string "
languagedir.default = " /usr/share/e2guardian/languages "
language = s : taboption ( " tab_general " , Value , " language " , translate ( " Language to use " ) )
language.datatype = " string "
language.default = " ukenglish "
loglevel = s : taboption ( " tab_general " , ListValue , " loglevel " , translate ( " Logging Settings " ) )
loglevel : value ( " 0 " , translate ( " none " ) )
loglevel : value ( " 1 " , translate ( " just denied " ) )
loglevel : value ( " 2 " , translate ( " all text based " ) )
loglevel : value ( " 3 " , translate ( " all requests " ) )
loglevel.default = " 2 "
logexceptionhits = s : taboption ( " tab_general " , ListValue , " logexceptionhits " , translate ( " Log Exception Hits " ) )
logexceptionhits : value ( " 0 " , translate ( " never " ) )
2016-03-26 10:53:07 +00:00
logexceptionhits : value ( " 1 " , translate ( " log, but don't mark as exceptions " ) )
2015-05-20 13:38:16 +00:00
logexceptionhits : value ( " 2 " , translate ( " log and mark " ) )
logexceptionhits.default = " 2 "
logfileformat = s : taboption ( " tab_general " , ListValue , " logfileformat " , translate ( " Log File Format " ) )
logfileformat : value ( " 1 " , translate ( " DansgGuardian format, space delimited " ) )
logfileformat : value ( " 2 " , translate ( " CSV-style format " ) )
logfileformat : value ( " 3 " , translate ( " Squid Log File Format " ) )
logfileformat : value ( " 4 " , translate ( " Tab delimited " ) )
logfileformat : value ( " 5 " , translate ( " Protex format " ) )
logfileformat : value ( " 6 " , translate ( " Protex format with server field blanked " ) )
logfileformat.default = " 1 "
accessdeniedaddress = s : taboption ( " tab_general " , Value , " accessdeniedaddress " , translate ( " Access denied address " ) ,
translate ( " Server to which the cgi e2guardian reporting script was copied. Reporting levels 1 and 2 only " ) )
accessdeniedaddress.datatype = " string "
accessdeniedaddress.default = " http://YOURSERVER.YOURDOMAIN/cgi-bin/e2guardian.pl "
usecustombannedimage = s : taboption ( " tab_general " , ListValue , " usecustombannedimage " , translate ( " Banned image replacement " ) )
usecustombannedimage : value ( " on " , translate ( " Yes " ) )
usecustombannedimage : value ( " off " , translate ( " No " ) )
usecustombannedimage.default = " on "
custombannedimagefile = s : taboption ( " tab_general " , Value , " custombannedimagefile " , translate ( " Custom banned image file " ) )
custombannedimagefile.datatype = " string "
custombannedimagefile.default = " /usr/share/e2guardian/transparent1x1.gif "
usecustombannedflash = s : taboption ( " tab_general " , ListValue , " usecustombannedflash " , translate ( " Banned flash replacement " ) )
usecustombannedflash : value ( " on " , translate ( " Yes " ) )
usecustombannedflash : value ( " off " , translate ( " No " ) )
usecustombannedflash.default = " on "
custombannedflashfile = s : taboption ( " tab_general " , Value , " custombannedflashfile " , translate ( " Custom banned flash file " ) )
custombannedflashfile.datatype = " string "
custombannedflashfile.default = " /usr/share/e2guardian/blockedflash.swf "
filtergroups = s : taboption ( " tab_general " , Value , " filtergroups " , translate ( " Number of filter groups " ) )
filtergroups.datatype = " and(uinteger,min(1)) "
filtergroups.default = " 1 "
filtergroupslist = s : taboption ( " tab_general " , Value , " filtergroupslist " , translate ( " List of filter groups " ) )
filtergroupslist.datatype = " string "
filtergroupslist.default = " /etc/e2guardian/lists/filtergroupslist "
bannediplist = s : taboption ( " tab_general " , Value , " bannediplist " , translate ( " List of banned IPs " ) )
bannediplist.datatype = " string "
bannediplist.default = " /etc/e2guardian/lists/bannediplist "
exceptioniplist = s : taboption ( " tab_general " , Value , " exceptioniplist " , translate ( " List of IP exceptions " ) )
exceptioniplist.datatype = " string "
exceptioniplist.default = " /etc/e2guardian/lists/exceptioniplist "
perroomblockingdirectory = s : taboption ( " tab_general " , Value , " perroomblockingdirectory " , translate ( " Per-Room blocking definition directory " ) )
perroomblockingdirectory.datatype = " string "
perroomblockingdirectory.default = " /etc/e2guardian/lists/bannedrooms/ "
showweightedfound = s : taboption ( " tab_general " , ListValue , " showweightedfound " , translate ( " Show weighted phrases found " ) )
showweightedfound : value ( " on " , translate ( " Yes " ) )
showweightedfound : value ( " off " , translate ( " No " ) )
showweightedfound.default = " on "
weightedphrasemode = s : taboption ( " tab_general " , ListValue , " weightedphrasemode " , translate ( " Weighted phrase mode " ) )
weightedphrasemode : value ( " 0 " , translate ( " off " ) )
weightedphrasemode : value ( " 1 " , translate ( " on, normal operation " ) )
weightedphrasemode : value ( " 2 " , translate ( " on, phrase found only counts once on a page " ) )
weightedphrasemode.default = " 2 "
urlcachenumber = s : taboption ( " tab_general " , Value , " urlcachenumber " , translate ( " Clean result caching for URLs " ) )
urlcachenumber.datatype = " and(uinteger,min(0)) "
urlcachenumber.default = " 1000 "
urlcacheage = s : taboption ( " tab_general " , Value , " urlcacheage " , translate ( " Age before they should be ignored in seconds " ) )
urlcacheage.datatype = " and(uinteger,min(0)) "
urlcacheage.default = " 900 "
scancleancache = s : taboption ( " tab_general " , ListValue , " scancleancache " , translate ( " Cache for content (AV) scans as 'clean' " ) )
scancleancache : value ( " on " , translate ( " Yes " ) )
scancleancache : value ( " off " , translate ( " No " ) )
scancleancache.default = " on "
phrasefiltermode = s : taboption ( " tab_general " , ListValue , " phrasefiltermode " , translate ( " Filtering options " ) )
phrasefiltermode : value ( " 0 " , translate ( " raw " ) )
phrasefiltermode : value ( " 1 " , translate ( " smart " ) )
phrasefiltermode : value ( " 2 " , translate ( " both raw and smart " ) )
phrasefiltermode : value ( " 3 " , translate ( " meta/title " ) )
phrasefiltermode.default = " 2 "
preservecase = s : taboption ( " tab_general " , ListValue , " perservecase " , translate ( " Lower caseing options " ) )
preservecase : value ( " 0 " , translate ( " force lower case " ) )
2016-03-26 10:53:07 +00:00
preservecase : value ( " 1 " , translate ( " don't change " ) )
2015-05-20 13:38:16 +00:00
preservecase : value ( " 2 " , translate ( " scan fist in lower, then in original " ) )
preservecase.default = " 0 "
hexdecodecontent = s : taboption ( " tab_general " , ListValue , " hexdecodecontent " , translate ( " Hex decoding options " ) )
hexdecodecontent : value ( " on " , translate ( " Yes " ) )
hexdecodecontent : value ( " off " , translate ( " No " ) )
hexdecodecontent.default = " off "
forcequicksearch = s : taboption ( " tab_general " , ListValue , " forcequicksearch " , translate ( " Quick search " ) )
forcequicksearch : value ( " on " , translate ( " Yes " ) )
forcequicksearch : value ( " off " , translate ( " No " ) )
forcequicksearch.default = " off "
reverseaddresslookups = s : taboption ( " tab_general " , ListValue , " reverseaddresslookups " , translate ( " Reverse lookups for banned site and URLs " ) )
reverseaddresslookups : value ( " on " , translate ( " Yes " ) )
reverseaddresslookups : value ( " off " , translate ( " No " ) )
reverseaddresslookups.default = " off "
reverseclientiplookups = s : taboption ( " tab_general " , ListValue , " reverseclientiplookups " , translate ( " Reverse lookups for banned and exception IP lists " ) )
reverseclientiplookups : value ( " on " , translate ( " Yes " ) )
reverseclientiplookups : value ( " off " , translate ( " No " ) )
reverseclientiplookups.default = " off "
logclienthostnames = s : taboption ( " tab_general " , ListValue , " logclienthostnames " , translate ( " Perform reverse lookups on client IPs for successful requests " ) )
logclienthostnames : value ( " on " , translate ( " Yes " ) )
logclienthostnames : value ( " off " , translate ( " No " ) )
logclienthostnames.default = " off "
createlistcachefiles = s : taboption ( " tab_general " , ListValue , " createlistcachefiles " , translate ( " Build bannedsitelist and bannedurllist cache files " ) )
createlistcachefiles : value ( " on " , translate ( " Yes " ) )
createlistcachefiles : value ( " off " , translate ( " No " ) )
createlistcachefiles.default = " on "
prefercachedlists = s : taboption ( " tab_general " , ListValue , " prefercachedlists " , translate ( " Prefer cached list files " ) )
prefercachedlists : value ( " on " , translate ( " Yes " ) )
prefercachedlists : value ( " off " , translate ( " No " ) )
prefercachedlists.default = " off "
maxuploadsize = s : taboption ( " tab_general " , Value , " maxuploadsize " , translate ( " Max upload size (in Kbytes) " ) )
maxuploadsize : value ( " -1 " , translate ( " no blocking " ) )
maxuploadsize : value ( " 0 " , translate ( " complete block " ) )
maxuploadsize.default = " -1 "
maxcontentfiltersize = s : taboption ( " tab_general " , Value , " maxcontentfiltersize " , translate ( " Max content filter size " ) ,
translate ( " The value must not be higher than max content ram cache scan size or 0 to match it " ) )
maxcontentfiltersize.datatype = " and(uinteger,min(0)) "
maxcontentfiltersize.default = " 256 "
maxcontentramcachescansize = s : taboption ( " tab_general " , Value , " maxcontentramcachescansize " , translate ( " Max content ram cache scan size " ) ,
translate ( " This is the max size of file that DG will download and cache in RAM " ) )
maxcontentramcachescansize.datatype = " and(uinteger,min(0)) "
maxcontentramcachescansize.default = " 2000 "
maxcontentfilecachescansize = s : taboption ( " tab_general " , Value , " maxcontentfilecachescansize " , translate ( " Max content file cache scan size " ) )
maxcontentfilecachescansize.datatype = " and(uinteger,min(0)) "
maxcontentfilecachescansize.default = " 20000 "
proxytimeout = s : taboption ( " tab_general " , Value , " proxytimeout " , translate ( " Proxy timeout (5-100) " ) )
proxytimeout.datatype = " range(5,100) "
proxytimeout.default = " 20 "
proxyexchange = s : taboption ( " tab_general " , Value , " proxyexchange " , translate ( " Proxy header excahnge (20-300) " ) )
proxyexchange.datatype = " range(20,300) "
proxyexchange.default = " 20 "
pcontimeout = s : taboption ( " tab_general " , Value , " pcontimeout " , translate ( " Pconn timeout " ) ,
translate ( " How long a persistent connection will wait for other requests " ) )
pcontimeout.datatype = " range(5,300) "
pcontimeout.default = " 55 "
filecachedir = s : taboption ( " tab_general " , Value , " filecachedir " , translate ( " File cache directory " ) )
filecachedir.datatype = " string "
filecachedir.default = " /tmp "
deletedownloadedtempfiles = s : taboption ( " tab_general " , ListValue , " deletedownloadedtempfiles " , translate ( " Delete file cache after user completes download " ) )
deletedownloadedtempfiles : value ( " on " , translate ( " Yes " ) )
deletedownloadedtempfiles : value ( " off " , translate ( " No " ) )
deletedownloadedtempfiles.default = " on "
initialtrickledelay = s : taboption ( " tab_general " , Value , " initialtrickledelay " , translate ( " Initial Trickle delay " ) ,
translate ( " Number of seconds a browser connection is left waiting before first being sent *something* to keep it alive " ) )
initialtrickledelay.datatype = " and(uinteger,min(0)) "
initialtrickledelay.default = " 20 "
trickledelay = s : taboption ( " tab_general " , Value , " trickledelay " , translate ( " Trickle delay " ) ,
translate ( " Number of seconds a browser connection is left waiting before being sent more *something* to keep it alive " ) )
trickledelay.datatype = " and(uinteger,min(0)) "
trickledelay.default = " 10 "
downloadmanager = s : taboption ( " tab_general " , Value , " downloadmanager " , translate ( " Download manager " ) )
downloadmanager.datatype = " string "
downloadmanager.default = " /etc/e2guardian/downloadmanagers/default.conf "
contentscannertimeout = s : taboption ( " tab_general " , Value , " contentscannertimeout " , translate ( " Content scanner timeout " ) )
contentscannertimeout.datatype = " and(uinteger,min(0)) "
contentscannertimeout.default = " 60 "
contentscanexceptions = s : taboption ( " tab_general " , ListValue , " contentscanexceptions " , translate ( " Content scan exceptions " ) )
contentscanexceptions : value ( " on " , translate ( " Yes " ) )
contentscanexceptions : value ( " off " , translate ( " No " ) )
contentscanexceptions.default = " off "
recheckreplacedurls = s : taboption ( " tab_general " , ListValue , " recheckreplacedurls " , translate ( " e-check replaced URLs " ) )
recheckreplacedurls : value ( " on " , translate ( " Yes " ) )
recheckreplacedurls : value ( " off " , translate ( " No " ) )
recheckreplacedurls.default = " off "
forwardedfor = s : taboption ( " tab_general " , ListValue , " forwardedfor " , translate ( " Misc setting: forwardedfor " ) ,
translate ( " If on, it may help solve some problem sites that need to know the source ip. " ) )
forwardedfor : value ( " on " , translate ( " Yes " ) )
forwardedfor : value ( " off " , translate ( " No " ) )
forwardedfor.default = " off "
usexforwardedfor = s : taboption ( " tab_general " , ListValue , " usexforwardedfor " , translate ( " Misc setting: usexforwardedfor " ) ,
translate ( " This is for when you have squid between the clients and E2Guardian " ) )
usexforwardedfor : value ( " on " , translate ( " Yes " ) )
usexforwardedfor : value ( " off " , translate ( " No " ) )
usexforwardedfor.default = " off "
logconnectionhandlingerrors = s : taboption ( " tab_general " , ListValue , " logconnectionhandlingerrors " , translate ( " Log debug info about log()ing and accept()ing " ) )
logconnectionhandlingerrors : value ( " on " , translate ( " Yes " ) )
logconnectionhandlingerrors : value ( " off " , translate ( " No " ) )
logconnectionhandlingerrors.default = " on "
logchildprocesshandling = s : taboption ( " tab_general " , ListValue , " logchildprocesshandling " , translate ( " Log child process handling " ) )
logchildprocesshandling : value ( " on " , translate ( " Yes " ) )
logchildprocesshandling : value ( " off " , translate ( " No " ) )
logchildprocesshandling.default = " off "
maxchildren = s : taboption ( " tab_general " , Value , " maxchildren " , translate ( " Max number of processes to spawn " ) )
maxchildren.datatype = " and(uinteger,min(0)) "
maxchildren.default = " 180 "
minchildren = s : taboption ( " tab_general " , Value , " minchildren " , translate ( " Min number of processes to spawn " ) )
minchildren.datatype = " and(uinteger,min(0)) "
minchildren.default = " 20 "
minsparechildren = s : taboption ( " tab_general " , Value , " minsparechildren " , translate ( " Min number of processes to keep ready " ) )
minsparechildren.datatype = " and(uinteger,min(0)) "
minsparechildren.default = " 16 "
preforkchildren = s : taboption ( " tab_general " , Value , " preforkchildren " , translate ( " Sets minimum nuber of processes when it runs out " ) )
preforkchildren.datatype = " and(uinteger,min(0)) "
preforkchildren.default = " 10 "
maxsparechildren = s : taboption ( " tab_general " , Value , " maxsparechildren " , translate ( " Sets the maximum number of processes to have doing nothing " ) )
maxsparechildren.datatype = " and(uinteger,min(0)) "
maxsparechildren.default = " 32 "
maxagechildren = s : taboption ( " tab_general " , Value , " maxagechildren " , translate ( " Max age of child process " ) )
maxagechildren.datatype = " and(uinteger,min(0)) "
maxagechildren.default = " 500 "
maxips = s : taboption ( " tab_general " , Value , " maxips " , translate ( " Max number of clinets allowed to connect " ) )
maxips : value ( " 0 " , translate ( " no limit " ) )
maxips.default = " 0 "
ipipcfilename = s : taboption ( " tab_general " , Value , " ipipcfilename " , translate ( " IP list IPC server directory and filename " ) )
ipipcfilename.datatype = " string "
ipipcfilename.default = " /tmp/.dguardianipc "
urlipcfilename = s : taboption ( " tab_general " , Value , " urlipcfilename " , translate ( " Defines URL list IPC server directory and filename used to communicate with the URL cache process " ) )
urlipcfilename.datatype = " string "
urlipcfilename.default = " /tmp/.dguardianurlipc "
ipcfilename = s : taboption ( " tab_general " , Value , " ipcfilename " , translate ( " Defines URL list IPC server directory and filename used to communicate with the URL cache process " ) )
ipcfilename.datatype = " string "
ipcfilename.default = " /tmp/.dguardianipipc "
nodeamon = s : taboption ( " tab_general " , ListValue , " nodeamon " , translate ( " Disable deamoning " ) )
nodeamon : value ( " on " , translate ( " Yes " ) )
nodeamon : value ( " off " , translate ( " No " ) )
nodeamon.default = " off "
nologger = s : taboption ( " tab_general " , ListValue , " nologger " , translate ( " Disable logger " ) )
nologger : value ( " on " , translate ( " Yes " ) )
nologger : value ( " off " , translate ( " No " ) )
nologger.default = " off "
logadblock = s : taboption ( " tab_general " , ListValue , " logadblock " , translate ( " Enable logging of ADs " ) )
logadblock : value ( " on " , translate ( " Yes " ) )
logadblock : value ( " off " , translate ( " No " ) )
logadblock.default = " off "
loguseragent = s : taboption ( " tab_general " , ListValue , " loguseragent " , translate ( " Enable logging of client user agent " ) )
loguseragent : value ( " on " , translate ( " Yes " ) )
loguseragent : value ( " off " , translate ( " No " ) )
loguseragent.default = " off "
softrestart = s : taboption ( " tab_general " , ListValue , " softrestart " , translate ( " Enable soft restart " ) )
softrestart : value ( " on " , translate ( " Yes " ) )
softrestart : value ( " off " , translate ( " No " ) )
softrestart.default = " off "
------------------------ Additional Settings Tab ----------------------------
e2guardian_config_file = s : taboption ( " tab_additional " , TextValue , " _data " , " " )
e2guardian_config_file.wrap = " off "
e2guardian_config_file.rows = 25
e2guardian_config_file.rmempty = false
function e2guardian_config_file . cfgvalue ( )
local uci = require " luci.model.uci " . cursor_state ( )
file = " /etc/e2guardian/e2guardianf1.conf "
if file then
return fs.readfile ( file ) or " "
else
return " "
end
end
function e2guardian_config_file . write ( self , section , value )
if value then
local uci = require " luci.model.uci " . cursor_state ( )
file = " /etc/e2guardian/e2guardianf1.conf "
fs.writefile ( file , value : gsub ( " \r \n " , " \n " ) )
end
end
---------------------------- Logs Tab -----------------------------
e2guardian_logfile = s : taboption ( " tab_logs " , TextValue , " lines " , " " )
e2guardian_logfile.wrap = " off "
e2guardian_logfile.rows = 25
e2guardian_logfile.rmempty = true
function e2guardian_logfile . cfgvalue ( )
local uci = require " luci.model.uci " . cursor_state ( )
file = " /tmp/e2guardian/access.log "
if file then
return fs.readfile ( file ) or " "
else
return " Can't read log file "
end
end
function e2guardian_logfile . write ( )
return " "
end
return m