2021-02-04 15:05:54 +00:00
'use strict' ;
'require view' ;
'require poll' ;
'require fs' ;
'require ui' ;
'require uci' ;
'require form' ;
'require tools.widgets as widgets' ;
2021-02-10 21:18:00 +00:00
function handleAction ( ev ) {
2021-02-04 15:05:54 +00:00
fs . exec _direct ( '/etc/init.d/banip' , [ ev ] )
}
return view . extend ( {
2023-03-06 14:29:08 +00:00
load : function ( ) {
2021-02-04 15:05:54 +00:00
return Promise . all ( [
2023-03-06 14:29:08 +00:00
L . resolveDefault ( fs . read _direct ( '/etc/banip/banip.feeds' ) , '' ) ,
2021-02-04 15:05:54 +00:00
L . resolveDefault ( fs . read _direct ( '/etc/banip/banip.countries' ) , '' ) ,
uci . load ( 'banip' )
] ) ;
} ,
2023-03-06 14:29:08 +00:00
render : function ( result ) {
2021-02-04 15:05:54 +00:00
var m , s , o ;
2023-03-06 14:29:08 +00:00
m = new form . Map ( 'banip' , 'banIP' , _ ( ' Configuration of the banIP package to ban incoming and outgoing ip addresses / subnets via sets in nftables . \
2021-02-04 15:05:54 +00:00
For further information < a href = "https://github.com/openwrt/packages/blob/master/net/banip/files/README.md" target = "_blank" rel = "noreferrer noopener" > check the online documentation < / a > ' ) ) ;
/ *
poll runtime information
* /
2023-04-06 17:59:54 +00:00
var buttons , rt _res , inf _stat , inf _version , inf _elements , inf _feeds , inf _devices , inf _subnets , inf _system , nft _infos , run _infos , inf _flags , last _run
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
pollData : poll . add ( function ( ) {
2023-04-06 17:59:54 +00:00
return L . resolveDefault ( fs . stat ( '/var/run/banip.lock' ) ) . then ( function ( stat ) {
buttons = document . querySelectorAll ( '.cbi-button' ) ;
2021-02-04 15:05:54 +00:00
inf _stat = document . getElementById ( 'status' ) ;
2023-04-06 17:59:54 +00:00
if ( stat ) {
for ( var i = 0 ; i < buttons . length ; i ++ ) {
buttons [ i ] . setAttribute ( 'disabled' , 'true' ) ;
2021-02-04 15:05:54 +00:00
}
2023-04-06 17:59:54 +00:00
if ( inf _stat && ! inf _stat . classList . contains ( 'spinning' ) ) {
inf _stat . classList . add ( 'spinning' ) ;
2021-02-04 15:05:54 +00:00
}
2023-04-06 17:59:54 +00:00
} else {
for ( var i = 0 ; i < buttons . length ; i ++ ) {
buttons [ i ] . removeAttribute ( 'disabled' ) ;
}
if ( inf _stat && inf _stat . classList . contains ( 'spinning' ) ) {
inf _stat . classList . remove ( 'spinning' ) ;
2021-02-04 15:05:54 +00:00
}
}
2023-04-06 17:59:54 +00:00
L . resolveDefault ( fs . exec _direct ( '/etc/init.d/banip' , [ 'status' ] ) ) . then ( function ( result ) {
if ( result ) {
rt _res = result . trim ( ) . split ( '\n' ) ;
if ( rt _res ) {
for ( var i = 0 ; i < rt _res . length ; i ++ ) {
if ( rt _res [ i ] . match ( /^\s+\+\sstatus\s+\:\s+(.*)$/ ) ) {
rt _res . status = rt _res [ i ] . match ( /^\s+\+\sstatus\s+\:\s+(.*)$/ ) [ 1 ] ;
} else if ( rt _res [ i ] . match ( /^\s+\+\sversion\s+\:\s+(.*)$/ ) ) {
rt _res . version = rt _res [ i ] . match ( /^\s+\+\sversion\s+\:\s+(.*)$/ ) [ 1 ] ;
} else if ( rt _res [ i ] . match ( /^\s+\+\selement_count\s+\:\s+(.*)$/ ) ) {
rt _res . element _count = rt _res [ i ] . match ( /^\s+\+\selement_count\s+\:\s+(.*)$/ ) [ 1 ] ;
} else if ( rt _res [ i ] . match ( /^\s+\+\sactive_feeds\s+\:\s+(.*)$/ ) ) {
rt _res . active _feeds = rt _res [ i ] . match ( /^\s+\+\sactive_feeds\s+\:\s+(.*)$/ ) [ 1 ] ;
} else if ( rt _res [ i ] . match ( /^\s+\+\sactive_devices\s+\:\s+(.*)$/ ) ) {
rt _res . active _devices = rt _res [ i ] . match ( /^\s+\+\sactive_devices\s+\:\s+(.*)$/ ) [ 1 ] ;
} else if ( rt _res [ i ] . match ( /^\s+\+\sactive_subnets\s+\:\s+(.*)$/ ) ) {
rt _res . active _subnets = rt _res [ i ] . match ( /^\s+\+\sactive_subnets\s+\:\s+(.*)$/ ) [ 1 ] ;
} else if ( rt _res [ i ] . match ( /^\s+\+\snft_info\s+\:\s+(.*)$/ ) ) {
rt _res . nft _info = rt _res [ i ] . match ( /^\s+\+\snft_info\s+\:\s+(.*)$/ ) [ 1 ] ;
} else if ( rt _res [ i ] . match ( /^\s+\+\srun_info\s+\:\s+(.*)$/ ) ) {
rt _res . run _info = rt _res [ i ] . match ( /^\s+\+\srun_info\s+\:\s+(.*)$/ ) [ 1 ] ;
} else if ( rt _res [ i ] . match ( /^\s+\+\srun_flags\s+\:\s+(.*)$/ ) ) {
rt _res . run _flags = rt _res [ i ] . match ( /^\s+\+\srun_flags\s+\:\s+(.*)$/ ) [ 1 ] ;
} else if ( rt _res [ i ] . match ( /^\s+\+\slast_run\s+\:\s+(.*)$/ ) ) {
rt _res . last _run = rt _res [ i ] . match ( /^\s+\+\slast_run\s+\:\s+(.*)$/ ) [ 1 ] ;
} else if ( rt _res [ i ] . match ( /^\s+\+\ssystem_info\s+\:\s+(.*)$/ ) ) {
rt _res . system _info = rt _res [ i ] . match ( /^\s+\+\ssystem_info\s+\:\s+(.*)$/ ) [ 1 ] ;
}
}
2023-03-10 18:49:14 +00:00
}
2023-04-06 17:59:54 +00:00
if ( rt _res ) {
inf _stat = document . getElementById ( 'status' ) ;
if ( inf _stat ) {
inf _stat . textContent = rt _res . status || '-' ;
}
inf _version = document . getElementById ( 'version' ) ;
if ( inf _version ) {
inf _version . textContent = rt _res . version || '-' ;
}
inf _elements = document . getElementById ( 'elements' ) ;
if ( inf _elements ) {
inf _elements . textContent = rt _res . element _count || '-' ;
}
inf _feeds = document . getElementById ( 'feeds' ) ;
if ( inf _feeds ) {
inf _feeds . textContent = rt _res . active _feeds || '-' ;
}
inf _devices = document . getElementById ( 'devices' ) ;
if ( inf _devices ) {
inf _devices . textContent = rt _res . active _devices || '-' ;
}
inf _subnets = document . getElementById ( 'subnets' ) ;
if ( inf _subnets ) {
inf _subnets . textContent = rt _res . active _subnets || '-' ;
}
nft _infos = document . getElementById ( 'nft' ) ;
if ( nft _infos ) {
nft _infos . textContent = rt _res . nft _info || '-' ;
}
run _infos = document . getElementById ( 'run' ) ;
if ( run _infos ) {
run _infos . textContent = rt _res . run _info || '-' ;
}
inf _flags = document . getElementById ( 'flags' ) ;
if ( inf _flags ) {
inf _flags . textContent = rt _res . run _flags || '-' ;
}
last _run = document . getElementById ( 'last' ) ;
if ( last _run ) {
last _run . textContent = rt _res . last _run || '-' ;
}
inf _system = document . getElementById ( 'system' ) ;
if ( inf _system ) {
inf _system . textContent = rt _res . system _info || '-' ;
}
2021-02-04 15:05:54 +00:00
}
2023-04-06 17:59:54 +00:00
} else {
inf _stat = document . getElementById ( 'status' ) ;
if ( inf _stat ) {
inf _stat . textContent = '-' ;
poll . stop ( ) ;
if ( inf _stat . classList . contains ( 'spinning' ) ) {
inf _stat . classList . remove ( 'spinning' ) ;
}
2021-02-04 15:05:54 +00:00
}
}
2023-04-06 17:59:54 +00:00
} ) ;
2021-02-04 15:05:54 +00:00
} ) ;
2023-04-06 17:59:54 +00:00
} , 2 ) ;
2021-02-04 15:05:54 +00:00
/ *
runtime information and buttons
* /
s = m . section ( form . NamedSection , 'global' ) ;
2023-03-06 14:29:08 +00:00
s . render = L . bind ( function ( view , section _id ) {
2021-02-04 15:05:54 +00:00
return E ( 'div' , { 'class' : 'cbi-section' } , [
2023-03-06 14:29:08 +00:00
E ( 'h3' , _ ( 'Information' ) ) ,
2021-02-04 15:05:54 +00:00
E ( 'div' , { 'class' : 'cbi-value' } , [
2023-03-06 14:29:08 +00:00
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'Status' ) ) ,
E ( 'div' , { 'class' : 'cbi-value-field spinning' , 'id' : 'status' , 'style' : 'color:#37c' } , '\xa0' )
2021-02-04 15:05:54 +00:00
] ) ,
E ( 'div' , { 'class' : 'cbi-value' } , [
2023-03-06 14:29:08 +00:00
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'Version' ) ) ,
E ( 'div' , { 'class' : 'cbi-value-field' , 'id' : 'version' , 'style' : 'color:#37c' } , '-' )
2021-02-04 15:05:54 +00:00
] ) ,
E ( 'div' , { 'class' : 'cbi-value' } , [
2023-03-06 14:29:08 +00:00
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'Element Count' ) ) ,
E ( 'div' , { 'class' : 'cbi-value-field' , 'id' : 'elements' , 'style' : 'color:#37c' } , '-' )
2021-02-04 15:05:54 +00:00
] ) ,
E ( 'div' , { 'class' : 'cbi-value' } , [
2023-03-06 14:29:08 +00:00
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'Active Feeds' ) ) ,
E ( 'div' , { 'class' : 'cbi-value-field' , 'id' : 'feeds' , 'style' : 'color:#37c' } , '-' )
2021-02-04 15:05:54 +00:00
] ) ,
E ( 'div' , { 'class' : 'cbi-value' } , [
2023-03-06 14:29:08 +00:00
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'Active Devices' ) ) ,
E ( 'div' , { 'class' : 'cbi-value-field' , 'id' : 'devices' , 'style' : 'color:#37c' } , '-' )
2021-02-04 15:05:54 +00:00
] ) ,
E ( 'div' , { 'class' : 'cbi-value' } , [
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'Active Subnets' ) ) ,
2023-03-06 14:29:08 +00:00
E ( 'div' , { 'class' : 'cbi-value-field' , 'id' : 'subnets' , 'style' : 'color:#37c' } , '-' )
2021-02-04 15:05:54 +00:00
] ) ,
2023-03-10 18:49:14 +00:00
E ( 'div' , { 'class' : 'cbi-value' } , [
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'NFT Information' ) ) ,
E ( 'div' , { 'class' : 'cbi-value-field' , 'id' : 'nft' , 'style' : 'color:#37c' } , '-' )
] ) ,
2021-02-04 15:05:54 +00:00
E ( 'div' , { 'class' : 'cbi-value' } , [
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'Run Information' ) ) ,
2023-03-10 18:49:14 +00:00
E ( 'div' , { 'class' : 'cbi-value-field' , 'id' : 'run' , 'style' : 'color:#37c' } , '-' )
2021-02-04 15:05:54 +00:00
] ) ,
E ( 'div' , { 'class' : 'cbi-value' } , [
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'Run Flags' ) ) ,
2023-03-06 14:29:08 +00:00
E ( 'div' , { 'class' : 'cbi-value-field' , 'id' : 'flags' , 'style' : 'color:#37c' } , '-' )
2021-02-04 15:05:54 +00:00
] ) ,
E ( 'div' , { 'class' : 'cbi-value' } , [
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'Last Run' ) ) ,
2023-03-10 18:49:14 +00:00
E ( 'div' , { 'class' : 'cbi-value-field' , 'id' : 'last' , 'style' : 'color:#37c' } , '-' )
2023-03-06 14:29:08 +00:00
] ) ,
E ( 'div' , { 'class' : 'cbi-value' } , [
E ( 'label' , { 'class' : 'cbi-value-title' , 'style' : 'padding-top:0rem' } , _ ( 'System Information' ) ) ,
E ( 'div' , { 'class' : 'cbi-value-field' , 'id' : 'system' , 'style' : 'color:#37c' } , '-' )
2021-02-04 15:05:54 +00:00
] ) ,
E ( 'div' , { class : 'right' } , [
2023-04-06 17:59:54 +00:00
E ( 'button' , {
'class' : 'btn cbi-button cbi-button-apply' ,
'click' : ui . createHandlerFn ( this , function ( ) {
return handleAction ( 'lookup' ) ;
} )
} , [ _ ( 'Domain Lookup' ) ] ) ,
'\xa0\xa0\xa0' ,
2021-02-04 15:05:54 +00:00
E ( 'button' , {
2023-03-06 14:29:08 +00:00
'class' : 'btn cbi-button cbi-button-negative' ,
'click' : ui . createHandlerFn ( this , function ( ) {
return handleAction ( 'stop' ) ;
2021-02-04 15:05:54 +00:00
} )
2023-03-06 14:29:08 +00:00
} , [ _ ( 'Stop' ) ] ) ,
2021-02-04 15:05:54 +00:00
'\xa0\xa0\xa0' ,
E ( 'button' , {
2021-02-10 21:18:00 +00:00
'class' : 'btn cbi-button cbi-button-positive' ,
2023-03-06 14:29:08 +00:00
'click' : ui . createHandlerFn ( this , function ( ) {
return handleAction ( 'reload' ) ;
2021-02-04 15:05:54 +00:00
} )
2023-03-06 14:29:08 +00:00
} , [ _ ( 'Reload' ) ] ) ,
2021-02-04 15:05:54 +00:00
'\xa0\xa0\xa0' ,
E ( 'button' , {
2023-03-06 14:29:08 +00:00
'class' : 'btn cbi-button cbi-button-positive' ,
'click' : ui . createHandlerFn ( this , function ( ) {
2021-02-04 15:05:54 +00:00
return handleAction ( 'restart' ) ;
} )
2023-03-06 14:29:08 +00:00
} , [ _ ( 'Restart' ) ] )
2021-02-04 15:05:54 +00:00
] )
] ) ;
} , o , this ) ;
this . pollData ;
/ *
tabbed config section
* /
s = m . section ( form . NamedSection , 'global' , 'banip' , _ ( 'Settings' ) ) ;
s . addremove = false ;
2023-03-06 14:29:08 +00:00
s . tab ( 'general' , _ ( 'General Settings' ) ) ;
s . tab ( 'advanced' , _ ( 'Advanced Settings' ) ) ;
s . tab ( 'adv_chain' , _ ( 'Chain/Set Settings' ) ) ;
s . tab ( 'adv_log' , _ ( 'Log Settings' ) ) ;
s . tab ( 'adv_email' , _ ( 'E-Mail Settings' ) ) ;
s . tab ( 'feeds' , _ ( 'Blocklist Feeds' ) ) ;
2021-02-04 15:05:54 +00:00
/ *
general settings tab
* /
o = s . taboption ( 'general' , form . Flag , 'ban_enabled' , _ ( 'Enabled' ) , _ ( 'Enable the banIP service.' ) ) ;
o . rmempty = false ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , form . Flag , 'ban_debug' , _ ( 'Verbose Debug Logging' ) , _ ( 'Enable verbose debug logging in case of processing errors.' ) ) ;
o . rmempty = false ;
o = s . taboption ( 'general' , form . Flag , 'ban_autodetect' , _ ( 'Auto Detection' ) , _ ( 'Detect relevant network devices, interfaces, subnets, protocols and utilities automatically.' ) ) ;
o . rmempty = false ;
o = s . taboption ( 'general' , form . Flag , 'ban_protov4' , _ ( 'IPv4 Support' ) , _ ( 'Enables IPv4 support.' ) ) ;
o . depends ( 'ban_autodetect' , '0' ) ;
o . optional = true ;
o . retain = true ;
o = s . taboption ( 'general' , form . Flag , 'ban_protov6' , _ ( 'IPv6 Support' ) , _ ( 'Enables IPv6 support.' ) ) ;
o . depends ( 'ban_autodetect' , '0' ) ;
o . optional = true ;
o . retain = true ;
o = s . taboption ( 'general' , widgets . DeviceSelect , 'ban_dev' , _ ( 'Network Devices' ) , _ ( 'Select the WAN network device(s).' ) ) ;
o . depends ( 'ban_autodetect' , '0' ) ;
2021-02-04 15:05:54 +00:00
o . unspecified = true ;
2023-03-06 14:29:08 +00:00
o . multiple = true ;
2021-02-04 15:05:54 +00:00
o . nocreate = true ;
2023-03-06 14:29:08 +00:00
o . optional = true ;
o . retain = true ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , widgets . NetworkSelect , 'ban_ifv4' , _ ( 'Network Interfaces' ) , _ ( 'Select the logical WAN IPv4 network interface(s).' ) ) ;
o . depends ( 'ban_autodetect' , '0' ) ;
o . unspecified = true ;
o . multiple = true ;
o . nocreate = true ;
o . optional = true ;
o . retain = true ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , widgets . NetworkSelect , 'ban_ifv6' , _ ( 'Network Interfaces' ) , _ ( 'Select the logical WAN IPv6 network interface(s).' ) ) ;
2021-02-04 15:05:54 +00:00
o . depends ( 'ban_autodetect' , '0' ) ;
o . unspecified = true ;
o . multiple = true ;
o . nocreate = true ;
o . optional = true ;
2023-03-06 14:29:08 +00:00
o . retain = true ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , form . ListValue , 'ban_fetchcmd' , _ ( 'Download Utility' ) , _ ( 'Select one of the pre-configured download utilities.' ) ) ;
2021-02-04 15:05:54 +00:00
o . depends ( 'ban_autodetect' , '0' ) ;
2023-03-06 14:29:08 +00:00
o . value ( 'uclient-fetch' ) ;
o . value ( 'wget' ) ;
o . value ( 'curl' ) ;
o . value ( 'aria2c' ) ;
2021-02-04 15:05:54 +00:00
o . optional = true ;
2023-03-06 14:29:08 +00:00
o . retain = true ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , form . Value , 'ban_fetchparm' , _ ( 'Download Parameters' ) , _ ( 'Override the pre-configured download options for the selected download utility.' ) )
2021-02-04 15:05:54 +00:00
o . depends ( 'ban_autodetect' , '0' ) ;
o . optional = true ;
2023-03-06 14:29:08 +00:00
o . retain = true ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , widgets . NetworkSelect , 'ban_trigger' , _ ( 'Startup Trigger Interface' ) , _ ( 'List of available network interfaces to trigger the banIP start.' ) ) ;
o . unspecified = true ;
o . multiple = true ;
o . nocreate = true ;
o . rmempty = true ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , form . Value , 'ban_triggerdelay' , _ ( 'Trigger Delay' ) , _ ( 'Additional trigger delay in seconds before banIP processing actually starts.' ) ) ;
o . placeholder = '10' ;
o . datatype = 'range(1,300)' ;
o . rmempty = true ;
2021-02-04 15:05:54 +00:00
2023-03-26 20:58:54 +00:00
o = s . taboption ( 'general' , form . ListValue , 'ban_triggeraction' , _ ( 'Trigger Action' ) , _ ( 'Trigger action on ifup interface events.' ) ) ;
o . value ( 'start' , _ ( 'start (default)' ) ) ;
o . value ( 'reload' , _ ( 'reload' ) ) ;
o . value ( 'restart' , _ ( 'restart' ) ) ;
o . optional = true ;
o . rmempty = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , form . Flag , 'ban_deduplicate' , _ ( 'Deduplicate IPs' ) , _ ( 'Deduplicate IP addresses across all active sets and and tidy up the local blocklist.' ) ) ;
o . default = 1
2021-02-04 15:05:54 +00:00
o . rmempty = false ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , form . Flag , 'ban_loginput' , _ ( 'Log WAN-Input' ) , _ ( 'Log suspicious incoming WAN packets (dropped).' ) ) ;
o . default = 1
o . rmempty = false ;
2021-04-21 19:54:27 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , form . Flag , 'ban_logforwardwan' , _ ( 'Log WAN-Forward' ) , _ ( 'Log suspicious forwarded WAN packets (dropped).' ) ) ;
o . default = 1
2021-02-04 15:05:54 +00:00
o . rmempty = false ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'general' , form . Flag , 'ban_logforwardlan' , _ ( 'Log LAN-Forward' ) , _ ( 'Log suspicious forwarded LAN packets (rejected).' ) ) ;
o . rmempty = false ;
2021-02-04 15:05:54 +00:00
/ *
additional settings tab
* /
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'advanced' , form . DummyValue , '_sub' ) ;
o . rawhtml = true ;
2023-03-30 16:55:27 +00:00
o . default = '<em><b>' + _ ( 'Changes on this tab needs a banIP service restart to take effect.' ) + '</b></em>' ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'advanced' , form . ListValue , 'ban_nicelimit' , _ ( 'Nice Level' ) , _ ( 'The selected priority will be used for banIP background processing.' ) ) ;
2021-02-04 15:05:54 +00:00
o . value ( '-20' , _ ( 'Highest Priority' ) ) ;
o . value ( '-10' , _ ( 'High Priority' ) ) ;
o . value ( '0' , _ ( 'Normal Priority (default)' ) ) ;
o . value ( '10' , _ ( 'Less Priority' ) ) ;
o . value ( '19' , _ ( 'Least Priority' ) ) ;
o . optional = true ;
o . rmempty = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'advanced' , form . ListValue , 'ban_filelimit' , _ ( 'Max Open Files' ) , _ ( 'Increase the maximal number of open files, e.g. to handle the amount of temporary split files while loading the sets.' ) ) ;
o . value ( '512' , _ ( '512' ) ) ;
o . value ( '1024' , _ ( '1024 (default)' ) ) ;
o . value ( '2048' , _ ( '2048' ) ) ;
o . value ( '4096' , _ ( '4096' ) ) ;
o . optional = true ;
2021-02-04 15:05:54 +00:00
o . rmempty = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'advanced' , form . ListValue , 'ban_cores' , _ ( 'CPU Cores' ) , _ ( 'Limit the cpu cores used by banIP to save RAM.' ) ) ;
2021-02-04 15:05:54 +00:00
o . value ( '1' ) ;
o . value ( '2' ) ;
o . value ( '4' ) ;
o . value ( '8' ) ;
o . value ( '16' ) ;
o . optional = true ;
o . rmempty = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'advanced' , form . ListValue , 'ban_splitsize' , _ ( 'Set Split Size' ) , _ ( 'Split external set loading after every n members to save RAM.' ) ) ;
o . value ( '256' ) ;
o . value ( '512' ) ;
o . value ( '1024' ) ;
o . value ( '2048' ) ;
o . value ( '4096' ) ;
o . optional = true ;
2021-02-04 15:05:54 +00:00
o . rmempty = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'advanced' , form . Value , 'ban_basedir' , _ ( 'Base Directory' ) , _ ( 'Base working directory while banIP processing.' ) ) ;
o . placeholder = '/tmp' ;
2021-02-04 15:05:54 +00:00
o . rmempty = true ;
2023-03-10 18:49:14 +00:00
o = s . taboption ( 'advanced' , form . Value , 'ban_backupdir' , _ ( 'Backup Directory' ) , _ ( 'Target directory for compressed feed backups.' ) ) ;
2023-03-06 14:29:08 +00:00
o . placeholder = '/tmp/banIP-backup' ;
2021-02-04 15:05:54 +00:00
o . rmempty = true ;
2023-03-10 18:49:14 +00:00
o = s . taboption ( 'advanced' , form . Value , 'ban_reportdir' , _ ( 'Report Directory' ) , _ ( 'Target directory for banIP-related report files.' ) ) ;
2023-03-06 14:29:08 +00:00
o . placeholder = '/tmp/banIP-report' ;
2021-06-12 21:16:48 +00:00
o . rmempty = true ;
2023-03-10 18:49:14 +00:00
o = s . taboption ( 'advanced' , form . Flag , 'ban_reportelements' , _ ( 'Report Elements' ) , _ ( 'List Set elements in the status and report, disable this to reduce the CPU load.' ) ) ;
2023-03-08 21:22:04 +00:00
o . default = 1
o . optional = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'advanced' , form . Flag , 'ban_fetchinsecure' , _ ( 'Download Insecure' ) , _ ( 'Don\'t check SSL server certificates during download.' ) ) ;
2021-02-04 15:05:54 +00:00
o . rmempty = true ;
/ *
2023-03-06 14:29:08 +00:00
advanced chain / set settings tab
2021-02-04 15:05:54 +00:00
* /
o = s . taboption ( 'adv_chain' , form . DummyValue , '_sub' ) ;
o . rawhtml = true ;
2023-03-30 16:55:27 +00:00
o . default = '<em><b>' + _ ( 'Changes on this tab needs a banIP service restart to take effect.' ) + '</b></em>' ;
2023-03-06 14:29:08 +00:00
2023-03-10 18:49:14 +00:00
o = s . taboption ( 'adv_chain' , form . ListValue , 'ban_nftpolicy' , _ ( 'Set Policy' ) , _ ( 'Set the nft policy for banIP-related sets.' ) ) ;
o . value ( 'memory' , _ ( 'memory (default)' ) ) ;
o . value ( 'performance' , _ ( 'performance' ) ) ;
o . optional = true ;
o . rmempty = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'adv_chain' , form . ListValue , 'ban_nftpriority' , _ ( 'Chain Priority' ) , _ ( 'Set the nft chain priority within the banIP table. Please note: lower values means higher priority.' ) ) ;
o . value ( '0' , _ ( '0' ) ) ;
o . value ( '-100' , _ ( '-100' ) ) ;
o . value ( '-200' , _ ( '-200 (default)' ) ) ;
o . value ( '-300' , _ ( '-300' ) ) ;
o . value ( '-400' , _ ( '-400' ) ) ;
2021-02-06 21:01:02 +00:00
o . optional = true ;
o . rmempty = true ;
2021-02-04 15:05:54 +00:00
if ( result [ 0 ] ) {
2023-03-06 14:29:08 +00:00
var feed , feeds ;
feeds = JSON . parse ( result [ 0 ] ) ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'adv_chain' , form . MultiValue , 'ban_blockinput' , _ ( 'WAN-Input Chain' ) , _ ( 'Limit certain feeds to the WAN-Input chain.' ) ) ;
2023-03-26 20:58:54 +00:00
o . value ( 'allowlist' , _ ( 'local allowlist' ) ) ;
o . value ( 'blocklist' , _ ( 'local blocklist' ) ) ;
2023-03-06 14:29:08 +00:00
for ( var i = 0 ; i < Object . keys ( feeds ) . length ; i ++ ) {
feed = Object . keys ( feeds ) [ i ] . trim ( ) ;
o . value ( feed ) ;
2021-02-04 15:05:54 +00:00
}
2023-03-06 14:29:08 +00:00
o . optional = true ;
o . rmempty = true ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'adv_chain' , form . MultiValue , 'ban_blockforwardwan' , _ ( 'WAN-Forward Chain' ) , _ ( 'Limit certain feeds to the WAN-Forward chain.' ) ) ;
2023-03-26 20:58:54 +00:00
o . value ( 'allowlist' , _ ( 'local allowlist' ) ) ;
o . value ( 'blocklist' , _ ( 'local blocklist' ) ) ;
2023-03-06 14:29:08 +00:00
for ( var i = 0 ; i < Object . keys ( feeds ) . length ; i ++ ) {
feed = Object . keys ( feeds ) [ i ] . trim ( ) ;
o . value ( feed ) ;
2021-02-04 15:05:54 +00:00
}
2023-03-06 14:29:08 +00:00
o . optional = true ;
o . rmempty = true ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'adv_chain' , form . MultiValue , 'ban_blockforwardlan' , _ ( 'LAN-Forward Chain' ) , _ ( 'Limit certain feeds to the LAN-Forward chain.' ) ) ;
2023-03-26 20:58:54 +00:00
o . value ( 'allowlist' , _ ( 'local allowlist' ) ) ;
o . value ( 'blocklist' , _ ( 'local blocklist' ) ) ;
2023-03-06 14:29:08 +00:00
for ( var i = 0 ; i < Object . keys ( feeds ) . length ; i ++ ) {
feed = Object . keys ( feeds ) [ i ] . trim ( ) ;
o . value ( feed ) ;
2021-02-04 15:05:54 +00:00
}
2023-03-06 14:29:08 +00:00
o . optional = true ;
o . rmempty = true ;
2021-02-04 15:05:54 +00:00
}
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'adv_chain' , form . ListValue , 'ban_nftexpiry' , _ ( 'Blocklist Expiry' ) , _ ( 'Expiry time for auto added blocklist set members.' ) ) ;
o . value ( '10s' ) ;
o . value ( '1m' ) ;
o . value ( '5m' ) ;
o . value ( '1h' ) ;
o . value ( '2h' ) ;
2021-02-04 15:05:54 +00:00
o . optional = true ;
o . rmempty = true ;
/ *
advanced log settings tab
* /
o = s . taboption ( 'adv_log' , form . DummyValue , '_sub' ) ;
o . rawhtml = true ;
2023-03-30 16:55:27 +00:00
o . default = '<em><b>' + _ ( 'Changes on this tab needs a banIP service restart to take effect.' ) + '</b></em>' ;
2021-02-04 15:05:54 +00:00
2023-03-10 18:49:14 +00:00
o = s . taboption ( 'adv_log' , form . ListValue , 'ban_nftloglevel' , _ ( 'Log Level' ) , _ ( 'Set the syslog level for NFT logging.' ) ) ;
o . value ( 'emerg' , _ ( 'emerg' ) ) ;
o . value ( 'alert' , _ ( 'alert' ) ) ;
o . value ( 'crit' , _ ( 'crit' ) ) ;
o . value ( 'err' , _ ( 'err' ) ) ;
o . value ( 'warn' , _ ( 'warn (default)' ) ) ;
o . value ( 'notice' , _ ( 'notice' ) ) ;
o . value ( 'info' , _ ( 'info' ) ) ;
o . value ( 'debug' , _ ( 'debug' ) ) ;
o . value ( 'audit' , _ ( 'audit' ) ) ;
o . optional = true ;
o . rmempty = true ;
2021-02-04 15:05:54 +00:00
o = s . taboption ( 'adv_log' , form . ListValue , 'ban_loglimit' , _ ( 'Log Limit' ) , _ ( 'Parse only the last stated number of log entries for suspicious events.' ) ) ;
2023-03-06 14:29:08 +00:00
o . value ( '50' , _ ( '50' ) ) ;
o . value ( '100' , _ ( '100 (default)' ) ) ;
o . value ( '250' , _ ( '250' ) ) ;
o . value ( '500' , _ ( '500' ) ) ;
o . value ( '1000' , _ ( '1000' ) ) ;
2021-02-04 15:05:54 +00:00
o . optional = true ;
o . rmempty = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'adv_log' , form . Value , 'ban_logcount' , _ ( 'Log Count' ) , _ ( 'Number of failed login attempts of the same IP in the log before blocking.' ) ) ;
o . placeholder = '1' ;
2021-02-17 21:28:51 +00:00
o . datatype = 'range(1,10)' ;
o . rmempty = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'adv_log' , form . DynamicList , 'ban_logterm' , _ ( 'Log Terms' ) , _ ( 'The default log terms / regular expressions are filtering suspicious ssh, LuCI, nginx and asterisk traffic.' ) ) ;
2021-02-04 15:05:54 +00:00
o . optional = true ;
o . rmempty = true ;
/ *
advanced email settings tab
* /
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'adv_email' , form . DummyValue , '_sub' ) ;
o . rawhtml = true ;
2023-03-30 16:55:27 +00:00
o . default = '<em><b>' + _ ( 'To enable email notifications, set up the \'msmtp\' package and specify a vaild E-Mail receiver address.' ) + '</b></em>' ;
2023-03-06 14:29:08 +00:00
2023-03-26 20:58:54 +00:00
o = s . taboption ( 'adv_email' , form . Flag , 'ban_mailnotification' , _ ( 'E-Mail Notification' ) , _ ( 'Receive E-Mail notifications with every banIP run.' ) ) ;
o . rmempty = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'adv_email' , form . Value , 'ban_mailreceiver' , _ ( 'E-Mail Receiver Address' ) , _ ( 'Receiver address for banIP notification E-Mails, this information is required to enable E-Mail functionality.' ) ) ;
o . placeholder = 'name@example.com' ;
o . rmempty = true ;
2021-02-04 15:05:54 +00:00
o = s . taboption ( 'adv_email' , form . Value , 'ban_mailsender' , _ ( 'E-Mail Sender Address' ) , _ ( 'Sender address for banIP notification E-Mails.' ) ) ;
o . placeholder = 'no-reply@banIP' ;
o . rmempty = true ;
o = s . taboption ( 'adv_email' , form . Value , 'ban_mailtopic' , _ ( 'E-Mail Topic' ) , _ ( 'Topic for banIP notification E-Mails.' ) ) ;
o . placeholder = 'banIP notification' ;
o . rmempty = true ;
o = s . taboption ( 'adv_email' , form . Value , 'ban_mailprofile' , _ ( 'E-Mail Profile' ) , _ ( 'Profile used by \'msmtp\' for banIP notification E-Mails.' ) ) ;
o . placeholder = 'ban_notify' ;
o . datatype = 'uciname' ;
o . rmempty = true ;
/ *
2023-03-06 14:29:08 +00:00
blocklist feeds tab
2021-02-04 15:05:54 +00:00
* /
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'feeds' , form . DummyValue , '_sub' ) ;
2021-02-04 15:05:54 +00:00
o . rawhtml = true ;
2023-03-30 16:55:27 +00:00
o . default = '<em><b>' + _ ( 'List of supported and fully pre-configured banIP feeds.' ) + '</b></em>' ;
2023-03-06 14:29:08 +00:00
if ( result [ 0 ] ) {
var focus , feed , feeds ;
feeds = JSON . parse ( result [ 0 ] ) ;
o = s . taboption ( 'feeds' , form . MultiValue , 'ban_feed' , _ ( 'Feed Selection' ) ) ;
for ( var i = 0 ; i < Object . keys ( feeds ) . length ; i ++ ) {
feed = Object . keys ( feeds ) [ i ] . trim ( ) ;
focus = feeds [ feed ] . focus . trim ( ) ;
o . value ( feed , feed + ' (' + focus + ')' ) ;
2021-02-04 15:05:54 +00:00
}
2023-03-06 14:29:08 +00:00
o . optional = true ;
o . rmempty = true ;
2021-02-04 15:05:54 +00:00
}
/ *
prepare country data
* /
var code , country , countries = [ ] ;
2023-03-06 14:29:08 +00:00
if ( result [ 1 ] ) {
countries = result [ 1 ] . trim ( ) . split ( '\n' ) ;
2021-02-04 15:05:54 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'feeds' , form . MultiValue , 'ban_country' , _ ( 'Countries' ) ) ;
for ( var i = 0 ; i < countries . length ; i ++ ) {
code = countries [ i ] . match ( /^(\w+);/ ) [ 1 ] . trim ( ) ;
country = countries [ i ] . match ( /^\w+;(.*$)/ ) [ 1 ] . trim ( ) ;
o . value ( code , country ) ;
}
o . optional = true ;
o . rmempty = true ;
2021-02-04 15:05:54 +00:00
}
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'feeds' , form . DynamicList , 'ban_asn' , _ ( 'ASNs' ) ) ;
2021-02-04 15:05:54 +00:00
o . datatype = 'uinteger' ;
o . optional = true ;
o . rmempty = true ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'feeds' , form . Flag , 'ban_autoallowlist' , _ ( 'Auto Allowlist' ) , _ ( 'Automatically transfers uplink IPs to the banIP allowlist.' ) ) ;
o . default = 1
o . rmempty = false ;
2021-02-06 21:01:02 +00:00
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'feeds' , form . Flag , 'ban_autoblocklist' , _ ( 'Auto Blocklist' ) , _ ( 'Automatically transfers suspicious IPs to the banIP blocklist.' ) ) ;
o . default = 1
2021-02-04 15:05:54 +00:00
o . rmempty = false ;
2023-03-06 14:29:08 +00:00
o = s . taboption ( 'feeds' , form . Flag , 'ban_allowlistonly' , _ ( 'Allowlist Only' ) , _ ( 'Restrict the internet access from/to a small number of secure IPs.' ) ) ;
2021-02-04 15:05:54 +00:00
o . rmempty = false ;
return m . render ( ) ;
} ,
handleReset : null
} ) ;