diff --git a/app/add.py b/app/add.py
index d8c58085..58ee6e52 100644
--- a/app/add.py
+++ b/app/add.py
@@ -133,10 +133,15 @@ elif form.getvalue('mode') is not None:
options_split += " option forceclose\n"
elif force_close == "3":
options_split += " option http-pretend-keepalive\n"
-
+
+ if form.getvalue('whitelist') is not None:
+ options_split += " tcp-request connection accept if { src -f " + haproxy_dir + "/white/" + form.getvalue(
+ 'whitelist') + " }\n"
+
if form.getvalue('blacklist') is not None:
- options_split += " tcp-request connection reject if { src -f "+haproxy_dir+"/black/"+form.getvalue('blacklist')+" }\n"
-
+ options_split += " tcp-request connection reject if { src -f " + haproxy_dir + "/black/" + form.getvalue(
+ 'blacklist') + " }\n"
+
if form.getvalue('cookie'):
cookie = " cookie "+form.getvalue('cookie_name')
if form.getvalue('cookie_domain'):
@@ -220,6 +225,13 @@ elif form.getvalue('mode') is not None:
i += 1
+ if form.getvalue('circuit_breaking') == "1":
+ observe = 'observe ' + form.getvalue('circuit_breaking_observe')
+ error_limit = ' error-limit ' + form.getvalue('circuit_breaking_error_limit')
+ circuit_breaking_on_error = ' on-error ' + form.getvalue('circuit_breaking_on_error')
+ default_server = ' default-server ' + observe + error_limit + circuit_breaking_on_error + '\n'
+ servers_split += default_server
+
if form.getvalue('servers') is not None:
servers = form.getlist('servers')
server_port = form.getlist('server_port')
diff --git a/app/templates/add.html b/app/templates/add.html
index 0a9790df..a967c360 100644
--- a/app/templates/add.html
+++ b/app/templates/add.html
@@ -11,6 +11,9 @@
'option ldap-check':'Check a LDAP service', 'option mysql-check':'Check a MySql Service',
'option pgsql-check':'Check a PgSQL Service', 'option redis-check': 'Check a Redis Service',
'option smtpchk':'Check a SMTP service'} %}
+{% set observe = {'layer7':'layer7', 'layer4': 'layer4'} %}
+{% set on_error = {'mark-down':'mark-down', 'fastinter': 'fastinter', 'fail-check':'fail-check',
+'sudden-death':'sudden-death'} %}
{% set if_values = dict() %}
{% set if_values = {'1':'Host name starts with','2':'Host name ends with','3':'Path starts with','4':'Path ends with', '6': 'Src ip'} %}
@@ -156,7 +159,8 @@
{{ checkbox('slow_atack', title='Slow attack protect', desc='Slow attack') }}
{{ checkbox('ddos', title='DDOS attack protect', desc='DDOS') }}
- {{ checkbox('blacklist_checkbox', title='Use blacklist', desc='Blacklist') }}
+ {{ checkbox('whitelist_checkbox', title='Add whitelist', desc='Whitelist') }}
+ {{ checkbox('blacklist_checkbox', title='Add blacklist', desc='Blacklist') }}
{{ checkbox('waf', title='Web application firewall', desc='WAF', value='1') }}
{{ checkbox('antibot', title='Antibot Protection', desc='Antibot', value='1') }}
@@ -164,6 +168,10 @@
Enter a blacklist name, or press the "down" button:
{{ input('blacklist-hide-input', size='39', name="blacklist", placeholder="blacklist.lst") }}
+
+
Enter a whitelist name, or press the "down" button::
+ {{ input('whitelist-hide-input', size='39', name="whitelist", placeholder="whitelist.lst") }}
+
@@ -241,6 +249,17 @@
{% set values = {'4':'4','5':'5','6':'6'} %}
{{ select('fall-listen', name='fall', values=values, first='fall', class='force_close') }}
+
+ {{ checkbox('circuit_breaking_listen', name="circuit_breaking", desc='Circuit Breaking', title='Enable Circuit Breaking', value='1') }}
+
+
+ Observe:
+ {{ select('circuit_breaking_observe', values=observe, class='force_close') }}
+ error-limit: {{ input('circuit_breaking_error_limit', type='number', value='50', style='width: 50px;') }}
+ on-error:
+ {{ select('circuit_breaking_on_error', values=on_error, class='force_close') }}
+
+
@@ -369,7 +388,8 @@
{{ checkbox('slow_atack1', title='Slow attack protect', desc='Slow attack') }}
{{ checkbox('ddos1', title='DDOS attack protect', desc='DDOS') }}
- {{ checkbox('blacklist_checkbox1', title='Use blacklist', desc='Blacklist') }}
+ {{ checkbox('whitelist_checkbox1', title='Add whitelist', desc='Whitelist') }}
+ {{ checkbox('blacklist_checkbox1', title='Add blacklist', desc='Blacklist') }}
{{ checkbox('waf2', name='waf', title='Web application firewall', desc='WAF', value='1') }}
{{ checkbox('antibot1', title='Antibot Protection', desc='Antibot', value='1') }}
@@ -377,6 +397,10 @@
Enter a blacklist name, or press the "down" button::
{{ input('blacklist-hide-input1', size='39', name="blacklist", placeholder="blacklist.lst") }}
+
+
Enter a whitelist name, or press the "down" button::
+ {{ input('whitelist-hide-input1', size='39', name="whitelist", placeholder="whitelist.lst") }}
+
@@ -607,6 +631,17 @@
{% set values = {'4':'4','5':'5','6':'6'} %}
{{ select('fall-backend', name='fall', values=values, first='fall', class='force_close') }}
+
+ {{ checkbox('circuit_breaking_backend', name="circuit_breaking", desc='Circuit Breaking', title='Enable Circuit Breaking', value='1') }}
+
+
+ Observe:
+ {{ select('circuit_breaking_observe', values=observe, class='force_close') }}
+ error-limit: {{ input('circuit_breaking_error_limit', type='number', value='50', style='width: 50px;') }}
+ on-error:
+ {{ select('circuit_breaking_on_error', values=on_error, class='force_close') }}
+
+
diff --git a/inc/add.js b/inc/add.js
index a08d4ff0..5f8f58f0 100644
--- a/inc/add.js
+++ b/inc/add.js
@@ -116,24 +116,23 @@ $( function() {
} else {
$( "#controlgroup-listen" ).hide( "fast" );
}
- $( "#check-servers-listen" ).click( function(){
- if ($('#check-servers-listen').is(':checked')) {
- $( "#rise-listen" ).attr('required',true);
- $( "#fall-listen" ).attr('required',true);
- $( "#inter-listen" ).attr('required',true);
- $( "#inter-listen" ).selectmenu( "option", "disabled", false );
- $( "#fall-listen" ).selectmenu( "option", "disabled", false );
- $( "#rise-listen" ).selectmenu( "option", "disabled", false );
- } else {
- $( "#rise-listen" ).attr('required',false);
- $( "#fall-listen" ).attr('required',false);
- $( "#inter-listen" ).attr('required',false);
- $( "#inter-listen" ).selectmenu( "option", "disabled", true );
- $( "#fall-listen" ).selectmenu( "option", "disabled", true );
- $( "#rise-listen" ).selectmenu( "option", "disabled", true );
- }
- });
-
+ $( "#check-servers-listen" ).click( function(){
+ if ($('#check-servers-listen').is(':checked')) {
+ $( "#rise-listen" ).attr('required',true);
+ $( "#fall-listen" ).attr('required',true);
+ $( "#inter-listen" ).attr('required',true);
+ $( "#inter-listen" ).selectmenu( "option", "disabled", false );
+ $( "#fall-listen" ).selectmenu( "option", "disabled", false );
+ $( "#rise-listen" ).selectmenu( "option", "disabled", false );
+ } else {
+ $( "#rise-listen" ).attr('required',false);
+ $( "#fall-listen" ).attr('required',false);
+ $( "#inter-listen" ).attr('required',false);
+ $( "#inter-listen" ).selectmenu( "option", "disabled", true );
+ $( "#fall-listen" ).selectmenu( "option", "disabled", true );
+ $( "#rise-listen" ).selectmenu( "option", "disabled", true );
+ }
+ });
});
$( "#controlgroup-backend-show" ).click( function(){
if ($('#controlgroup-backend-show').is(':checked')) {
@@ -147,6 +146,20 @@ $( function() {
$( "#controlgroup-backend" ).hide( "fast" );
}
});
+ $( "#circuit_breaking_listen" ).click( function(){
+ if ($('#circuit_breaking_listen').is(':checked')) {
+ $( "#circuit_breaking_listen_div" ).show( "fast" );
+ } else {
+ $( "#circuit_breaking_listen_div" ).hide( "fast" );
+ }
+ });
+ $( "#circuit_breaking_backend" ).click( function(){
+ if ($('#circuit_breaking_backend').is(':checked')) {
+ $( "#circuit_breaking_backend_div" ).show( "fast" );
+ } else {
+ $( "#circuit_breaking_backend_div" ).hide( "fast" );
+ }
+ });
$( "#cookie" ).click( function(){
if ($('#cookie').is(':checked')) {
$("#cookie_name" ).attr('required',true);
@@ -334,6 +347,50 @@ $( function() {
autoFocus: true,
minLength: -1
});
+ $( "#whitelist-hide-input" ).autocomplete({
+ source: function( request, response ) {
+ if ( request.term == "" ) {
+ request.term = 1
+ }
+ $.ajax( {
+ url: "options.py",
+ data: {
+ get_lists: request.term,
+ color: "white",
+ group: $("#group").val(),
+ token: $('#token').val()
+ },
+ success: function( data ) {
+ data = data.replace(/\s+/g,' ');
+ response(data.split(" "));
+ }
+ } );
+ },
+ autoFocus: true,
+ minLength: -1
+ });
+ $( "#whitelist-hide-input1" ).autocomplete({
+ source: function( request, response ) {
+ if ( request.term == "" ) {
+ request.term = 1
+ }
+ $.ajax( {
+ url: "options.py",
+ data: {
+ get_lists: request.term,
+ color: "white",
+ group: $("#group").val(),
+ token: $('#token').val()
+ },
+ success: function( data ) {
+ data = data.replace(/\s+/g,' ');
+ response(data.split(" "));
+ }
+ } );
+ },
+ autoFocus: true,
+ minLength: -1
+ });
$( "#new-option" ).autocomplete({
source: availableTags,
autoFocus: true,
@@ -645,6 +702,24 @@ $( function() {
$( "#blacklist-hide-input1" ).prop('required',false);
}
});
+ $( "#whitelist_checkbox" ).click( function(){
+ if ($('#whitelist_checkbox').is(':checked')) {
+ $( "#whitelist-hide" ).show( "fast" );
+ $( "#whitelist-hide-input" ).attr('required',true);
+ } else {
+ $( "#whitelist-hide" ).hide( "fast" );
+ $( "#whitelist-hide-input" ).prop('required',false);
+ }
+ });
+ $( "#whitelist_checkbox1" ).click( function(){
+ if ($('#whitelist_checkbox1').is(':checked')) {
+ $( "#whitelist-hide1" ).show( "fast" );
+ $( "#whitelist-hide-input1" ).attr('required',true);
+ } else {
+ $( "#whitelist-hide1" ).hide( "fast" );
+ $( "#whitelist-hide-input1" ).prop('required',false);
+ }
+ });
$( ":regex(id, template)" ).click( function(){
if ($(':regex(id, template)').is(':checked')) {
$( ".prefix" ).show( "fast" );