2018-09-28 12:04:16 +00:00
#!/usr/bin/env python3
2020-03-27 21:16:04 +00:00
# -*- coding: utf-8 -*-
2020-09-26 17:37:14 +00:00
2020-07-01 20:39:15 +00:00
import os
import sys
2018-01-25 09:04:57 +00:00
import funct
2018-04-26 13:03:48 +00:00
import sql
2018-04-09 10:27:01 +00:00
2019-12-04 13:38:07 +00:00
form = funct . form
2021-08-08 13:02:00 +00:00
serv = funct . is_ip_or_dns ( form . getvalue ( ' serv ' ) )
2020-07-01 20:39:15 +00:00
act = form . getvalue ( " act " )
2019-10-05 20:41:07 +00:00
2020-09-26 17:37:14 +00:00
if ( form . getvalue ( ' new_metrics ' ) or
2021-04-17 17:38:08 +00:00
form . getvalue ( ' new_http_metrics ' ) or
2020-09-26 17:37:14 +00:00
form . getvalue ( ' new_waf_metrics ' ) or
2021-08-15 09:02:12 +00:00
form . getvalue ( ' new_nginx_metrics ' ) or
2020-09-26 17:37:14 +00:00
form . getvalue ( ' metrics_hapwi_ram ' ) or
2021-08-02 08:19:22 +00:00
form . getvalue ( ' metrics_hapwi_cpu ' ) or
form . getvalue ( ' getoption ' ) or
form . getvalue ( ' getsavedserver ' ) ) :
2020-09-26 17:37:14 +00:00
print ( ' Content-type: application/json \n ' )
2019-10-05 20:41:07 +00:00
else :
2020-09-26 17:37:14 +00:00
print ( ' Content-type: text/html \n ' )
2020-06-06 08:21:22 +00:00
2018-08-28 10:45:09 +00:00
if act == " checkrestart " :
2020-09-26 17:37:14 +00:00
servers = sql . get_dick_permit ( ip = serv )
for server in servers :
if server != " " :
print ( " ok " )
sys . exit ( )
sys . exit ( )
2020-02-21 18:05:21 +00:00
2020-09-02 04:26:36 +00:00
if form . getvalue ( ' alert_consumer ' ) is None :
2020-09-26 17:37:14 +00:00
if not sql . check_token_exists ( form . getvalue ( " token " ) ) :
print ( ' error: Your token has been expired ' )
sys . exit ( )
2020-07-01 20:39:15 +00:00
2018-07-13 04:28:21 +00:00
if form . getvalue ( ' getcerts ' ) is not None and serv is not None :
2020-09-26 17:37:14 +00:00
cert_path = sql . get_setting ( ' cert_path ' )
2021-03-13 19:13:13 +00:00
commands = [ " sudo ls -1t " + cert_path + " |grep -E ' pem|crt|key ' " ]
2020-09-26 17:37:14 +00:00
try :
funct . ssh_command ( serv , commands , ip = " 1 " )
except Exception as e :
2020-11-02 17:01:08 +00:00
print ( ' error: Cannot connect to the server: ' + e . args [ 0 ] )
2020-02-21 18:05:21 +00:00
2018-10-01 16:51:37 +00:00
if form . getvalue ( ' checkSshConnect ' ) is not None and serv is not None :
2021-08-02 08:19:22 +00:00
try :
print ( funct . ssh_command ( serv , [ " ls -1t " ] ) )
except Exception as e :
print ( e )
2020-07-01 20:39:15 +00:00
2018-07-13 04:28:21 +00:00
if form . getvalue ( ' getcert ' ) is not None and serv is not None :
2020-11-16 12:31:52 +00:00
cert_id = form . getvalue ( ' getcert ' )
2020-09-26 17:37:14 +00:00
cert_path = sql . get_setting ( ' cert_path ' )
2021-01-02 16:36:43 +00:00
commands = [ " openssl x509 -in " + cert_path + " / " + cert_id + " -text " ]
2020-09-26 17:37:14 +00:00
try :
funct . ssh_command ( serv , commands , ip = " 1 " )
2020-11-02 17:01:08 +00:00
except Exception as e :
2021-01-02 16:36:43 +00:00
print ( ' error: Cannot connect to the server ' + e . args [ 0 ] )
if form . getvalue ( ' delcert ' ) is not None and serv is not None :
cert_id = form . getvalue ( ' delcert ' )
cert_path = sql . get_setting ( ' cert_path ' )
commands = [ " sudo rm -f " + cert_path + " / " + cert_id ]
try :
funct . ssh_command ( serv , commands , ip = " 1 " )
except Exception as e :
print ( ' error: Cannot delete the certificate ' + e . args [ 0 ] )
2020-07-01 20:39:15 +00:00
2018-04-26 13:03:48 +00:00
if serv and form . getvalue ( ' ssl_cert ' ) :
2020-09-26 17:37:14 +00:00
cert_local_dir = os . path . dirname ( os . getcwd ( ) ) + " / " + sql . get_setting ( ' ssl_local_path ' )
cert_path = sql . get_setting ( ' cert_path ' )
2022-03-15 09:51:03 +00:00
name = ' '
2020-09-26 17:37:14 +00:00
if not os . path . exists ( cert_local_dir ) :
os . makedirs ( cert_local_dir )
if form . getvalue ( ' ssl_name ' ) is None :
2021-08-15 09:02:12 +00:00
print ( ' error: Please enter a desired name ' )
2020-09-26 17:37:14 +00:00
else :
name = form . getvalue ( ' ssl_name ' )
try :
with open ( name , " w " ) as ssl_cert :
ssl_cert . write ( form . getvalue ( ' ssl_cert ' ) )
except IOError as e :
2021-08-15 09:02:12 +00:00
print ( ' error: Cannot save the SSL key file. Check a SSH key path in config ' + e . args [ 0 ] )
2020-09-26 17:37:14 +00:00
MASTERS = sql . is_master ( serv )
for master in MASTERS :
2020-10-24 04:11:56 +00:00
if master [ 0 ] is not None :
2020-09-26 17:37:14 +00:00
funct . upload ( master [ 0 ] , cert_path , name )
2022-04-15 09:49:00 +00:00
print ( ' success: the SSL file has been uploaded to %s into: %s %s <br/> ' % ( master [ 0 ] , cert_path , ' / ' + name ) )
2020-09-26 17:37:14 +00:00
try :
error = funct . upload ( serv , cert_path , name )
2022-04-15 09:49:00 +00:00
print ( ' success: the SSL file has been uploaded to %s into: %s %s ' % ( serv , cert_path , ' / ' + name ) )
2020-09-26 17:37:14 +00:00
except Exception as e :
funct . logging ( ' localhost ' , e . args [ 0 ] , haproxywi = 1 )
try :
os . system ( " mv %s %s " % ( name , cert_local_dir ) )
except OSError as e :
funct . logging ( ' localhost ' , e . args [ 0 ] , haproxywi = 1 )
funct . logging ( serv , " add.py#ssl uploaded a new SSL cert %s " % name , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2018-09-19 06:22:38 +00:00
if form . getvalue ( ' backend ' ) is not None :
2020-09-26 17:37:14 +00:00
funct . show_backends ( serv )
2020-07-01 20:39:15 +00:00
2020-06-06 08:21:22 +00:00
if form . getvalue ( ' ip_select ' ) is not None :
2020-09-26 17:37:14 +00:00
funct . show_backends ( serv )
2020-06-06 08:21:22 +00:00
if form . getvalue ( ' ipbackend ' ) is not None and form . getvalue ( ' backend_server ' ) is None :
2021-08-08 13:02:00 +00:00
haproxy_sock_port = int ( sql . get_setting ( ' haproxy_sock_port ' ) )
2020-09-26 17:37:14 +00:00
backend = form . getvalue ( ' ipbackend ' )
cmd = ' echo " show servers state " |nc %s %s |grep " %s " |awk \' { print $4} \' ' % ( serv , haproxy_sock_port , backend )
output , stderr = funct . subprocess_execute ( cmd )
for i in output :
if i == ' ' :
continue
i = i . strip ( )
print ( i + ' <br> ' )
2020-06-06 08:21:22 +00:00
if form . getvalue ( ' ipbackend ' ) is not None and form . getvalue ( ' backend_server ' ) is not None :
2021-08-08 13:02:00 +00:00
haproxy_sock_port = int ( sql . get_setting ( ' haproxy_sock_port ' ) )
2020-09-26 17:37:14 +00:00
backend = form . getvalue ( ' ipbackend ' )
backend_server = form . getvalue ( ' backend_server ' )
2020-11-02 17:01:08 +00:00
cmd = ' echo " show servers state " |nc %s %s |grep " %s " |grep " %s " |awk \' { print $5 " : " $19} \' |head -1 ' % ( serv , haproxy_sock_port , backend , backend_server )
2020-09-26 17:37:14 +00:00
output , stderr = funct . subprocess_execute ( cmd )
print ( output [ 0 ] )
2020-07-01 20:39:15 +00:00
if form . getvalue ( ' backend_ip ' ) is not None :
2020-09-26 17:37:14 +00:00
backend_backend = form . getvalue ( ' backend_backend ' )
backend_server = form . getvalue ( ' backend_server ' )
backend_ip = form . getvalue ( ' backend_ip ' )
backend_port = form . getvalue ( ' backend_port ' )
if form . getvalue ( ' backend_ip ' ) is None :
print ( ' error: Backend IP must be IP and not 0 ' )
sys . exit ( )
if form . getvalue ( ' backend_port ' ) is None :
2021-08-15 09:02:12 +00:00
print ( ' error: The backend port must be integer and not 0 ' )
2020-09-26 17:37:14 +00:00
sys . exit ( )
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
MASTERS = sql . is_master ( serv )
for master in MASTERS :
if master [ 0 ] is not None :
2020-11-02 17:01:08 +00:00
cmd = ' echo " set server %s / %s addr %s port %s check-port %s " |nc %s %s ' % ( backend_backend , backend_server , backend_ip , backend_port , backend_port , master [ 0 ] , haproxy_sock_port )
2020-09-26 17:37:14 +00:00
output , stderr = funct . subprocess_execute ( cmd )
print ( output [ 0 ] )
2021-09-15 05:40:51 +00:00
funct . logging ( master [ 0 ] , ' IP address and port have been changed. On: {} / {} to {} : {} ' . format ( backend_backend , backend_server , backend_ip , backend_port ) ,
login = 1 , keep_history = 1 , service = ' haproxy ' )
2020-09-26 17:37:14 +00:00
2020-11-02 17:01:08 +00:00
cmd = ' echo " set server %s / %s addr %s port %s check-port %s " |nc %s %s ' % ( backend_backend , backend_server , backend_ip , backend_port , backend_port , serv , haproxy_sock_port )
2021-09-15 05:40:51 +00:00
funct . logging ( serv , ' IP address and port have been changed. On: {} / {} to {} : {} ' . format ( backend_backend , backend_server , backend_ip , backend_port ) ,
login = 1 , keep_history = 1 , service = ' haproxy ' )
2020-09-26 17:37:14 +00:00
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
print ( ' error: ' + stderr [ 0 ] )
else :
print ( output [ 0 ] )
configs_dir = funct . get_config_var ( ' configs ' , ' haproxy_save_configs_dir ' )
cfg = configs_dir + serv + " - " + funct . get_data ( ' config ' ) + " .cfg "
error = funct . get_config ( serv , cfg )
2020-11-02 17:01:08 +00:00
cmd = ' string=`grep %s %s -n -A25 |grep " server %s " |head -1|awk -F " - " \' { print $1} \' ` && sed -Ei " $( echo $string)s/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]) \ .) {3} (1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]):[0-9]+/ %s : %s /g " %s ' % ( backend_backend , cfg , backend_server , backend_ip , backend_port , cfg )
2020-09-26 17:37:14 +00:00
output , stderr = funct . subprocess_execute ( cmd )
stderr = funct . master_slave_upload_and_restart ( serv , cfg , just_save = ' save ' )
2020-07-01 20:39:15 +00:00
2020-06-06 08:21:22 +00:00
if form . getvalue ( ' maxconn_select ' ) is not None :
2020-09-26 17:37:14 +00:00
serv = form . getvalue ( ' maxconn_select ' )
funct . get_backends_from_config ( serv , backends = ' frontend ' )
2020-07-01 20:39:15 +00:00
if form . getvalue ( ' maxconn_frontend ' ) is not None :
2020-09-26 17:37:14 +00:00
frontend = form . getvalue ( ' maxconn_frontend ' )
maxconn = form . getvalue ( ' maxconn_int ' )
if form . getvalue ( ' maxconn_int ' ) is None :
print ( ' error: Maxconn must be integer and not 0 ' )
sys . exit ( )
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
MASTERS = sql . is_master ( serv )
for master in MASTERS :
2020-10-24 04:11:56 +00:00
if master [ 0 ] is not None :
2020-09-26 17:37:14 +00:00
if frontend == ' global ' :
cmd = ' echo " set maxconn %s %s " |nc %s %s ' % ( frontend , maxconn , master [ 0 ] , haproxy_sock_port )
else :
cmd = ' echo " set maxconn frontend %s %s " |nc %s %s ' % ( frontend , maxconn , master [ 0 ] , haproxy_sock_port )
output , stderr = funct . subprocess_execute ( cmd )
2021-09-15 05:40:51 +00:00
funct . logging ( master [ 0 ] , ' Maxconn has been changed. On: {} to {} ' . format ( frontend , maxconn ) , login = 1 , keep_history = 1 ,
service = ' haproxy ' )
2020-09-26 17:37:14 +00:00
if frontend == ' global ' :
cmd = ' echo " set maxconn %s %s " |nc %s %s ' % ( frontend , maxconn , serv , haproxy_sock_port )
else :
cmd = ' echo " set maxconn frontend %s %s " |nc %s %s ' % ( frontend , maxconn , serv , haproxy_sock_port )
2021-09-15 05:40:51 +00:00
funct . logging ( serv , ' Maxconn has been changed. On: {} to {} ' . format ( frontend , maxconn ) , login = 1 , keep_history = 1 ,
service = ' haproxy ' )
2020-09-26 17:37:14 +00:00
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
print ( stderr [ 0 ] )
elif output [ 0 ] == ' ' :
configs_dir = funct . get_config_var ( ' configs ' , ' haproxy_save_configs_dir ' )
cfg = configs_dir + serv + " - " + funct . get_data ( ' config ' ) + " .cfg "
error = funct . get_config ( serv , cfg )
2020-11-02 17:01:08 +00:00
cmd = ' string=`grep %s %s -n -A5 |grep maxcon -n |awk -F " : " \' { print $2} \' |awk -F " - " \' { print $1} \' ` && sed -Ei " $( echo $string)s/[0-9]+/ %s /g " %s ' % ( frontend , cfg , maxconn , cfg )
2020-09-26 17:37:14 +00:00
output , stderr = funct . subprocess_execute ( cmd )
stderr = funct . master_slave_upload_and_restart ( serv , cfg , just_save = ' save ' )
print ( ' success: Maxconn for %s has been set to %s ' % ( frontend , maxconn ) )
else :
print ( ' error: ' + output [ 0 ] )
2020-06-06 08:21:22 +00:00
if form . getvalue ( ' table_serv_select ' ) is not None :
2020-09-26 17:37:14 +00:00
print ( funct . get_all_stick_table ( ) )
2020-07-01 20:39:15 +00:00
2020-06-06 08:21:22 +00:00
if form . getvalue ( ' table_select ' ) is not None :
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
2021-07-05 14:51:05 +00:00
env = Environment ( loader = FileSystemLoader ( ' templates ' ) , autoescape = True ,
2020-09-26 17:37:14 +00:00
extensions = [ ' jinja2.ext.loopcontrols ' , ' jinja2.ext.do ' ] , trim_blocks = True , lstrip_blocks = True )
table = form . getvalue ( ' table_select ' )
if table == ' All ' :
2021-07-05 14:51:05 +00:00
template = env . get_template ( ' ajax/stick_tables.html ' )
2020-09-26 17:37:14 +00:00
tables = funct . get_all_stick_table ( )
table = [ ]
for t in tables . split ( ' , ' ) :
if t != ' ' :
2020-11-16 12:31:52 +00:00
table_id = [ ]
2020-09-26 17:37:14 +00:00
tables_head = [ ]
tables_head1 , table1 = funct . get_stick_table ( t )
2020-11-16 12:31:52 +00:00
table_id . append ( tables_head1 )
table_id . append ( table1 )
table . append ( table_id )
2020-09-26 17:37:14 +00:00
template = template . render ( table = table )
else :
2021-07-05 14:51:05 +00:00
template = env . get_template ( ' ajax/stick_table.html ' )
2020-09-26 17:37:14 +00:00
tables_head , table = funct . get_stick_table ( table )
template = template . render ( tables_head = tables_head , table = table )
print ( template )
2020-07-01 20:39:15 +00:00
if form . getvalue ( ' ip_for_delete ' ) is not None :
2020-09-26 17:37:14 +00:00
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
ip = form . getvalue ( ' ip_for_delete ' )
table = form . getvalue ( ' table_for_delete ' )
2020-08-02 18:24:09 +00:00
2020-09-26 17:37:14 +00:00
cmd = ' echo " clear table %s key %s " |nc %s %s ' % ( table , ip , serv , haproxy_sock_port )
output , stderr = funct . subprocess_execute ( cmd )
if stderr [ 0 ] != ' ' :
print ( ' error: ' + stderr [ 0 ] )
2020-08-02 18:24:09 +00:00
2020-09-02 04:26:36 +00:00
if form . getvalue ( ' table_for_clear ' ) is not None :
2020-09-26 17:37:14 +00:00
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
table = form . getvalue ( ' table_for_clear ' )
2020-09-02 04:26:36 +00:00
2020-09-26 17:37:14 +00:00
cmd = ' echo " clear table %s " |nc %s %s ' % ( table , serv , haproxy_sock_port )
output , stderr = funct . subprocess_execute ( cmd )
if stderr [ 0 ] != ' ' :
print ( ' error: ' + stderr [ 0 ] )
2020-09-02 04:26:36 +00:00
2020-08-02 18:24:09 +00:00
if form . getvalue ( ' list_serv_select ' ) is not None :
2020-09-26 17:37:14 +00:00
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
cmd = ' echo " show acl " |nc %s %s |grep " loaded from " |awk \' { print $1,$2} \' ' % ( serv , haproxy_sock_port )
output , stderr = funct . subprocess_execute ( cmd )
print ( output )
2020-08-02 18:24:09 +00:00
if form . getvalue ( ' list_select_id ' ) is not None :
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
2020-08-02 18:24:09 +00:00
2020-09-26 17:37:14 +00:00
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True ,
extensions = [ ' jinja2.ext.loopcontrols ' , ' jinja2.ext.do ' ] , trim_blocks = True , lstrip_blocks = True )
template = env . get_template ( ' ajax/list.html ' )
list_id = form . getvalue ( ' list_select_id ' )
list_name = form . getvalue ( ' list_select_name ' )
2020-08-02 18:24:09 +00:00
2020-09-26 17:37:14 +00:00
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
cmd = ' echo " show acl # %s " |nc %s %s ' % ( list_id , serv , haproxy_sock_port )
output , stderr = funct . subprocess_execute ( cmd )
2020-08-02 18:24:09 +00:00
2020-09-26 17:37:14 +00:00
template = template . render ( list = output , list_id = list_id , list_name = list_name )
print ( template )
2020-08-02 18:24:09 +00:00
if form . getvalue ( ' list_id_for_delete ' ) is not None :
2020-09-26 17:37:14 +00:00
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
lists_path = sql . get_setting ( ' lists_path ' )
2021-09-03 08:07:55 +00:00
full_path = funct . get_config_var ( ' main ' , ' fullpath ' )
2020-09-26 17:37:14 +00:00
ip_id = form . getvalue ( ' list_ip_id_for_delete ' )
ip = form . getvalue ( ' list_ip_for_delete ' )
list_id = form . getvalue ( ' list_id_for_delete ' )
list_name = form . getvalue ( ' list_name ' )
user_group = funct . get_user_group ( id = 1 )
2021-09-03 08:07:55 +00:00
cmd = " sed -i ' s! %s $!! ' %s / %s / %s / %s " % ( ip , full_path , lists_path , user_group , list_name )
cmd1 = " sed -i ' /^$/d ' %s / %s / %s / %s " % ( full_path , lists_path , user_group , list_name )
2020-09-26 17:37:14 +00:00
output , stderr = funct . subprocess_execute ( cmd )
output1 , stderr1 = funct . subprocess_execute ( cmd1 )
if output :
print ( ' error: ' + str ( output ) )
if stderr :
print ( ' error: ' + str ( stderr ) )
if output1 :
print ( ' error: ' + str ( output1 ) )
if stderr1 :
print ( ' error: ' + str ( stderr1 ) )
cmd = ' echo " del acl # %s # %s " |nc %s %s ' % ( list_id , ip_id , serv , haproxy_sock_port )
output , stderr = funct . subprocess_execute ( cmd )
if output [ 0 ] != ' ' :
print ( ' error: ' + output [ 0 ] )
if stderr [ 0 ] != ' ' :
print ( ' error: ' + stderr [ 0 ] )
2020-08-02 18:24:09 +00:00
2021-09-15 05:40:51 +00:00
funct . logging ( serv , ' {} has been delete from list {} ' . format ( ip_id , list_id ) , login = 1 , keep_history = 1 ,
service = ' haproxy ' )
2020-08-02 18:24:09 +00:00
if form . getvalue ( ' list_ip_for_add ' ) is not None :
2020-09-26 17:37:14 +00:00
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
lists_path = sql . get_setting ( ' lists_path ' )
2021-09-15 05:40:51 +00:00
full_path = funct . get_config_var ( ' main ' , ' fullpath ' )
2020-09-26 17:37:14 +00:00
ip = form . getvalue ( ' list_ip_for_add ' )
2021-09-15 05:40:51 +00:00
ip = ip . strip ( )
ip = funct . is_ip_or_dns ( ip )
2020-09-26 17:37:14 +00:00
list_id = form . getvalue ( ' list_id_for_add ' )
list_name = form . getvalue ( ' list_name ' )
user_group = funct . get_user_group ( id = 1 )
cmd = ' echo " add acl # %s %s " |nc %s %s ' % ( list_id , ip , serv , haproxy_sock_port )
output , stderr = funct . subprocess_execute ( cmd )
if output [ 0 ] :
print ( ' error: ' + output [ 0 ] )
if stderr :
print ( ' error: ' + stderr [ 0 ] )
2020-07-01 20:39:15 +00:00
2021-09-15 05:40:51 +00:00
if ' is not a valid IPv4 or IPv6 address ' not in output [ 0 ] :
cmd = ' echo " %s " >> %s / %s / %s / %s ' % ( ip , full_path , lists_path , user_group , list_name )
output , stderr = funct . subprocess_execute ( cmd )
if output :
print ( ' error: ' + str ( output ) )
if stderr :
print ( ' error: ' + str ( stderr ) )
funct . logging ( serv , ' {} has been added to list {} ' . format ( ip , list_id ) , login = 1 , keep_history = 1 ,
service = ' haproxy ' )
2020-09-15 05:56:43 +00:00
if form . getvalue ( ' sessions_select ' ) is not None :
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
2020-09-15 05:56:43 +00:00
2021-07-05 14:51:05 +00:00
env = Environment ( loader = FileSystemLoader ( ' templates ' ) , autoescape = True ,
2020-09-26 17:37:14 +00:00
extensions = [ ' jinja2.ext.loopcontrols ' , ' jinja2.ext.do ' ] , trim_blocks = True , lstrip_blocks = True )
serv = form . getvalue ( ' sessions_select ' )
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
2020-09-15 05:56:43 +00:00
2020-09-26 17:37:14 +00:00
cmd = ' echo " show sess " |nc %s %s ' % ( serv , haproxy_sock_port )
output , stderr = funct . subprocess_execute ( cmd )
2020-09-15 05:56:43 +00:00
2021-07-05 14:51:05 +00:00
template = env . get_template ( ' ajax/sessions_table.html ' )
2020-09-26 17:37:14 +00:00
template = template . render ( sessions = output )
2020-09-15 05:56:43 +00:00
2020-09-26 17:37:14 +00:00
print ( template )
2020-09-15 05:56:43 +00:00
if form . getvalue ( ' sessions_select_show ' ) is not None :
2020-09-26 17:37:14 +00:00
serv = form . getvalue ( ' sessions_select_show ' )
sess_id = form . getvalue ( ' sessions_select_id ' )
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
2020-09-15 05:56:43 +00:00
2020-09-26 17:37:14 +00:00
cmd = ' echo " show sess %s " |nc %s %s ' % ( sess_id , serv , haproxy_sock_port )
output , stderr = funct . subprocess_execute ( cmd )
2020-09-15 05:56:43 +00:00
2020-09-26 17:37:14 +00:00
if stderr :
print ( ' error: ' + stderr [ 0 ] )
else :
for o in output :
print ( o + ' <br /> ' )
2020-09-15 05:56:43 +00:00
if form . getvalue ( ' session_delete_id ' ) is not None :
2020-09-26 17:37:14 +00:00
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
sess_id = form . getvalue ( ' session_delete_id ' )
2020-09-15 05:56:43 +00:00
2020-09-26 17:37:14 +00:00
cmd = ' echo " shutdown session %s " |nc %s %s ' % ( sess_id , serv , haproxy_sock_port )
output , stderr = funct . subprocess_execute ( cmd )
if output [ 0 ] != ' ' :
print ( ' error: ' + output [ 0 ] )
if stderr [ 0 ] != ' ' :
print ( ' error: ' + stderr [ 0 ] )
2020-09-15 05:56:43 +00:00
2020-07-01 20:39:15 +00:00
if form . getvalue ( " change_pos " ) is not None :
2020-09-26 17:37:14 +00:00
pos = form . getvalue ( ' change_pos ' )
2021-10-17 05:57:51 +00:00
server_id = form . getvalue ( ' pos_server_id ' )
sql . update_server_pos ( pos , server_id )
2020-07-01 20:39:15 +00:00
2021-08-08 13:02:00 +00:00
if form . getvalue ( ' show_ip ' ) is not None and serv is not None :
commands = [ " sudo ip a |grep inet |egrep -v ' ::1 ' |awk ' { print $2 } ' |awk -F ' / ' ' { print $1 } ' " ]
2020-09-26 17:37:14 +00:00
funct . ssh_command ( serv , commands , ip = " 1 " )
2020-07-01 20:39:15 +00:00
2018-05-02 11:11:22 +00:00
if form . getvalue ( ' showif ' ) :
2021-08-08 13:02:00 +00:00
commands = [ " sudo ip link|grep ' UP ' |grep -v ' lo ' | awk ' { print $2} ' |awk -F ' : ' ' { print $1} ' " ]
2020-09-26 17:37:14 +00:00
funct . ssh_command ( serv , commands , ip = " 1 " )
2020-07-01 20:39:15 +00:00
2018-05-13 18:07:33 +00:00
if form . getvalue ( ' action_hap ' ) is not None and serv is not None :
2020-09-26 17:37:14 +00:00
action = form . getvalue ( ' action_hap ' )
2021-10-03 18:46:19 +00:00
haproxy_service_name = " haproxy "
2020-09-26 17:37:14 +00:00
2022-04-15 09:49:00 +00:00
funct . is_restarted ( serv , action )
2020-09-26 17:37:14 +00:00
if funct . check_haproxy_config ( serv ) :
2021-10-03 18:46:19 +00:00
server_id = sql . select_server_id_by_ip ( server_ip = serv )
is_docker = sql . select_service_setting ( server_id , ' haproxy ' , ' dockerized ' )
if is_docker == ' 1 ' :
container_name = sql . get_setting ( ' haproxy_container_name ' )
commands = [ " sudo docker %s %s " % ( action , container_name ) ]
2020-09-26 17:37:14 +00:00
else :
2021-10-03 18:46:19 +00:00
haproxy_enterprise = sql . select_service_setting ( server_id , ' haproxy ' , ' haproxy_enterprise ' )
if haproxy_enterprise == ' 1 ' :
haproxy_service_name = " hapee-2.0-lb "
commands = [ " sudo systemctl %s %s " % ( action , haproxy_service_name ) ]
2020-09-26 17:37:14 +00:00
funct . ssh_command ( serv , commands )
2021-09-15 05:40:51 +00:00
funct . logging ( serv , ' Service has been ' + action + ' ed ' , haproxywi = 1 , login = 1 , keep_history = 1 , service = ' haproxy ' )
2021-06-11 15:18:33 +00:00
print ( " success: HAProxy has been %s " % action )
2020-09-26 17:37:14 +00:00
else :
print ( " error: Bad config, check please " )
2020-07-01 20:39:15 +00:00
2020-02-05 08:15:57 +00:00
if form . getvalue ( ' action_nginx ' ) is not None and serv is not None :
2020-09-26 17:37:14 +00:00
action = form . getvalue ( ' action_nginx ' )
2020-07-01 20:39:15 +00:00
2022-04-15 09:49:00 +00:00
funct . is_restarted ( serv , action )
2021-10-03 18:46:19 +00:00
if funct . check_nginx_config ( serv ) :
server_id = sql . select_server_id_by_ip ( server_ip = serv )
is_docker = sql . select_service_setting ( server_id , ' nginx ' , ' dockerized ' )
if is_docker == ' 1 ' :
container_name = sql . get_setting ( ' nginx_container_name ' )
commands = [ " sudo docker %s %s " % ( action , container_name ) ]
else :
commands = [ " sudo systemctl %s nginx " % action ]
funct . ssh_command ( serv , commands )
funct . logging ( serv , ' Service has been ' + action + ' ed ' , haproxywi = 1 , login = 1 , keep_history = 1 , service = ' nginx ' )
print ( " success: Nginx has been %s " % action )
else :
print ( " error: Bad config, check please " )
2021-06-11 15:18:33 +00:00
if form . getvalue ( ' action_keepalived ' ) is not None and serv is not None :
action = form . getvalue ( ' action_keepalived ' )
2022-04-15 09:49:00 +00:00
funct . is_restarted ( serv , action )
2021-06-11 15:18:33 +00:00
commands = [ " sudo systemctl %s keepalived " % action ]
funct . ssh_command ( serv , commands )
2021-09-15 05:40:51 +00:00
funct . logging ( serv , ' Service has been ' + action + ' ed ' , haproxywi = 1 , login = 1 , keep_history = 1 , service = ' keepalived ' )
2021-06-11 15:18:33 +00:00
print ( " success: Keepalived has been %s " % action )
2020-07-01 20:39:15 +00:00
2018-08-17 11:55:17 +00:00
if form . getvalue ( ' action_waf ' ) is not None and serv is not None :
2020-09-26 17:37:14 +00:00
serv = form . getvalue ( ' serv ' )
action = form . getvalue ( ' action_waf ' )
2022-04-15 09:49:00 +00:00
funct . is_restarted ( serv , action )
2021-09-15 05:40:51 +00:00
funct . logging ( serv , ' WAF service has been ' + action + ' ed ' , haproxywi = 1 , login = 1 , keep_history = 1 , service = ' haproxy ' )
2020-09-26 17:37:14 +00:00
commands = [ " sudo systemctl %s waf " % action ]
funct . ssh_command ( serv , commands )
2020-07-01 20:39:15 +00:00
2022-04-15 09:49:00 +00:00
if form . getvalue ( ' action_apache ' ) is not None and serv is not None :
action = form . getvalue ( ' action_apache ' )
funct . is_restarted ( serv , action )
server_id = sql . select_server_id_by_ip ( serv )
is_docker = sql . select_service_setting ( server_id , ' apache ' , ' dockerized ' )
if is_docker == ' 1 ' :
container_name = sql . get_setting ( ' apache_container_name ' )
commands = [ " sudo docker %s %s " % ( action , container_name ) ]
else :
os_info = sql . select_os_info ( server_id )
if " CentOS " in os_info or " Redhat " in os_info :
service_apache_name = ' httpd '
else :
service_apache_name = ' apache2 '
commands = [ " sudo systemctl %s %s " % ( action , service_apache_name ) ]
funct . ssh_command ( serv , commands )
funct . logging ( serv , ' Service has been ' + action + ' ed ' , haproxywi = 1 , login = 1 , keep_history = 1 , service = ' apache ' )
print ( " success: Apache has been %s " % action )
2020-07-01 20:39:15 +00:00
if form . getvalue ( ' action_service ' ) is not None :
2020-09-26 17:37:14 +00:00
action = form . getvalue ( ' action_service ' )
if action == ' stop ' :
cmd = " sudo systemctl disable %s --now " % serv
elif action == " start " :
cmd = " sudo systemctl enable %s --now " % serv
2022-04-27 18:10:26 +00:00
if not sql . select_user_status ( ) :
print ( ' warning: The service is disabled because you are not subscribed. Read <a href= " https://roxy-wi.org/pricing.py " title= " Roxy-WI pricing " target= " _blank " >here</a> about subscriptions ' )
sys . exit ( )
2020-09-26 17:37:14 +00:00
elif action == " restart " :
cmd = " sudo systemctl restart %s --now " % serv
2022-04-27 18:10:26 +00:00
if not sql . select_user_status ( ) :
print ( ' warning: The service is disabled because you are not subscribed. Read <a href= " https://roxy-wi.org/pricing.py " title= " Roxy-WI pricing " target= " _blank " >here</a> about subscriptions ' )
sys . exit ( )
2020-09-26 17:37:14 +00:00
output , stderr = funct . subprocess_execute ( cmd )
2021-08-15 09:02:12 +00:00
funct . logging ( ' localhost ' , ' The service ' + serv + ' has been ' + action + ' ed ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2019-12-27 04:31:09 +00:00
if act == " overviewHapserverBackends " :
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' haproxyservers_backends.html ' )
service = form . getvalue ( ' service ' )
2021-12-03 10:39:15 +00:00
format_file = ' cfg '
2021-06-11 15:18:33 +00:00
2020-09-26 17:37:14 +00:00
if service == ' haproxy ' :
configs_dir = funct . get_config_var ( ' configs ' , ' haproxy_save_configs_dir ' )
2020-11-02 17:01:08 +00:00
format_file = ' cfg '
2021-06-11 15:18:33 +00:00
elif service == ' keepalived ' :
configs_dir = funct . get_config_var ( ' configs ' , ' kp_save_configs_dir ' )
format_file = ' conf '
2022-04-15 09:49:00 +00:00
if service != ' nginx ' and service != ' apache ' :
2020-09-26 17:37:14 +00:00
try :
2022-03-02 20:09:39 +00:00
sections = funct . get_sections ( configs_dir + funct . get_files ( dir = configs_dir , format = format_file ) [ 0 ] , service = service )
2020-11-02 17:01:08 +00:00
except Exception as e :
2022-03-02 20:09:39 +00:00
funct . logging ( ' localhost ' , str ( e ) , haproxywi = 1 )
try :
cfg = configs_dir + serv + " - " + funct . get_data ( ' config ' ) + ' . ' + format_file
except Exception as e :
funct . logging ( ' localhost ' , ' Cannot generate a cfg path ' + str ( e ) , haproxywi = 1 )
try :
2022-04-06 12:32:04 +00:00
if service == ' keepalived ' :
2022-03-02 20:09:39 +00:00
error = funct . get_config ( serv , cfg , keepalived = 1 )
else :
error = funct . get_config ( serv , cfg )
except Exception as e :
funct . logging ( ' localhost ' , ' Cannot download a config ' + str ( e ) , haproxywi = 1 )
try :
sections = funct . get_sections ( cfg , service = service )
except Exception as e :
funct . logging ( ' localhost ' , ' Cannot get sections from config file ' + str ( e ) , haproxywi = 1 )
sections = ' Cannot get backends '
else :
sections = funct . get_remote_sections ( serv , service )
2020-09-26 17:37:14 +00:00
template = template . render ( backends = sections , serv = serv , service = service )
print ( template )
2020-07-01 20:39:15 +00:00
2021-04-17 17:38:08 +00:00
if form . getvalue ( ' show_userlists ' ) :
configs_dir = funct . get_config_var ( ' configs ' , ' haproxy_save_configs_dir ' )
format_file = ' cfg '
try :
sections = funct . get_userlists ( configs_dir + funct . get_files ( dir = configs_dir , format = format_file ) [ 0 ] )
except Exception as e :
funct . logging ( ' localhost ' , str ( e ) , haproxywi = 1 )
try :
cfg = configs_dir + serv + " - " + funct . get_data ( ' config ' ) + ' . ' + format_file
except Exception as e :
2021-08-15 09:02:12 +00:00
funct . logging ( ' localhost ' , ' Cannot generate a cfg path ' + str ( e ) , haproxywi = 1 )
2021-04-17 17:38:08 +00:00
try :
error = funct . get_config ( serv , cfg )
except Exception as e :
2021-08-15 09:02:12 +00:00
funct . logging ( ' localhost ' , ' Cannot download a config ' + str ( e ) , haproxywi = 1 )
2021-04-17 17:38:08 +00:00
try :
sections = funct . get_userlists ( cfg )
except Exception as e :
2021-08-15 09:02:12 +00:00
funct . logging ( ' localhost ' , ' Cannot get Userlists from the config file ' + str ( e ) , haproxywi = 1 )
2021-04-17 17:38:08 +00:00
sections = ' error: Cannot get Userlists '
print ( sections )
2019-12-27 04:31:09 +00:00
if act == " overviewHapservers " :
2020-09-26 17:37:14 +00:00
if form . getvalue ( ' service ' ) == ' nginx ' :
config_path = sql . get_setting ( ' nginx_config_path ' )
2021-08-08 13:02:00 +00:00
elif form . getvalue ( ' service ' ) == ' keepalived ' :
config_path = ' /etc/keepalived/keepalived.conf '
2020-09-26 17:37:14 +00:00
else :
config_path = sql . get_setting ( ' haproxy_config_path ' )
commands = [ " ls -l %s |awk ' { print $6 \" \" $7 \" \" $8} ' " % config_path ]
try :
print ( funct . ssh_command ( serv , commands ) )
2020-11-02 17:01:08 +00:00
except Exception as e :
print ( ' error: Cannot get last date ' + str ( e ) )
2020-07-01 20:39:15 +00:00
if act == " overview " :
2020-09-26 17:37:14 +00:00
import asyncio
2020-11-02 17:01:08 +00:00
import http . cookies
from jinja2 import Environment , FileSystemLoader
2020-09-26 17:37:14 +00:00
2022-04-06 12:32:04 +00:00
async def async_get_overview ( serv1 , serv2 , user_uuid , server_id ) :
2021-08-15 09:02:12 +00:00
user_id = sql . get_user_id_by_uuid ( user_uuid )
user_services = sql . select_user_services ( user_id )
2022-04-15 09:49:00 +00:00
haproxy = sql . select_haproxy ( serv ) if ' 1 ' in user_services else 0
nginx = sql . select_nginx ( serv ) if ' 2 ' in user_services else 0
keepalived = sql . select_keepalived ( serv ) if ' 3 ' in user_services else 0
apache = sql . select_apache ( serv ) if ' 4 ' in user_services else 0
2021-07-01 07:19:23 +00:00
waf = sql . select_waf_servers ( serv2 )
haproxy_process = ' '
keepalived_process = ' '
nginx_process = ' '
2022-04-15 09:49:00 +00:00
apache_process = ' '
2021-07-01 07:19:23 +00:00
waf_process = ' '
2021-08-02 08:19:22 +00:00
try :
waf_len = len ( waf )
except :
waf_len = 0
2021-07-01 07:19:23 +00:00
if haproxy == 1 :
cmd = ' echo " show info " |nc %s %s -w 1|grep -e " Process_num " ' % ( serv2 , sql . get_setting ( ' haproxy_sock_port ' ) )
haproxy_process = funct . server_status ( funct . subprocess_execute ( cmd ) )
2020-09-26 17:37:14 +00:00
if nginx == 1 :
2021-07-01 07:19:23 +00:00
nginx_cmd = ' echo " something " |nc %s %s -w 1 ' % ( serv2 , sql . get_setting ( ' nginx_stats_port ' ) )
nginx_process = funct . server_status ( funct . subprocess_execute ( nginx_cmd ) )
2022-04-15 09:49:00 +00:00
if apache == 1 :
apache_cmd = ' echo " something " |nc %s %s -w 1 ' % ( serv2 , sql . get_setting ( ' apache_stats_port ' ) )
apache_process = funct . server_status ( funct . subprocess_execute ( apache_cmd ) )
if keepalived == 1 :
command = [ " ps ax |grep keepalived|grep -v grep|wc -l|tr -d ' \n ' " ]
keepalived_process = funct . ssh_command ( serv2 , command )
2021-08-02 08:19:22 +00:00
if waf_len > = 1 :
command = [ " ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l " ]
waf_process = funct . ssh_command ( serv2 , command )
2021-07-01 07:19:23 +00:00
2020-09-26 17:37:14 +00:00
server_status = ( serv1 ,
serv2 ,
2021-07-15 03:14:13 +00:00
haproxy ,
2021-07-01 07:19:23 +00:00
haproxy_process ,
waf_process ,
waf ,
2020-09-26 17:37:14 +00:00
keepalived ,
keepalived_process ,
nginx ,
2022-04-06 12:32:04 +00:00
nginx_process ,
2022-04-15 09:49:00 +00:00
server_id ,
apache ,
apache_process )
2020-09-26 17:37:14 +00:00
return server_status
async def get_runner_overview ( ) :
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True ,
extensions = [ ' jinja2.ext.loopcontrols ' , ' jinja2.ext.do ' ] )
servers = [ ]
template = env . get_template ( ' overview.html ' )
cookie = http . cookies . SimpleCookie ( os . environ . get ( " HTTP_COOKIE " ) )
2021-08-15 09:02:12 +00:00
user_uuid = cookie . get ( ' uuid ' )
2022-04-06 12:32:04 +00:00
futures = [ async_get_overview ( server [ 1 ] , server [ 2 ] , user_uuid . value , server [ 0 ] ) for server in sql . select_servers ( server = serv ) ]
2020-09-26 17:37:14 +00:00
for i , future in enumerate ( asyncio . as_completed ( futures ) ) :
result = await future
servers . append ( result )
servers_sorted = sorted ( servers , key = funct . get_key )
2021-08-15 09:02:12 +00:00
template = template . render ( service_status = servers_sorted , role = sql . get_user_role_by_uuid ( user_uuid . value ) )
2020-09-26 17:37:14 +00:00
print ( template )
ioloop = asyncio . get_event_loop ( )
ioloop . run_until_complete ( get_runner_overview ( ) )
ioloop . close ( )
2020-07-01 20:39:15 +00:00
if act == " overviewwaf " :
2020-11-02 17:01:08 +00:00
import http . cookies
2019-10-21 06:00:16 +00:00
2022-01-02 15:51:13 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True ,
extensions = [ ' jinja2.ext.loopcontrols ' , ' jinja2.ext.do ' ] )
template = env . get_template ( ' overivewWaf.html ' )
2020-07-01 20:39:15 +00:00
2022-01-02 15:51:13 +00:00
servers = sql . select_servers ( server = serv )
cookie = http . cookies . SimpleCookie ( os . environ . get ( " HTTP_COOKIE " ) )
user_id = cookie . get ( ' uuid ' )
2020-07-01 20:39:15 +00:00
2022-01-02 15:51:13 +00:00
haproxy_path = ' '
returned_servers = [ ]
waf = ' '
metrics_en = 0
waf_process = ' '
waf_mode = ' '
2020-07-01 20:39:15 +00:00
2022-01-02 15:51:13 +00:00
for server in servers :
haproxy = sql . select_haproxy ( server [ 2 ] )
if haproxy == 1 :
haproxy_path = sql . get_setting ( ' haproxy_dir ' )
waf = sql . select_waf_servers ( server [ 2 ] )
metrics_en = sql . select_waf_metrics_enable_server ( server [ 2 ] )
try :
waf_len = len ( waf )
except :
waf_len = 0
if waf_len > = 1 :
command = [ " ps ax |grep waf/bin/modsecurity |grep -v grep |wc -l " ]
commands1 = [
" cat %s /waf/modsecurity.conf |grep SecRuleEngine |grep -v ' # ' |awk ' { print $2} ' " % haproxy_path ]
waf_process = funct . ssh_command ( server [ 2 ] , command )
waf_mode = funct . ssh_command ( server [ 2 ] , commands1 ) . strip ( )
server_status = ( server [ 1 ] ,
server [ 2 ] ,
waf_process ,
waf_mode ,
metrics_en ,
waf_len )
else :
server_status = ( server [ 1 ] ,
server [ 2 ] ,
waf_process ,
waf_mode ,
metrics_en ,
waf_len )
2018-05-13 18:07:33 +00:00
2022-01-02 15:51:13 +00:00
returned_servers . append ( server_status )
2018-05-13 18:07:33 +00:00
2022-01-02 15:51:13 +00:00
servers_sorted = sorted ( returned_servers , key = funct . get_key )
template = template . render ( service_status = servers_sorted , role = sql . get_user_role_by_uuid ( user_id . value ) )
print ( template )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
if act == " overviewServers " :
import asyncio
async def async_get_overviewServers ( serv1 , serv2 , service ) :
if service == ' haproxy ' :
2021-03-04 05:53:27 +00:00
cmd = ' echo " show info " |nc %s %s -w 1|grep -e " node \ |Nbproc \ |Maxco \ |MB \ |Nbthread " ' % ( serv2 , sql . get_setting ( ' haproxy_sock_port ' ) )
2020-09-26 17:37:14 +00:00
out = funct . subprocess_execute ( cmd )
2021-07-01 07:19:23 +00:00
return_out = " "
2020-09-26 17:37:14 +00:00
for k in out :
if " Ncat: " not in k :
for r in k :
2021-07-01 07:19:23 +00:00
return_out + = r
return_out + = " <br /> "
2020-09-26 17:37:14 +00:00
else :
2021-07-01 07:19:23 +00:00
return_out = " Cannot connect to HAProxy "
2020-09-26 17:37:14 +00:00
else :
2021-07-01 07:19:23 +00:00
return_out = ' '
2020-09-26 17:37:14 +00:00
2021-07-01 07:19:23 +00:00
server_status = ( serv1 , serv2 , return_out )
2020-09-26 17:37:14 +00:00
return server_status
async def get_runner_overviewServers ( * * kwargs ) :
import http . cookies
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) ,
extensions = [ ' jinja2.ext.loopcontrols ' , ' jinja2.ext.do ' ] )
template = env . get_template ( ' overviewServers.html ' )
servers = [ ]
cookie = http . cookies . SimpleCookie ( os . environ . get ( " HTTP_COOKIE " ) )
user_id = cookie . get ( ' uuid ' )
role = sql . get_user_role_by_uuid ( user_id . value )
futures = [ async_get_overviewServers ( kwargs . get ( ' server1 ' ) , kwargs . get ( ' server2 ' ) , kwargs . get ( ' service ' ) ) ]
for i , future in enumerate ( asyncio . as_completed ( futures ) ) :
result = await future
servers . append ( result )
servers_sorted = sorted ( servers , key = funct . get_key )
template = template . render ( service_status = servers_sorted , role = role , id = kwargs . get ( ' id ' ) , service_page = service )
print ( template )
2021-07-01 07:19:23 +00:00
server_id = form . getvalue ( ' id ' )
2020-09-26 17:37:14 +00:00
name = form . getvalue ( ' name ' )
service = form . getvalue ( ' service ' )
ioloop = asyncio . get_event_loop ( )
2021-07-01 07:19:23 +00:00
ioloop . run_until_complete ( get_runner_overviewServers ( server1 = name , server2 = serv , id = server_id , service = service ) )
2020-09-26 17:37:14 +00:00
ioloop . close ( )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
if form . getvalue ( ' action ' ) :
import requests
haproxy_user = sql . get_setting ( ' stats_user ' )
haproxy_pass = sql . get_setting ( ' stats_password ' )
stats_port = sql . get_setting ( ' stats_port ' )
stats_page = sql . get_setting ( ' stats_page ' )
postdata = {
' action ' : form . getvalue ( ' action ' ) ,
' s ' : form . getvalue ( ' s ' ) ,
' b ' : form . getvalue ( ' b ' )
}
headers = {
' User-Agent ' : ' Mozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0 ' ,
' Accept ' : ' text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ' ,
' Accept-Language ' : ' en-US,en;q=0.5 ' ,
' Accept-Encoding ' : ' gzip, deflate '
}
2021-08-23 07:23:24 +00:00
q = requests . post ( ' http:// {} : {} / {} ' . format ( serv , stats_port , stats_page ) ,
2020-09-26 17:37:14 +00:00
headers = headers ,
data = postdata ,
auth = ( haproxy_user , haproxy_pass ) )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
if serv is not None and act == " stats " :
import requests
if form . getvalue ( ' service ' ) == ' nginx ' :
haproxy_user = sql . get_setting ( ' nginx_stats_user ' )
haproxy_pass = sql . get_setting ( ' nginx_stats_password ' )
stats_port = sql . get_setting ( ' nginx_stats_port ' )
stats_page = sql . get_setting ( ' nginx_stats_page ' )
2022-04-24 07:08:45 +00:00
elif form . getvalue ( ' service ' ) == ' apache ' :
haproxy_user = sql . get_setting ( ' apache_stats_user ' )
haproxy_pass = sql . get_setting ( ' apache_stats_password ' )
stats_port = sql . get_setting ( ' apache_stats_port ' )
stats_page = sql . get_setting ( ' apache_stats_page ' )
2020-09-26 17:37:14 +00:00
else :
haproxy_user = sql . get_setting ( ' stats_user ' )
haproxy_pass = sql . get_setting ( ' stats_password ' )
stats_port = sql . get_setting ( ' stats_port ' )
stats_page = sql . get_setting ( ' stats_page ' )
try :
response = requests . get ( ' http:// %s : %s / %s ' % ( serv , stats_port , stats_page ) , auth = ( haproxy_user , haproxy_pass ) )
except requests . exceptions . ConnectTimeout :
2021-02-20 07:47:33 +00:00
print ( ' error: Oops. Connection timeout occurred! ' )
2020-09-26 17:37:14 +00:00
except requests . exceptions . ReadTimeout :
2021-02-20 07:47:33 +00:00
print ( ' error: Oops. Read timeout occurred ' )
2020-09-26 17:37:14 +00:00
except requests . exceptions . HTTPError as errh :
print ( " error: Http Error: " , errh )
except requests . exceptions . ConnectionError as errc :
print ( ' error: Error Connecting: %s ' % errc )
except requests . exceptions . Timeout as errt :
print ( " error: Timeout Error: " , errt )
except requests . exceptions . RequestException as err :
print ( " error: OOps: Something Else " , err )
data = response . content
if form . getvalue ( ' service ' ) == ' nginx ' :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True )
template = env . get_template ( ' ajax/nginx_stats.html ' )
servers_with_status = list ( )
h = ( )
out1 = [ ]
for k in data . decode ( ' utf-8 ' ) . split ( ) :
out1 . append ( k )
h = ( out1 , )
servers_with_status . append ( h )
template = template . render ( out = servers_with_status )
print ( template )
else :
print ( data . decode ( ' utf-8 ' ) )
2020-07-01 20:39:15 +00:00
2021-08-08 13:02:00 +00:00
if serv is not None and form . getvalue ( ' show_log ' ) is not None :
2021-08-15 09:02:12 +00:00
rows = form . getvalue ( ' show_log ' )
2020-09-26 17:37:14 +00:00
waf = form . getvalue ( ' waf ' )
grep = form . getvalue ( ' grep ' )
hour = form . getvalue ( ' hour ' )
minut = form . getvalue ( ' minut ' )
hour1 = form . getvalue ( ' hour1 ' )
minut1 = form . getvalue ( ' minut1 ' )
service = form . getvalue ( ' service ' )
out = funct . show_haproxy_log ( serv , rows = rows , waf = waf , grep = grep , hour = hour , minut = minut , hour1 = hour1 ,
minut1 = minut1 , service = service )
print ( out )
2020-07-01 20:39:15 +00:00
2018-05-07 19:09:56 +00:00
if serv is not None and form . getvalue ( ' rows1 ' ) is not None :
2020-09-26 17:37:14 +00:00
rows = form . getvalue ( ' rows1 ' )
grep = form . getvalue ( ' grep ' )
hour = form . getvalue ( ' hour ' )
minut = form . getvalue ( ' minut ' )
hour1 = form . getvalue ( ' hour1 ' )
minut1 = form . getvalue ( ' minut1 ' )
out = funct . show_haproxy_log ( serv , rows = rows , waf = ' 0 ' , grep = grep , hour = hour , minut = minut , hour1 = hour1 ,
2022-04-15 09:49:00 +00:00
minut1 = minut1 , service = ' apache_internal ' )
2020-09-26 17:37:14 +00:00
print ( out )
2020-07-01 20:39:15 +00:00
2018-05-18 18:09:14 +00:00
if form . getvalue ( ' viewlogs ' ) is not None :
2020-09-26 17:37:14 +00:00
viewlog = form . getvalue ( ' viewlogs ' )
rows = form . getvalue ( ' rows ' )
grep = form . getvalue ( ' grep ' )
hour = form . getvalue ( ' hour ' )
minut = form . getvalue ( ' minut ' )
hour1 = form . getvalue ( ' hour1 ' )
minut1 = form . getvalue ( ' minut1 ' )
if funct . check_user_group ( ) :
out = funct . show_haproxy_log ( serv = viewlog , rows = rows , waf = ' 0 ' , grep = grep , hour = hour , minut = minut , hour1 = hour1 ,
minut1 = minut1 , service = ' internal ' )
print ( out )
2020-07-01 20:39:15 +00:00
2018-04-11 09:27:57 +00:00
if serv is not None and act == " showMap " :
2020-09-26 17:37:14 +00:00
import networkx as nx
import matplotlib
matplotlib . use ( ' Agg ' )
import matplotlib . pyplot as plt
stats_port = sql . get_setting ( ' stats_port ' )
haproxy_config_path = sql . get_setting ( ' haproxy_config_path ' )
hap_configs_dir = funct . get_config_var ( ' configs ' , ' haproxy_save_configs_dir ' )
date = funct . get_data ( ' config ' )
cfg = hap_configs_dir + serv + " - " + date + " .cfg "
print ( ' <center> ' )
print ( " <h4>Map from %s </h4><br /> " % serv )
error = funct . get_config ( serv , cfg )
if error :
print ( error )
try :
conf = open ( cfg , " r " )
except IOError :
print ( ' error: Can \' t read import config file ' )
2021-09-02 08:07:24 +00:00
G = nx . DiGraph ( )
2020-09-26 17:37:14 +00:00
node = " "
line_new2 = [ 1 , " " ]
2021-09-02 08:07:24 +00:00
sections = { ' listens ' : dict ( ) , ' backends ' : dict ( ) }
2020-09-26 17:37:14 +00:00
for line in conf :
if line . startswith ( ' listen ' ) or line . startswith ( ' frontend ' ) :
if " stats " not in line :
node = line
if line . find ( " backend " ) == 0 :
node = line
2021-09-02 08:07:24 +00:00
node = node . split ( ' \n ' ) [ 0 ]
sections [ ' backends ' ] [ node ] = { ' servers ' : dict ( ) }
2020-09-26 17:37:14 +00:00
if " bind " in line or ( line . startswith ( ' listen ' ) and " : " in line ) or (
line . startswith ( ' frontend ' ) and " : " in line ) :
try :
2021-09-30 06:04:41 +00:00
if " @ " not in line :
bind = line . split ( " : " )
else :
bind = line . split ( " @ " )
2021-09-02 08:07:24 +00:00
if str ( stats_port ) not in bind [ 1 ] :
2020-09-26 17:37:14 +00:00
bind [ 1 ] = bind [ 1 ] . strip ( ' ' )
bind = bind [ 1 ] . split ( " crt " )
node = node . strip ( ' \t \n \r ' )
node = node + " : " + bind [ 0 ]
2021-09-02 08:07:24 +00:00
node = node . split ( ' \n ' ) [ 0 ]
sections [ ' listens ' ] [ node ] = { ' servers ' : dict ( ) }
except Exception as e :
2020-09-26 17:37:14 +00:00
pass
if " server " in line or " use_backend " in line or " default_backend " in line and " stats " not in line and " # " not in line :
if " timeout " not in line and " default-server " not in line and " # " not in line and " stats " not in line :
if " check " in line :
line_new = line . split ( " check " )
else :
line_new = line . split ( " if " )
if " server " in line :
line_new1 = line_new [ 0 ] . split ( " server " )
line_new [ 0 ] = line_new1 [ 1 ]
line_new2 = line_new [ 0 ] . split ( " : " )
line_new [ 0 ] = line_new2 [ 0 ]
line_new [ 0 ] = line_new [ 0 ] . strip ( ' \t \n \r ' )
2021-03-31 13:59:03 +00:00
2021-03-22 06:33:28 +00:00
try :
2021-03-31 13:59:03 +00:00
backend_server_port = line_new2 [ 1 ] . strip ( ' \t \n \r ' )
backend_server_port = ' port: ' + backend_server_port
2021-03-22 06:33:28 +00:00
except Exception as e :
2021-03-31 13:59:03 +00:00
backend_server_port = ' '
2020-09-26 17:37:14 +00:00
2021-09-02 08:07:24 +00:00
try :
sections [ ' listens ' ] [ node ] [ ' servers ' ] [ line_new [ 0 ] ] = { line_new [ 0 ] : backend_server_port }
except Exception as e :
pass
2020-09-26 17:37:14 +00:00
2021-09-02 08:07:24 +00:00
try :
sections [ ' backends ' ] [ node ] [ ' servers ' ] [ line_new [ 0 ] ] = { line_new [ 0 ] : backend_server_port }
except Exception as e :
pass
2020-09-26 17:37:14 +00:00
os . system ( " /bin/rm -f " + cfg )
2021-09-02 08:07:24 +00:00
i , k , j = 0 , 0 , 0
backend_servers_len_dict = 1
backends_from_frontends = [ ]
backends_servers = [ ]
for key , val in sections . items ( ) :
if key == ' listens ' :
for k2 , v2 in val . items ( ) :
i - = 750
G . add_node ( k2 , pos = ( k , i ) , label_pos = ( k , i + 250 ) )
for k3 , v3 in v2 . items ( ) :
for k4 , v4 in v3 . items ( ) :
""" Add backend servers of listens or backend from frontends """
i - = 300
j + = 1
server_name = k4
if ' default_backend ' in k4 or ' use_backend ' in k4 :
backend_name = k4 . split ( ' ' ) [ 1 ]
backend_name = ' backend ' + backend_name
k4 = backend_name
backends_from_frontends . append ( k4 )
if k4 not in backends_servers :
if j % 2 == 0 :
G . add_node ( k4 , pos = ( k + 250 , i - 100 ) , label_pos = ( k + 250 , i - 420 ) )
else :
G . add_node ( k4 , pos = ( k - 250 , i - 370 ) , label_pos = ( k - 245 , i - 650 ) )
if v4 [ server_name ] != ' ' :
G . add_edge ( k2 , k4 , port = v4 [ server_name ] )
else :
G . add_edge ( k2 , k4 , port = ' ' )
for k4 , v4 in v3 . items ( ) :
""" Add servers from backends """
i - = 300
j - = 1
if ' default_backend ' in k4 or ' use_backend ' in k4 :
backend_name = k4 . split ( ' ' ) [ 1 ]
backend_name = ' backend ' + backend_name
k4 = backend_name
backends_from_frontends . append ( k4 )
if j % 2 == 0 :
if len ( v3 ) % 2 == 0 :
i + = ( 700 * backend_servers_len_dict ) + 700
for k5 , v5 in sections [ ' backends ' ] [ k4 ] [ ' servers ' ] . items ( ) :
i - = 700
s = k + 400
G . add_node ( k5 , pos = ( s + 250 , i - 335 ) , label_pos = ( s + 215 , i - 580 ) )
if v5 [ k5 ] != ' ' :
G . add_edge ( k4 , k5 , port = v5 [ k5 ] )
else :
G . add_edge ( k4 , k5 , port = ' ' )
backends_servers . append ( k5 )
else :
for k5 , v5 in sections [ ' backends ' ] [ k4 ] [ ' servers ' ] . items ( ) :
i - = 700
s = k - 400
G . add_node ( k5 , pos = ( s - 250 , i - 0 ) , label_pos = ( s - 245 , i - 270 ) )
if v5 [ k5 ] != ' ' :
G . add_edge ( k4 , k5 , port = v5 [ k5 ] )
else :
G . add_edge ( k4 , k5 , port = ' ' )
backends_servers . append ( k5 )
backend_servers_len_dict = len ( sections [ ' backends ' ] [ k4 ] [ ' servers ' ] )
backends_servers . append ( k4 )
elif key == ' backends ' :
for k2 , v2 in val . items ( ) :
if k2 not in backends_from_frontends :
i - = 750
G . add_node ( k2 , pos = ( k , i ) , label_pos = ( k , i + 250 ) )
for k3 , v3 in v2 . items ( ) :
for k4 , v4 in v3 . items ( ) :
if k4 not in backends_servers :
i - = 300
j + = 1
if j % 2 == 0 :
s = k + 400
G . add_node ( k4 , pos = ( s + 250 , i - 335 ) , label_pos = ( s + 215 , i - 580 ) )
else :
s = k - 400
G . add_node ( k4 , pos = ( s - 250 , i - 0 ) , label_pos = ( s - 245 , i - 270 ) )
if v4 [ k4 ] != ' ' :
G . add_edge ( k2 , k4 , port = v4 [ k4 ] )
else :
G . add_edge ( k2 , k4 , port = ' ' )
backends_servers . append ( k4 )
2020-09-26 17:37:14 +00:00
pos = nx . get_node_attributes ( G , ' pos ' )
pos_label = nx . get_node_attributes ( G , ' label_pos ' )
edge_labels = nx . get_edge_attributes ( G , ' port ' )
try :
2021-09-02 08:07:24 +00:00
plt . figure ( 10 , figsize = ( 10 , 20 ) )
2020-09-26 17:37:14 +00:00
nx . draw ( G , pos , with_labels = False , font_weight = ' bold ' , width = 3 , alpha = 0.1 , linewidths = 5 )
2021-09-02 08:07:24 +00:00
nx . draw_networkx_nodes ( G , pos , node_color = " #5d9ceb " , node_size = 100 , alpha = 0.8 , node_shape = " h " )
nx . draw_networkx_labels ( G , pos = pos_label , alpha = 1 , font_color = " #5CB85C " , font_size = 10 )
nx . draw_networkx_edges ( G , pos , width = 0.3 , alpha = 0.7 , edge_color = " #5D9CEB " , arrows = False )
nx . draw_networkx_edge_labels ( G , pos , alpha = 0.4 , label_pos = 0.5 , font_color = " #5d9ceb " , edge_labels = edge_labels , font_size = 8 )
2020-09-26 17:37:14 +00:00
plt . savefig ( " map.png " )
plt . show ( )
except Exception as e :
print ( str ( e ) )
cmd = " rm -f " + os . path . dirname ( os . getcwd ( ) ) + " /map*.png && mv map.png " + os . path . dirname (
os . getcwd ( ) ) + " /map " + date + " .png "
output , stderr = funct . subprocess_execute ( cmd )
print ( stderr )
print ( ' <img src= " /map %s .png " alt= " map " > ' % date )
2020-07-01 20:39:15 +00:00
2018-04-10 03:58:56 +00:00
if form . getvalue ( ' servaction ' ) is not None :
2020-09-26 17:37:14 +00:00
server_state_file = sql . get_setting ( ' server_state_file ' )
haproxy_sock = sql . get_setting ( ' haproxy_sock ' )
enable = form . getvalue ( ' servaction ' )
backend = form . getvalue ( ' servbackend ' )
2021-08-08 13:02:00 +00:00
cmd = ' echo " {} {} " |sudo socat stdio {} ' . format ( enable , backend , haproxy_sock )
2020-09-26 17:37:14 +00:00
if form . getvalue ( ' save ' ) == " on " :
2021-08-08 13:02:00 +00:00
save_command = ' echo " show servers state " | sudo socat {} stdio > {} ' . format ( haproxy_sock , server_state_file )
2020-09-26 17:37:14 +00:00
command = [ cmd + ' ; ' + save_command ]
else :
command = [ cmd ]
if enable != " show " :
2021-09-15 05:40:51 +00:00
funct . logging ( serv , ' Has been ' + enable + ' ed ' + backend , login = 1 , keep_history = 1 , service = ' haproxy ' )
2020-09-26 17:37:14 +00:00
print (
2021-02-20 07:47:33 +00:00
' <center><h3>You %s %s on HAProxy %s . <a href= " viewsttats.py?serv= %s " title= " View stat " target= " _blank " >Look it</a> or <a href= " runtimeapi.py " title= " Runtime API " >Edit something else</a></h3><br /> ' % ( enable , backend , serv , serv ) )
2020-09-26 17:37:14 +00:00
print ( funct . ssh_command ( serv , command , show_log = " 1 " ) )
action = ' runtimeapi.py ' + enable + ' ' + backend
funct . logging ( serv , action )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
if act == " showCompareConfigs " :
from jinja2 import Environment , FileSystemLoader
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True )
template = env . get_template ( ' ajax/show_compare_configs.html ' )
left = form . getvalue ( ' left ' )
right = form . getvalue ( ' right ' )
2022-04-15 09:49:00 +00:00
service = form . getvalue ( ' service ' )
2020-07-01 20:39:15 +00:00
2022-04-15 09:49:00 +00:00
if service == ' nginx ' :
2020-09-26 17:37:14 +00:00
return_files = funct . get_files ( funct . get_config_var ( ' configs ' , ' nginx_save_configs_dir ' ) , ' conf ' )
2022-04-15 09:49:00 +00:00
elif service == ' apache ' :
return_files = funct . get_files ( funct . get_config_var ( ' configs ' , ' apache_save_configs_dir ' ) , ' conf ' )
elif service == ' keepalived ' :
2021-06-11 15:18:33 +00:00
return_files = funct . get_files ( funct . get_config_var ( ' configs ' , ' kp_save_configs_dir ' ) , ' conf ' )
2020-09-26 17:37:14 +00:00
else :
return_files = funct . get_files ( )
2018-04-11 09:27:57 +00:00
2020-09-26 17:37:14 +00:00
template = template . render ( serv = serv , right = right , left = left , return_files = return_files )
print ( template )
2019-10-21 06:00:16 +00:00
2020-09-26 17:37:14 +00:00
if serv is not None and form . getvalue ( ' right ' ) is not None :
from jinja2 import Environment , FileSystemLoader
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
left = form . getvalue ( ' left ' )
right = form . getvalue ( ' right ' )
2022-04-15 09:49:00 +00:00
2020-09-26 17:37:14 +00:00
if form . getvalue ( ' service ' ) == ' nginx ' :
configs_dir = funct . get_config_var ( ' configs ' , ' nginx_save_configs_dir ' )
2022-04-15 09:49:00 +00:00
elif form . getvalue ( ' service ' ) == ' apache ' :
configs_dir = funct . get_config_var ( ' configs ' , ' apache_save_configs_dir ' )
2021-06-11 15:18:33 +00:00
elif form . getvalue ( ' service ' ) == ' keepalived ' :
configs_dir = funct . get_config_var ( ' configs ' , ' kp_save_configs_dir ' )
2020-09-26 17:37:14 +00:00
else :
configs_dir = funct . get_config_var ( ' configs ' , ' haproxy_save_configs_dir ' )
2022-04-15 09:49:00 +00:00
2021-04-17 17:38:08 +00:00
cmd = ' diff -pub %s %s %s %s ' % ( configs_dir , left , configs_dir , right )
2020-09-26 17:37:14 +00:00
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True ,
extensions = [ " jinja2.ext.loopcontrols " , " jinja2.ext.do " ] )
template = env . get_template ( ' ajax/compare.html ' )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
output , stderr = funct . subprocess_execute ( cmd )
template = template . render ( stdout = output )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
print ( template )
print ( stderr )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
if serv is not None and act == " configShow " :
2021-05-16 05:27:47 +00:00
import http . cookies
cookie = http . cookies . SimpleCookie ( os . environ . get ( " HTTP_COOKIE " ) )
user_uuid = cookie . get ( ' uuid ' )
role_id = sql . get_user_role_by_uuid ( user_uuid . value )
2021-06-11 15:18:33 +00:00
service = form . getvalue ( ' service ' )
2022-01-16 13:50:53 +00:00
try :
config_file_name = form . getvalue ( ' config_file_name ' ) . replace ( ' / ' , ' 92 ' )
except :
config_file_name = ' '
2021-05-16 05:27:47 +00:00
2021-06-11 15:18:33 +00:00
if service == ' keepalived ' :
2020-09-26 17:37:14 +00:00
configs_dir = funct . get_config_var ( ' configs ' , ' kp_save_configs_dir ' )
cfg = ' .conf '
2021-06-11 15:18:33 +00:00
elif service == ' nginx ' :
2020-09-26 17:37:14 +00:00
configs_dir = funct . get_config_var ( ' configs ' , ' nginx_save_configs_dir ' )
cfg = ' .conf '
2022-04-15 09:49:00 +00:00
elif service == ' apache ' :
configs_dir = funct . get_config_var ( ' configs ' , ' apache_save_configs_dir ' )
cfg = ' .conf '
2020-09-26 17:37:14 +00:00
else :
configs_dir = funct . get_config_var ( ' configs ' , ' haproxy_save_configs_dir ' )
cfg = ' .cfg '
if form . getvalue ( ' configver ' ) is None :
cfg = configs_dir + serv + " - " + funct . get_data ( ' config ' ) + cfg
2021-06-11 15:18:33 +00:00
if service == ' nginx ' :
2022-01-16 13:50:53 +00:00
funct . get_config ( serv , cfg , nginx = 1 , config_file_name = form . getvalue ( ' config_file_name ' ) )
2022-04-15 09:49:00 +00:00
elif service == ' apache ' :
funct . get_config ( serv , cfg , apache = 1 , config_file_name = form . getvalue ( ' config_file_name ' ) )
2021-06-11 15:18:33 +00:00
elif service == ' keepalived ' :
funct . get_config ( serv , cfg , keepalived = 1 )
2020-09-26 17:37:14 +00:00
else :
funct . get_config ( serv , cfg )
else :
cfg = configs_dir + form . getvalue ( ' configver ' )
try :
conf = open ( cfg , " r " )
except IOError :
print ( ' <div class= " alert alert-danger " >Can \' t read config file</div> ' )
2021-08-08 13:02:00 +00:00
2021-05-16 05:27:47 +00:00
is_serv_protected = sql . is_serv_protected ( serv )
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True , trim_blocks = True , lstrip_blocks = True ,
extensions = [ " jinja2.ext.loopcontrols " , " jinja2.ext.do " ] )
template = env . get_template ( ' config_show.html ' )
template = template . render ( conf = conf ,
serv = serv ,
configver = form . getvalue ( ' configver ' ) ,
2021-05-16 05:27:47 +00:00
role = role_id ,
2021-06-11 15:18:33 +00:00
service = service ,
2022-01-16 13:50:53 +00:00
config_file_name = config_file_name ,
2021-05-16 05:27:47 +00:00
is_serv_protected = is_serv_protected )
2020-09-26 17:37:14 +00:00
print ( template )
if form . getvalue ( ' configver ' ) is None :
os . system ( " /bin/rm -f " + cfg )
2020-07-01 20:39:15 +00:00
2022-01-16 13:50:53 +00:00
if act == ' configShowFiles ' :
2022-04-15 09:49:00 +00:00
service = form . getvalue ( ' service ' )
config_dir = funct . get_config_var ( ' configs ' , service + ' _save_configs_dir ' )
service_config_dir = sql . get_setting ( service + ' _dir ' )
2022-01-16 13:50:53 +00:00
try :
config_file_name = form . getvalue ( ' config_file_name ' ) . replace ( ' 92 ' , ' / ' )
except :
config_file_name = ' '
2022-04-15 09:49:00 +00:00
return_files = funct . get_remote_files ( serv , service_config_dir , ' conf ' )
2022-02-16 07:46:30 +00:00
if ' error: ' in return_files :
print ( return_files )
sys . exit ( )
2022-04-15 09:49:00 +00:00
return_files + = ' ' + sql . get_setting ( service + ' _config_path ' )
2022-01-16 13:50:53 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True )
template = env . get_template ( ' ajax/show_configs_files.html ' )
2022-04-15 09:49:00 +00:00
template = template . render ( serv = serv , service = service , return_files = return_files ,
config_file_name = config_file_name , path_dir = service_config_dir )
2022-01-16 13:50:53 +00:00
print ( template )
2022-03-02 20:09:39 +00:00
if act == ' showRemoteLogFiles ' :
service = form . getvalue ( ' service ' )
log_path = sql . get_setting ( service + ' _path_logs ' )
return_files = funct . get_remote_files ( serv , log_path , ' log ' )
if ' error: ' in return_files :
print ( return_files )
sys . exit ( )
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True )
template = env . get_template ( ' ajax/show_log_files.html ' )
template = template . render ( serv = serv , return_files = return_files , path_dir = log_path )
print ( template )
2020-09-26 17:37:14 +00:00
if form . getvalue ( ' master ' ) :
master = form . getvalue ( ' master ' )
slave = form . getvalue ( ' slave ' )
ETH = form . getvalue ( ' interface ' )
IP = form . getvalue ( ' vrrpip ' )
syn_flood = form . getvalue ( ' syn_flood ' )
2021-07-01 07:19:23 +00:00
virt_server = form . getvalue ( ' virt_server ' )
2022-02-02 20:23:33 +00:00
return_to_master = form . getvalue ( ' return_to_master ' )
2021-07-01 07:19:23 +00:00
haproxy = form . getvalue ( ' hap ' )
nginx = form . getvalue ( ' nginx ' )
2020-09-26 17:37:14 +00:00
script = " install_keepalived.sh "
proxy = sql . get_setting ( ' proxy ' )
2021-08-02 08:19:22 +00:00
ssh_port = 22
2020-09-26 17:37:14 +00:00
ssh_enable , ssh_user_name , ssh_user_password , ssh_key_name = funct . return_ssh_keys_path ( master )
if ssh_enable == 0 :
ssh_key_name = ' '
servers = sql . select_servers ( server = master )
for server in servers :
ssh_port = str ( server [ 10 ] )
if proxy is not None and proxy != ' ' and proxy != ' None ' :
proxy_serv = proxy
else :
proxy_serv = ' '
os . system ( " cp scripts/ %s . " % script )
commands = [ " chmod +x " + script + " && ./ " + script + " PROXY= " + proxy_serv + " SSH_PORT= " + ssh_port +
2022-02-02 20:23:33 +00:00
" ETH= " + ETH + " IP= " + str ( IP ) + " MASTER=MASTER " + " RETURN_TO_MASTER= " + return_to_master +
" SYN_FLOOD= " + syn_flood + " HOST= " + str ( master ) +
2021-08-15 09:02:12 +00:00
" USER= " + str ( ssh_user_name ) + " PASS= ' " + str ( ssh_user_password ) + " ' KEY= " + str ( ssh_key_name ) ]
2020-09-26 17:37:14 +00:00
output , error = funct . subprocess_execute ( commands [ 0 ] )
2021-08-24 10:12:52 +00:00
if funct . show_installation_output ( error , output , ' master Keepalived ' ) :
sql . update_keepalived ( master )
if virt_server != ' 0 ' :
group_id = sql . get_group_id_by_server_ip ( master )
cred_id = sql . get_cred_id_by_server_ip ( master )
hostname = sql . get_hostname_by_server_ip ( master )
sql . add_server ( hostname + ' -VIP ' , IP , group_id , ' 1 ' , ' 1 ' , ' 0 ' , cred_id , ssh_port , ' VRRP IP for ' + master , haproxy , nginx , ' 0 ' )
2021-07-01 07:19:23 +00:00
2021-03-04 05:53:27 +00:00
if form . getvalue ( ' master_slave ' ) :
2021-08-16 09:22:30 +00:00
master = form . getvalue ( ' master_slave ' )
2021-03-04 05:53:27 +00:00
slave = form . getvalue ( ' slave ' )
ETH = form . getvalue ( ' interface ' )
IP = form . getvalue ( ' vrrpip ' )
syn_flood = form . getvalue ( ' syn_flood ' )
script = " install_keepalived.sh "
proxy = sql . get_setting ( ' proxy ' )
2021-08-02 08:19:22 +00:00
ssh_port = 22
2020-09-26 17:37:14 +00:00
ssh_enable , ssh_user_name , ssh_user_password , ssh_key_name = funct . return_ssh_keys_path ( slave )
if ssh_enable == 0 :
ssh_key_name = ' '
servers = sql . select_servers ( server = slave )
for server in servers :
ssh_port = str ( server [ 10 ] )
2021-03-04 05:53:27 +00:00
if proxy is not None and proxy != ' ' and proxy != ' None ' :
proxy_serv = proxy
else :
proxy_serv = ' '
os . system ( " cp scripts/ %s . " % script )
2020-09-26 17:37:14 +00:00
commands = [ " chmod +x " + script + " && ./ " + script + " PROXY= " + proxy_serv + " SSH_PORT= " + ssh_port +
" ETH= " + ETH + " IP= " + IP + " MASTER=BACKUP " + " HOST= " + str ( slave ) +
2021-08-15 09:02:12 +00:00
" USER= " + str ( ssh_user_name ) + " PASS= ' " + str ( ssh_user_password ) + " ' KEY= " + str ( ssh_key_name ) ]
2020-09-26 17:37:14 +00:00
output , error = funct . subprocess_execute ( commands [ 0 ] )
2021-03-04 05:53:27 +00:00
funct . show_installation_output ( error , output , ' slave Keepalived ' )
2020-09-26 17:37:14 +00:00
os . system ( " rm -f %s " % script )
sql . update_server_master ( master , slave )
sql . update_keepalived ( slave )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
if form . getvalue ( ' masteradd ' ) :
master = form . getvalue ( ' masteradd ' )
slave = form . getvalue ( ' slaveadd ' )
ETH = form . getvalue ( ' interfaceadd ' )
IP = form . getvalue ( ' vrrpipadd ' )
kp = form . getvalue ( ' kp ' )
2022-02-02 20:23:33 +00:00
return_to_master = form . getvalue ( ' return_to_master ' )
2020-09-26 17:37:14 +00:00
script = " install_keepalived.sh "
proxy = sql . get_setting ( ' proxy ' )
2021-08-02 08:19:22 +00:00
ssh_port = 22
2020-09-26 17:37:14 +00:00
ssh_enable , ssh_user_name , ssh_user_password , ssh_key_name = funct . return_ssh_keys_path ( master )
if ssh_enable == 0 :
ssh_key_name = ' '
if proxy is not None and proxy != ' ' and proxy != ' None ' :
proxy_serv = proxy
else :
proxy_serv = ' '
os . system ( " cp scripts/ %s . " % script )
servers = sql . select_servers ( server = master )
for server in servers :
ssh_port = str ( server [ 10 ] )
commands = [ " chmod +x " + script + " && ./ " + script + " PROXY= " + proxy_serv +
2022-02-02 20:23:33 +00:00
" SSH_PORT= " + ssh_port + " ETH= " + ETH + " RETURN_TO_MASTER= " + return_to_master +
2020-09-26 17:37:14 +00:00
" IP= " + str ( IP ) + " MASTER=MASTER " + " RESTART= " + kp + " ADD_VRRP=1 HOST= " + str ( master ) +
2021-08-15 09:02:12 +00:00
" USER= " + str ( ssh_user_name ) + " PASS= ' " + str ( ssh_user_password ) + " ' KEY= " + str ( ssh_key_name ) ]
2020-09-26 17:37:14 +00:00
output , error = funct . subprocess_execute ( commands [ 0 ] )
2021-03-04 05:53:27 +00:00
funct . show_installation_output ( error , output , ' master VRRP address ' )
2020-09-26 17:37:14 +00:00
2021-03-05 05:02:52 +00:00
if form . getvalue ( ' masteradd_slave ' ) :
master = form . getvalue ( ' masteradd_slave ' )
slave = form . getvalue ( ' slaveadd ' )
ETH = form . getvalue ( ' interfaceadd ' )
IP = form . getvalue ( ' vrrpipadd ' )
kp = form . getvalue ( ' kp ' )
script = " install_keepalived.sh "
proxy = sql . get_setting ( ' proxy ' )
2021-08-02 08:19:22 +00:00
ssh_port = 22
2020-09-26 17:37:14 +00:00
ssh_enable , ssh_user_name , ssh_user_password , ssh_key_name = funct . return_ssh_keys_path ( slave )
if ssh_enable == 0 :
ssh_key_name = ' '
2021-03-05 05:02:52 +00:00
if proxy is not None and proxy != ' ' and proxy != ' None ' :
proxy_serv = proxy
else :
proxy_serv = ' '
os . system ( " cp scripts/ %s . " % script )
2020-09-26 17:37:14 +00:00
servers = sql . select_servers ( server = slave )
for server in servers :
ssh_port = str ( server [ 10 ] )
commands = [ " chmod +x " + script + " && ./ " + script + " PROXY= " + proxy_serv +
" SSH_PORT= " + ssh_port + " ETH= " + ETH +
" IP= " + str ( IP ) + " MASTER=BACKUP " + " RESTART= " + kp + " ADD_VRRP=1 HOST= " + str ( slave ) +
2021-08-15 09:02:12 +00:00
" USER= " + str ( ssh_user_name ) + " PASS= ' " + str ( ssh_user_password ) + " ' KEY= " + str ( ssh_key_name ) ]
2020-09-26 17:37:14 +00:00
output , error = funct . subprocess_execute ( commands [ 0 ] )
2021-03-04 05:53:27 +00:00
funct . show_installation_output ( error , output , ' slave VRRP address ' )
2020-09-26 17:37:14 +00:00
os . system ( " rm -f %s " % script )
2020-07-01 20:39:15 +00:00
2021-03-04 05:53:27 +00:00
if form . getvalue ( ' master_slave_hap ' ) :
master = form . getvalue ( ' master_slave_hap ' )
slave = form . getvalue ( ' slave ' )
server = form . getvalue ( ' server ' )
2021-10-04 07:40:59 +00:00
docker = form . getvalue ( ' docker ' )
2021-03-04 05:53:27 +00:00
if server == ' master ' :
2021-10-04 07:40:59 +00:00
funct . install_haproxy ( master , server = server , docker = docker )
2021-03-04 05:53:27 +00:00
elif server == ' slave ' :
2021-10-04 07:40:59 +00:00
funct . install_haproxy ( slave , server = server , docker = docker )
2021-03-04 05:53:27 +00:00
if form . getvalue ( ' master_slave_nginx ' ) :
master = form . getvalue ( ' master_slave_nginx ' )
slave = form . getvalue ( ' slave ' )
server = form . getvalue ( ' server ' )
2021-10-04 07:40:59 +00:00
docker = form . getvalue ( ' docker ' )
2021-03-04 05:53:27 +00:00
if server == ' master ' :
2021-10-04 07:40:59 +00:00
funct . install_nginx ( master , server = server , docker = docker )
2021-03-04 05:53:27 +00:00
elif server == ' slave ' :
2021-10-04 07:40:59 +00:00
funct . install_nginx ( slave , server = server , docker = docker )
2021-03-04 05:53:27 +00:00
2020-09-26 17:37:14 +00:00
if form . getvalue ( ' install_grafana ' ) :
script = " install_grafana.sh "
proxy = sql . get_setting ( ' proxy ' )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
os . system ( " cp scripts/ %s . " % script )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
if proxy is not None and proxy != ' ' and proxy != ' None ' :
proxy_serv = proxy
else :
proxy_serv = ' '
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
commands = [ " chmod +x " + script + " && ./ " + script + " PROXY= " + proxy_serv ]
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
output , error = funct . subprocess_execute ( commands [ 0 ] )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
if error :
funct . logging ( ' localhost ' , error , haproxywi = 1 )
import socket
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
print (
' success: Grafana and Prometheus servers were installed. You can find Grafana on http:// ' + socket . gethostname ( ) + ' :3000<br> ' )
else :
for l in output :
2021-04-03 04:10:37 +00:00
if " Traceback " in l or " FAILED " in l :
2020-09-26 17:37:14 +00:00
try :
2021-04-03 04:10:37 +00:00
print ( l )
2020-09-26 17:37:14 +00:00
break
2020-11-16 12:31:52 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
print ( output )
break
else :
import socket
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
print (
' success: Grafana and Prometheus servers were installed. You can find Grafana on http:// ' + socket . gethostname ( ) + ' :3000<br> ' )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
os . system ( " rm -f %s " % script )
2020-07-01 20:39:15 +00:00
2020-03-27 21:16:04 +00:00
if form . getvalue ( ' haproxy_exp_install ' ) :
2020-09-26 17:37:14 +00:00
serv = form . getvalue ( ' haproxy_exp_install ' )
2021-12-20 06:56:56 +00:00
ver = form . getvalue ( ' exporter_v ' )
ext_prom = form . getvalue ( ' ext_prom ' )
2020-09-26 17:37:14 +00:00
script = " install_haproxy_exporter.sh "
stats_port = sql . get_setting ( ' stats_port ' )
server_state_file = sql . get_setting ( ' server_state_file ' )
stats_user = sql . get_setting ( ' stats_user ' )
stats_password = sql . get_setting ( ' stats_password ' )
stat_page = sql . get_setting ( ' stats_page ' )
proxy = sql . get_setting ( ' proxy ' )
2021-08-02 08:19:22 +00:00
ssh_port = 22
2020-09-26 17:37:14 +00:00
ssh_enable , ssh_user_name , ssh_user_password , ssh_key_name = funct . return_ssh_keys_path ( serv )
if ssh_enable == 0 :
ssh_key_name = ' '
servers = sql . select_servers ( server = serv )
for server in servers :
ssh_port = str ( server [ 10 ] )
os . system ( " cp scripts/ %s . " % script )
if proxy is not None and proxy != ' ' and proxy != ' None ' :
proxy_serv = proxy
else :
proxy_serv = ' '
commands = [ " chmod +x " + script + " && ./ " + script + " PROXY= " + proxy_serv +
2021-10-17 05:57:51 +00:00
" STAT_PORT= " + str ( stats_port ) + " STAT_FILE= " + server_state_file +
2021-12-20 06:56:56 +00:00
" SSH_PORT= " + ssh_port + " STAT_PAGE= " + stat_page + " VER= " + ver + " EXP_PROM= " + ext_prom +
2021-08-15 09:02:12 +00:00
" STATS_USER= " + stats_user + " STATS_PASS= ' " + stats_password + " ' HOST= " + serv +
" USER= " + ssh_user_name + " PASS= ' " + ssh_user_password + " ' KEY= " + ssh_key_name ]
2020-09-26 17:37:14 +00:00
output , error = funct . subprocess_execute ( commands [ 0 ] )
2020-12-26 09:08:17 +00:00
funct . show_installation_output ( error , output , ' HAProxy exporter ' )
2020-09-26 17:37:14 +00:00
os . system ( " rm -f %s " % script )
2020-07-01 20:39:15 +00:00
2020-03-27 21:16:04 +00:00
if form . getvalue ( ' nginx_exp_install ' ) :
2020-09-26 17:37:14 +00:00
serv = form . getvalue ( ' nginx_exp_install ' )
2021-12-03 10:39:15 +00:00
ver = form . getvalue ( ' exporter_v ' )
2021-12-20 06:56:56 +00:00
ext_prom = form . getvalue ( ' ext_prom ' )
2020-09-26 17:37:14 +00:00
script = " install_nginx_exporter.sh "
stats_user = sql . get_setting ( ' nginx_stats_user ' )
stats_password = sql . get_setting ( ' nginx_stats_password ' )
stats_port = sql . get_setting ( ' nginx_stats_port ' )
stats_page = sql . get_setting ( ' nginx_stats_page ' )
proxy = sql . get_setting ( ' proxy ' )
2021-08-02 08:19:22 +00:00
ssh_port = 22
2020-09-26 17:37:14 +00:00
ssh_enable , ssh_user_name , ssh_user_password , ssh_key_name = funct . return_ssh_keys_path ( serv )
if ssh_enable == 0 :
ssh_key_name = ' '
servers = sql . select_servers ( server = serv )
for server in servers :
ssh_port = str ( server [ 10 ] )
os . system ( " cp scripts/ %s . " % script )
if proxy is not None and proxy != ' ' and proxy != ' None ' :
proxy_serv = proxy
else :
proxy_serv = ' '
commands = [ " chmod +x " + script + " && ./ " + script + " PROXY= " + proxy_serv +
2021-10-17 05:57:51 +00:00
" STAT_PORT= " + str ( stats_port ) + " SSH_PORT= " + ssh_port + " STAT_PAGE= " + stats_page +
2021-12-20 06:56:56 +00:00
" STATS_USER= " + stats_user + " STATS_PASS= ' " + stats_password + " ' HOST= " + serv + " VER= " + ver +
" EXP_PROM= " + ext_prom + " USER= " + ssh_user_name + " PASS= ' " + ssh_user_password + " ' KEY= " + ssh_key_name ]
2020-09-26 17:37:14 +00:00
output , error = funct . subprocess_execute ( commands [ 0 ] )
2020-12-26 09:08:17 +00:00
funct . show_installation_output ( error , output , ' Nginx exporter ' )
2020-09-26 17:37:14 +00:00
os . system ( " rm -f %s " % script )
2020-07-01 20:39:15 +00:00
2021-05-02 03:58:22 +00:00
if form . getvalue ( ' node_exp_install ' ) :
serv = form . getvalue ( ' node_exp_install ' )
2021-12-20 06:56:56 +00:00
ver = form . getvalue ( ' exporter_v ' )
ext_prom = form . getvalue ( ' ext_prom ' )
2021-05-02 03:58:22 +00:00
script = " install_node_exporter.sh "
proxy = sql . get_setting ( ' proxy ' )
2021-08-02 08:19:22 +00:00
ssh_port = 22
2021-05-02 03:58:22 +00:00
ssh_enable , ssh_user_name , ssh_user_password , ssh_key_name = funct . return_ssh_keys_path ( serv )
if ssh_enable == 0 :
ssh_key_name = ' '
servers = sql . select_servers ( server = serv )
for server in servers :
ssh_port = str ( server [ 10 ] )
os . system ( " cp scripts/ %s . " % script )
if proxy is not None and proxy != ' ' and proxy != ' None ' :
proxy_serv = proxy
else :
proxy_serv = ' '
2021-12-20 06:56:56 +00:00
commands = [ " chmod +x " + script + " && ./ " + script + " PROXY= " + proxy_serv + " SSH_PORT= " + ssh_port + " VER= " + ver +
" EXP_PROM= " + ext_prom + " HOST= " + serv + " USER= " + ssh_user_name + " PASS= ' " + ssh_user_password + " ' KEY= " + ssh_key_name ]
2021-05-02 03:58:22 +00:00
output , error = funct . subprocess_execute ( commands [ 0 ] )
funct . show_installation_output ( error , output , ' Node exporter ' )
os . system ( " rm -f %s " % script )
2020-01-11 21:16:27 +00:00
if form . getvalue ( ' backup ' ) or form . getvalue ( ' deljob ' ) or form . getvalue ( ' backupupdate ' ) :
2020-09-26 17:37:14 +00:00
serv = form . getvalue ( ' server ' )
rpath = form . getvalue ( ' rpath ' )
time = form . getvalue ( ' time ' )
2021-08-02 08:19:22 +00:00
backup_type = form . getvalue ( ' type ' )
2020-09-26 17:37:14 +00:00
rserver = form . getvalue ( ' rserver ' )
cred = form . getvalue ( ' cred ' )
deljob = form . getvalue ( ' deljob ' )
update = form . getvalue ( ' backupupdate ' )
description = form . getvalue ( ' description ' )
2021-08-02 08:19:22 +00:00
script = ' backup.sh '
ssh_port = 22
2020-09-26 17:37:14 +00:00
ssh_enable , ssh_user_name , ssh_user_password , ssh_key_name = funct . return_ssh_keys_path ( ' localhost ' , id = int ( cred ) )
if deljob :
time = ' '
rpath = ' '
2021-08-02 08:19:22 +00:00
backup_type = ' '
2020-09-26 17:37:14 +00:00
elif update :
deljob = ' '
else :
deljob = ' '
if sql . check_exists_backup ( serv ) :
print ( ' warning: Backup job for %s already exists ' % serv )
sys . exit ( )
servers = sql . select_servers ( server = serv )
for server in servers :
ssh_port = str ( server [ 10 ] )
os . system ( " cp scripts/ %s . " % script )
2021-08-02 08:19:22 +00:00
commands = [ " chmod +x " + script + " && ./ " + script + " HOST= " + rserver + " SERVER= " + serv +
" TYPE= " + backup_type + " SSH_PORT= " + ssh_port + " TIME= " + time +
2020-09-26 17:37:14 +00:00
" RPATH= " + rpath + " DELJOB= " + deljob + " USER= " + str ( ssh_user_name ) + " KEY= " + str ( ssh_key_name ) ]
output , error = funct . subprocess_execute ( commands [ 0 ] )
2021-08-02 08:19:22 +00:00
for l in output :
if " Traceback " in l or " FAILED " in l :
try :
print ( ' error: ' + l )
break
except Exception :
print ( ' error: ' + output )
break
2020-09-26 17:37:14 +00:00
else :
2021-08-02 08:19:22 +00:00
if not deljob and not update :
if sql . insert_backup_job ( serv , rserver , rpath , backup_type , time , cred , description ) :
from jinja2 import Environment , FileSystemLoader
2020-09-26 17:37:14 +00:00
2021-08-02 08:19:22 +00:00
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' new_backup.html ' )
template = template . render ( backups = sql . select_backups ( server = serv , rserver = rserver ) ,
2020-09-26 17:37:14 +00:00
sshs = sql . select_ssh ( ) )
2021-08-02 08:19:22 +00:00
print ( template )
print ( ' success: Backup job has been created ' )
funct . logging ( ' backup ' , ' a new backup job for server ' + serv + ' has been created ' , haproxywi = 1 , login = 1 )
else :
2021-08-15 09:02:12 +00:00
print ( ' error: Cannot add the job into DB ' )
2021-08-02 08:19:22 +00:00
elif deljob :
sql . delete_backups ( deljob )
print ( ' Ok ' )
funct . logging ( ' backup ' , ' a backup job for server ' + serv + ' has been deleted ' , haproxywi = 1 , login = 1 )
elif update :
sql . update_backup ( serv , rserver , rpath , backup_type , time , cred , description , update )
print ( ' Ok ' )
funct . logging ( ' backup ' , ' a backup job for server ' + serv + ' has been updated ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-02-05 08:15:57 +00:00
if form . getvalue ( ' install_nginx ' ) :
2021-10-04 07:40:59 +00:00
funct . install_nginx ( form . getvalue ( ' install_nginx ' ) , docker = form . getvalue ( ' docker ' ) )
2020-07-01 20:39:15 +00:00
2018-04-30 06:04:21 +00:00
if form . getvalue ( ' haproxyaddserv ' ) :
2020-09-26 17:37:14 +00:00
funct . install_haproxy ( form . getvalue ( ' haproxyaddserv ' ) , syn_flood = form . getvalue ( ' syn_flood ' ) ,
2021-10-04 07:40:59 +00:00
hapver = form . getvalue ( ' hapver ' ) , docker = form . getvalue ( ' docker ' ) )
2020-07-01 20:39:15 +00:00
2018-08-20 06:39:52 +00:00
if form . getvalue ( ' installwaf ' ) :
2020-09-26 17:37:14 +00:00
funct . waf_install ( form . getvalue ( ' installwaf ' ) )
2020-07-01 20:39:15 +00:00
2019-09-14 08:13:45 +00:00
if form . getvalue ( ' update_haproxy_wi ' ) :
2020-09-26 17:37:14 +00:00
service = form . getvalue ( ' service ' )
2021-07-23 06:09:44 +00:00
services = [ ' roxy-wi-checker ' ,
' roxy-wi ' ,
' roxy-wi-keep_alive ' ,
' roxy-wi-smon ' ,
' roxy-wi-metrics ' ,
' roxy-wi-portscanner ' ]
2020-09-26 17:37:14 +00:00
if service not in services :
2021-06-02 07:28:07 +00:00
print ( ' error: ' + service + ' is not part of Roxy-WI ' )
2020-09-26 17:37:14 +00:00
sys . exit ( )
funct . update_haproxy_wi ( service )
2020-07-01 20:39:15 +00:00
2018-08-20 06:39:52 +00:00
if form . getvalue ( ' metrics_waf ' ) :
2020-09-26 17:37:14 +00:00
sql . update_waf_metrics_enable ( form . getvalue ( ' metrics_waf ' ) , form . getvalue ( ' enable ' ) )
2020-07-01 20:39:15 +00:00
2018-08-06 16:18:12 +00:00
if form . getvalue ( ' table_metrics ' ) :
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' table_metrics.html ' )
2018-08-06 16:18:12 +00:00
2020-10-02 12:39:00 +00:00
template = template . render ( table_stat = sql . select_table_metrics ( ) )
2020-09-26 17:37:14 +00:00
print ( template )
2020-07-01 20:39:15 +00:00
if form . getvalue ( ' metrics_hapwi_ram ' ) :
2020-09-26 17:37:14 +00:00
ip = form . getvalue ( ' ip ' )
metrics = { ' chartData ' : { } }
rams = ' '
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
if ip == ' 1 ' :
2021-03-01 15:03:51 +00:00
cmd = " free -m |grep Mem |awk ' { print $2,$3,$4,$5,$6,$7} ' "
2020-09-26 17:37:14 +00:00
metric , error = funct . subprocess_execute ( cmd )
else :
2021-03-01 15:03:51 +00:00
commands = [ " free -m |grep Mem |awk ' { print $2,$3,$4,$5,$6,$7} ' " ]
2020-09-26 17:37:14 +00:00
metric , error = funct . subprocess_execute ( commands [ 0 ] )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
for i in metric :
rams = i
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
metrics [ ' chartData ' ] [ ' rams ' ] = rams
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
import json
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
print ( json . dumps ( metrics ) )
2020-07-01 20:39:15 +00:00
2020-05-10 06:17:07 +00:00
if form . getvalue ( ' metrics_hapwi_cpu ' ) :
2020-09-26 17:37:14 +00:00
ip = form . getvalue ( ' ip ' )
metrics = { ' chartData ' : { } }
cpus = ' '
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
if ip == ' 1 ' :
cmd = " top -b -n 1 |grep Cpu |awk -F ' : ' ' { print $2} ' |awk -F ' ' ' BEGIN { ORS= \" \" ;} { for (i=1;i<=NF;i+=2) print $i} ' "
metric , error = funct . subprocess_execute ( cmd )
else :
commands = [
" top -b -n 1 |grep Cpu |awk -F ' : ' ' { print $2} ' |awk -F ' ' ' BEGIN { ORS= \" \" ;} { for (i=1;i<=NF;i+=2) print $i} ' " ]
metric , error = funct . subprocess_execute ( commands [ 0 ] )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
for i in metric :
cpus = i
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
metrics [ ' chartData ' ] [ ' cpus ' ] = cpus
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
import json
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
print ( json . dumps ( metrics ) )
2020-07-01 20:39:15 +00:00
2019-10-05 20:41:07 +00:00
if form . getvalue ( ' new_metrics ' ) :
2020-09-26 17:37:14 +00:00
serv = form . getvalue ( ' server ' )
2022-04-29 10:28:48 +00:00
hostname = sql . get_hostname_by_server_ip ( serv )
2020-11-02 17:01:08 +00:00
time_range = form . getvalue ( ' time_range ' )
metric = sql . select_metrics ( serv , time_range = time_range )
2020-09-26 17:37:14 +00:00
metrics = { ' chartData ' : { } }
metrics [ ' chartData ' ] [ ' labels ' ] = { }
labels = ' '
curr_con = ' '
curr_ssl_con = ' '
sess_rate = ' '
2020-11-02 17:01:08 +00:00
server = ' '
2020-09-26 17:37:14 +00:00
for i in metric :
label = str ( i [ 5 ] )
label = label . split ( ' ' ) [ 1 ]
labels + = label + ' , '
curr_con + = str ( i [ 1 ] ) + ' , '
curr_ssl_con + = str ( i [ 2 ] ) + ' , '
sess_rate + = str ( i [ 3 ] ) + ' , '
server = str ( i [ 0 ] )
metrics [ ' chartData ' ] [ ' labels ' ] = labels
metrics [ ' chartData ' ] [ ' curr_con ' ] = curr_con
metrics [ ' chartData ' ] [ ' curr_ssl_con ' ] = curr_ssl_con
metrics [ ' chartData ' ] [ ' sess_rate ' ] = sess_rate
2022-04-29 10:28:48 +00:00
metrics [ ' chartData ' ] [ ' server ' ] = hostname + ' ( ' + server + ' ) '
2020-09-26 17:37:14 +00:00
import json
print ( json . dumps ( metrics ) )
2020-07-01 20:39:15 +00:00
2021-04-17 17:38:08 +00:00
if form . getvalue ( ' new_http_metrics ' ) :
serv = form . getvalue ( ' server ' )
2022-04-29 10:28:48 +00:00
hostname = sql . get_hostname_by_server_ip ( serv )
2021-04-17 17:38:08 +00:00
time_range = form . getvalue ( ' time_range ' )
metric = sql . select_metrics_http ( serv , time_range = time_range )
metrics = { ' chartData ' : { } }
metrics [ ' chartData ' ] [ ' labels ' ] = { }
labels = ' '
http_2xx = ' '
http_3xx = ' '
http_4xx = ' '
http_5xx = ' '
server = ' '
for i in metric :
label = str ( i [ 5 ] )
label = label . split ( ' ' ) [ 1 ]
labels + = label + ' , '
http_2xx + = str ( i [ 1 ] ) + ' , '
http_3xx + = str ( i [ 2 ] ) + ' , '
http_4xx + = str ( i [ 3 ] ) + ' , '
http_5xx + = str ( i [ 4 ] ) + ' , '
server = str ( i [ 0 ] )
metrics [ ' chartData ' ] [ ' labels ' ] = labels
metrics [ ' chartData ' ] [ ' http_2xx ' ] = http_2xx
metrics [ ' chartData ' ] [ ' http_3xx ' ] = http_3xx
metrics [ ' chartData ' ] [ ' http_4xx ' ] = http_4xx
metrics [ ' chartData ' ] [ ' http_5xx ' ] = http_5xx
2022-04-29 10:28:48 +00:00
metrics [ ' chartData ' ] [ ' server ' ] = hostname + ' ( ' + server + ' ) '
2021-04-17 17:38:08 +00:00
import json
print ( json . dumps ( metrics ) )
2020-07-01 20:39:15 +00:00
if form . getvalue ( ' new_waf_metrics ' ) :
2020-09-26 17:37:14 +00:00
serv = form . getvalue ( ' server ' )
2022-04-29 10:28:48 +00:00
hostname = sql . get_hostname_by_server_ip ( serv )
2020-11-02 17:01:08 +00:00
time_range = form . getvalue ( ' time_range ' )
metric = sql . select_waf_metrics ( serv , time_range = time_range )
2020-09-26 17:37:14 +00:00
metrics = { ' chartData ' : { } }
metrics [ ' chartData ' ] [ ' labels ' ] = { }
labels = ' '
curr_con = ' '
2018-08-20 06:39:52 +00:00
2020-09-26 17:37:14 +00:00
for i in metric :
label = str ( i [ 2 ] )
label = label . split ( ' ' ) [ 1 ]
labels + = label + ' , '
curr_con + = str ( i [ 1 ] ) + ' , '
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
metrics [ ' chartData ' ] [ ' labels ' ] = labels
metrics [ ' chartData ' ] [ ' curr_con ' ] = curr_con
2022-04-29 10:28:48 +00:00
metrics [ ' chartData ' ] [ ' server ' ] = hostname + ' ( ' + serv + ' ) '
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
import json
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
print ( json . dumps ( metrics ) )
2020-07-01 20:39:15 +00:00
2021-08-15 09:02:12 +00:00
if form . getvalue ( ' new_nginx_metrics ' ) :
serv = form . getvalue ( ' server ' )
2022-04-29 10:28:48 +00:00
hostname = sql . get_hostname_by_server_ip ( serv )
2021-08-15 09:02:12 +00:00
time_range = form . getvalue ( ' time_range ' )
metric = sql . select_nginx_metrics ( serv , time_range = time_range )
metrics = { ' chartData ' : { } }
metrics [ ' chartData ' ] [ ' labels ' ] = { }
labels = ' '
curr_con = ' '
for i in metric :
label = str ( i [ 2 ] )
label = label . split ( ' ' ) [ 1 ]
labels + = label + ' , '
curr_con + = str ( i [ 1 ] ) + ' , '
metrics [ ' chartData ' ] [ ' labels ' ] = labels
metrics [ ' chartData ' ] [ ' curr_con ' ] = curr_con
2022-04-29 10:28:48 +00:00
metrics [ ' chartData ' ] [ ' server ' ] = hostname + ' ( ' + serv + ' ) '
2021-08-15 09:02:12 +00:00
import json
print ( json . dumps ( metrics ) )
2018-08-08 12:06:23 +00:00
if form . getvalue ( ' get_hap_v ' ) :
2020-09-26 17:37:14 +00:00
output = funct . check_haproxy_version ( serv )
print ( output )
2020-07-01 20:39:15 +00:00
2020-02-05 08:15:57 +00:00
if form . getvalue ( ' get_nginx_v ' ) :
2022-01-18 11:59:04 +00:00
server_id = sql . select_server_id_by_ip ( serv )
is_dockerized = sql . select_service_setting ( server_id , ' nginx ' , ' dockerized ' )
if is_dockerized == ' 1 ' :
container_name = sql . get_setting ( ' nginx_container_name ' )
cmd = [ " docker exec -it " + container_name + " /usr/sbin/nginx -v 2>&1|awk ' { print $3} ' " ]
else :
2022-02-16 14:13:16 +00:00
cmd = [ ' sudo /usr/sbin/nginx -v ' ]
2022-01-18 11:59:04 +00:00
print ( funct . ssh_command ( serv , cmd ) )
if form . getvalue ( ' get_keepalived_v ' ) :
2022-02-16 14:13:16 +00:00
cmd = [ " sudo /usr/sbin/keepalived -v 2>&1|head -1|awk ' { print $2} ' " ]
2020-09-26 17:37:14 +00:00
print ( funct . ssh_command ( serv , cmd ) )
2020-03-27 21:16:04 +00:00
if form . getvalue ( ' get_exporter_v ' ) :
2021-12-20 06:56:56 +00:00
print ( funct . get_service_version ( serv , form . getvalue ( ' get_exporter_v ' ) ) )
2020-07-01 20:39:15 +00:00
2018-08-09 12:11:10 +00:00
if form . getvalue ( ' bwlists ' ) :
2020-11-02 17:01:08 +00:00
list_path = os . path . dirname ( os . getcwd ( ) ) + " / " + sql . get_setting ( ' lists_path ' ) + " / " + form . getvalue ( ' group ' ) + " / " + form . getvalue ( ' color ' ) + " / " + form . getvalue ( ' bwlists ' )
2020-09-26 17:37:14 +00:00
try :
2020-11-02 17:01:08 +00:00
file = open ( list_path , " r " )
2020-09-26 17:37:14 +00:00
file_read = file . read ( )
2020-11-02 17:01:08 +00:00
file . close ( )
2020-09-26 17:37:14 +00:00
print ( file_read )
except IOError :
print ( ' error: Cat \' n read ' + form . getvalue ( ' color ' ) + ' list , ' )
2020-07-01 20:39:15 +00:00
2018-08-09 12:11:10 +00:00
if form . getvalue ( ' bwlists_create ' ) :
2020-09-26 17:37:14 +00:00
color = form . getvalue ( ' color ' )
list_name = form . getvalue ( ' bwlists_create ' ) . split ( ' . ' ) [ 0 ]
list_name + = ' .lst '
2020-11-02 17:01:08 +00:00
list_path = os . path . dirname ( os . getcwd ( ) ) + " / " + sql . get_setting ( ' lists_path ' ) + " / " + form . getvalue ( ' group ' ) + " / " + color + " / " + list_name
2020-09-26 17:37:14 +00:00
try :
2020-11-02 17:01:08 +00:00
open ( list_path , ' a ' ) . close ( )
print ( ' success: ' )
2020-09-26 17:37:14 +00:00
try :
2021-08-15 09:02:12 +00:00
funct . logging ( serv , ' has been created ' + color + ' list ' + list_name , haproxywi = 1 , login = 1 )
2020-11-02 17:01:08 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
pass
except IOError as e :
2020-11-02 17:01:08 +00:00
print ( ' error: Cannot create new ' + color + ' list. %s , ' % e )
2020-07-01 20:39:15 +00:00
2018-08-09 12:11:10 +00:00
if form . getvalue ( ' bwlists_save ' ) :
2020-09-26 17:37:14 +00:00
color = form . getvalue ( ' color ' )
bwlists_save = form . getvalue ( ' bwlists_save ' )
2020-11-02 17:01:08 +00:00
list_path = os . path . dirname ( os . getcwd ( ) ) + " / " + sql . get_setting ( ' lists_path ' ) + " / " + form . getvalue ( ' group ' ) + " / " + color + " / " + bwlists_save
2020-09-26 17:37:14 +00:00
try :
2020-11-02 17:01:08 +00:00
with open ( list_path , " w " ) as file :
2020-09-26 17:37:14 +00:00
file . write ( form . getvalue ( ' bwlists_content ' ) )
except IOError as e :
2020-11-02 17:01:08 +00:00
print ( ' error: Cannot save ' + color + ' list. %s , ' % e )
2020-09-26 17:37:14 +00:00
path = sql . get_setting ( ' haproxy_dir ' ) + " / " + color
servers = [ ]
if serv != ' all ' :
servers . append ( serv )
MASTERS = sql . is_master ( serv )
for master in MASTERS :
2020-10-24 04:11:56 +00:00
if master [ 0 ] is not None :
2020-09-26 17:37:14 +00:00
servers . append ( master [ 0 ] )
else :
server = sql . get_dick_permit ( )
for s in server :
servers . append ( s [ 2 ] )
for serv in servers :
funct . ssh_command ( serv , [ " sudo mkdir " + path ] )
funct . ssh_command ( serv , [ " sudo chown $(whoami) " + path ] )
2020-11-02 17:01:08 +00:00
error = funct . upload ( serv , path + " / " + bwlists_save , list_path , dir = ' fullpath ' )
2020-09-26 17:37:14 +00:00
if error :
print ( ' error: Upload fail: %s , ' % error )
else :
print ( ' success: Edited ' + color + ' list was uploaded to ' + serv + ' , ' )
try :
2021-08-15 09:02:12 +00:00
funct . logging ( serv , ' has been edited the ' + color + ' list ' + bwlists_save , haproxywi = 1 , login = 1 )
2020-11-02 17:01:08 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
pass
2021-11-05 07:03:51 +00:00
server_id = sql . select_server_id_by_ip ( server_ip = serv )
2021-09-15 05:40:51 +00:00
haproxy_enterprise = sql . select_service_setting ( server_id , ' haproxy ' , ' haproxy_enterprise ' )
2020-09-26 17:37:14 +00:00
if haproxy_enterprise == ' 1 ' :
haproxy_service_name = " hapee-2.0-lb "
else :
haproxy_service_name = " haproxy "
if form . getvalue ( ' bwlists_restart ' ) == ' restart ' :
funct . ssh_command ( serv , [ " sudo systemctl restart " + haproxy_service_name ] )
elif form . getvalue ( ' bwlists_restart ' ) == ' reload ' :
funct . ssh_command ( serv , [ " sudo systemctl reload " + haproxy_service_name ] )
2020-07-01 20:39:15 +00:00
2020-12-04 03:51:31 +00:00
if form . getvalue ( ' bwlists_delete ' ) :
color = form . getvalue ( ' color ' )
bwlists_delete = form . getvalue ( ' bwlists_delete ' )
list_path = os . path . dirname ( os . getcwd ( ) ) + " / " + sql . get_setting ( ' lists_path ' ) + " / " + form . getvalue ( ' group ' ) + " / " + color + " / " + bwlists_delete
try :
os . remove ( list_path )
except IOError as e :
print ( ' error: Cannot delete ' + color + ' list. %s , ' % e )
path = sql . get_setting ( ' haproxy_dir ' ) + " / " + color
servers = [ ]
if serv != ' all ' :
servers . append ( serv )
MASTERS = sql . is_master ( serv )
for master in MASTERS :
if master [ 0 ] is not None :
servers . append ( master [ 0 ] )
else :
server = sql . get_dick_permit ( )
for s in server :
servers . append ( s [ 2 ] )
for serv in servers :
error = funct . ssh_command ( serv , [ " sudo rm " + path + " / " + bwlists_delete ] , return_err = 1 )
if error :
print ( ' error: Deleting fail: %s , ' % error )
else :
2021-08-15 09:02:12 +00:00
print ( ' success: the ' + color + ' list has been deleted on ' + serv + ' , ' )
2020-12-04 03:51:31 +00:00
try :
2021-08-15 09:02:12 +00:00
funct . logging ( serv , ' has been deleted the ' + color + ' list ' + bwlists_delete , haproxywi = 1 , login = 1 )
2020-12-04 03:51:31 +00:00
except Exception :
pass
2018-08-09 12:11:10 +00:00
if form . getvalue ( ' get_lists ' ) :
2020-11-02 17:01:08 +00:00
list_path = os . path . dirname ( os . getcwd ( ) ) + " / " + sql . get_setting ( ' lists_path ' ) + " / " + form . getvalue ( ' group ' ) + " / " + form . getvalue ( ' color ' )
lists = funct . get_files ( dir = list_path , format = " lst " )
for l in lists :
print ( l )
2020-07-01 20:39:15 +00:00
2018-11-08 08:49:03 +00:00
if form . getvalue ( ' get_ldap_email ' ) :
2020-09-26 17:37:14 +00:00
username = form . getvalue ( ' get_ldap_email ' )
import ldap
server = sql . get_setting ( ' ldap_server ' )
port = sql . get_setting ( ' ldap_port ' )
user = sql . get_setting ( ' ldap_user ' )
password = sql . get_setting ( ' ldap_password ' )
ldap_base = sql . get_setting ( ' ldap_base ' )
domain = sql . get_setting ( ' ldap_domain ' )
ldap_search_field = sql . get_setting ( ' ldap_search_field ' )
ldap_class_search = sql . get_setting ( ' ldap_class_search ' )
ldap_user_attribute = sql . get_setting ( ' ldap_user_attribute ' )
2021-02-03 19:25:37 +00:00
ldap_type = sql . get_setting ( ' ldap_type ' )
ldap_proto = ' ldap ' if ldap_type == " 0 " else ' ldaps '
l = ldap . initialize ( ' {} :// {} : {} / ' . format ( ldap_proto , server , port ) )
2020-09-26 17:37:14 +00:00
try :
l . protocol_version = ldap . VERSION3
l . set_option ( ldap . OPT_REFERRALS , 0 )
bind = l . simple_bind_s ( user , password )
criteria = " (&(objectClass= " + ldap_class_search + " )( " + ldap_user_attribute + " = " + username + " )) "
attributes = [ ldap_search_field ]
result = l . search_s ( ldap_base , ldap . SCOPE_SUBTREE , criteria , attributes )
results = [ entry for dn , entry in result if isinstance ( entry , dict ) ]
try :
print ( ' [ " ' + results [ 0 ] [ ldap_search_field ] [ 0 ] . decode ( " utf-8 " ) + ' " , " ' + domain + ' " ] ' )
2020-11-02 17:01:08 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
print ( ' error: user not found ' )
finally :
l . unbind ( )
2019-09-10 05:44:02 +00:00
if form . getvalue ( ' change_waf_mode ' ) :
2020-09-26 17:37:14 +00:00
waf_mode = form . getvalue ( ' change_waf_mode ' )
server_hostname = form . getvalue ( ' server_hostname ' )
haproxy_dir = sql . get_setting ( ' haproxy_dir ' )
serv = sql . select_server_by_name ( server_hostname )
commands = [ " sudo sed -i ' s/^SecRuleEngine.*/SecRuleEngine %s / ' %s /waf/modsecurity.conf " % ( waf_mode , haproxy_dir ) ]
funct . ssh_command ( serv , commands )
2021-08-15 09:02:12 +00:00
funct . logging ( serv , ' Has been changed WAF mod to ' + waf_mode , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-07-26 16:26:04 +00:00
error_mess = ' error: All fields must be completed '
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' newuser ' ) is not None :
2020-09-26 17:37:14 +00:00
email = form . getvalue ( ' newemail ' )
password = form . getvalue ( ' newpassword ' )
role = form . getvalue ( ' newrole ' )
new_user = form . getvalue ( ' newusername ' )
page = form . getvalue ( ' page ' )
activeuser = form . getvalue ( ' activeuser ' )
group = form . getvalue ( ' newgroupuser ' )
role_id = sql . get_role_id_by_name ( role )
2021-08-02 08:19:22 +00:00
2020-09-26 17:37:14 +00:00
if funct . check_user_group ( ) :
if funct . is_admin ( level = role_id ) :
2021-01-02 16:36:43 +00:00
if sql . add_user ( new_user , email , password , role , activeuser , group ) :
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True )
template = env . get_template ( ' ajax/new_user.html ' )
template = template . render ( users = sql . select_users ( user = new_user ) ,
groups = sql . select_groups ( ) ,
page = page ,
roles = sql . select_roles ( ) ,
adding = 1 )
print ( template )
2021-08-15 09:02:12 +00:00
funct . logging ( ' a new user ' + new_user , ' has been created ' , haproxywi = 1 , login = 1 )
2020-09-26 17:37:14 +00:00
else :
2021-08-02 08:19:22 +00:00
print ( ' error: dalsdm ' )
2020-09-26 17:37:14 +00:00
funct . logging ( new_user , ' tried to privilege escalation ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' userdel ' ) is not None :
2020-09-26 17:37:14 +00:00
userdel = form . getvalue ( ' userdel ' )
user = sql . select_users ( id = userdel )
2020-11-02 17:01:08 +00:00
username = ' '
2020-09-26 17:37:14 +00:00
for u in user :
2021-08-02 08:19:22 +00:00
username = u . username
2020-09-26 17:37:14 +00:00
if sql . delete_user ( userdel ) :
sql . delete_user_groups ( userdel )
2021-08-15 09:02:12 +00:00
funct . logging ( username , ' has been deleted user ' , haproxywi = 1 , login = 1 )
2020-09-26 17:37:14 +00:00
print ( " Ok " )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' updateuser ' ) is not None :
2020-09-26 17:37:14 +00:00
email = form . getvalue ( ' email ' )
role = form . getvalue ( ' role ' )
new_user = form . getvalue ( ' updateuser ' )
2021-08-02 08:19:22 +00:00
user_id = form . getvalue ( ' id ' )
2020-09-26 17:37:14 +00:00
activeuser = form . getvalue ( ' activeuser ' )
group = form . getvalue ( ' usergroup ' )
role_id = sql . get_role_id_by_name ( role )
if funct . check_user_group ( ) :
if funct . is_admin ( level = role_id ) :
2021-08-02 08:19:22 +00:00
sql . update_user ( new_user , email , role , user_id , activeuser )
2021-08-15 09:02:12 +00:00
funct . logging ( new_user , ' has been updated user ' , haproxywi = 1 , login = 1 )
2020-09-26 17:37:14 +00:00
else :
funct . logging ( new_user , ' tried to privilege escalation ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' updatepassowrd ' ) is not None :
2020-09-26 17:37:14 +00:00
password = form . getvalue ( ' updatepassowrd ' )
2022-02-16 07:46:30 +00:00
if form . getvalue ( ' uuid ' ) :
user_id = sql . get_user_id_by_uuid ( form . getvalue ( ' uuid ' ) )
else :
user_id = form . getvalue ( ' id ' )
2020-11-02 17:01:08 +00:00
user = sql . select_users ( id = user_id )
2020-09-26 17:37:14 +00:00
for u in user :
2021-08-02 08:19:22 +00:00
username = u . username
2020-11-02 17:01:08 +00:00
sql . update_user_password ( password , user_id )
2020-09-26 17:37:14 +00:00
funct . logging ( ' user ' + username , ' has changed password ' , haproxywi = 1 , login = 1 )
print ( " Ok " )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' newserver ' ) is not None :
2020-09-26 17:37:14 +00:00
hostname = form . getvalue ( ' servername ' )
ip = form . getvalue ( ' newip ' )
2021-09-15 05:40:51 +00:00
ip = funct . is_ip_or_dns ( ip )
2020-09-26 17:37:14 +00:00
group = form . getvalue ( ' newservergroup ' )
2021-07-01 07:19:23 +00:00
scan_server = form . getvalue ( ' scan_server ' )
2020-09-26 17:37:14 +00:00
typeip = form . getvalue ( ' typeip ' )
haproxy = form . getvalue ( ' haproxy ' )
nginx = form . getvalue ( ' nginx ' )
2022-04-15 09:49:00 +00:00
apache = form . getvalue ( ' apache ' )
2020-11-18 04:45:34 +00:00
firewall = form . getvalue ( ' firewall ' )
2020-09-26 17:37:14 +00:00
enable = form . getvalue ( ' enable ' )
master = form . getvalue ( ' slave ' )
cred = form . getvalue ( ' cred ' )
page = form . getvalue ( ' page ' )
page = page . split ( " # " ) [ 0 ]
port = form . getvalue ( ' newport ' )
desc = form . getvalue ( ' desc ' )
2021-09-15 05:40:51 +00:00
if ip == ' ' :
print ( ' error: IP or DNS name is not valid ' )
sys . exit ( )
2022-04-15 09:49:00 +00:00
if sql . add_server ( hostname , ip , group , typeip , enable , master , cred , port , desc , haproxy , nginx , apache , firewall ) :
2021-06-02 07:28:07 +00:00
2021-07-01 07:19:23 +00:00
try :
if scan_server == ' 1 ' :
nginx_config_path = sql . get_setting ( ' nginx_config_path ' )
haproxy_config_path = sql . get_setting ( ' haproxy_config_path ' )
haproxy_dir = sql . get_setting ( ' haproxy_dir ' )
2022-04-15 09:49:00 +00:00
apache_config_path = sql . get_setting ( ' apache_config_path ' )
2021-07-01 07:19:23 +00:00
keepalived_config_path = ' /etc/keepalived/keepalived.conf '
if funct . is_file_exists ( ip , nginx_config_path ) :
sql . update_nginx ( ip )
if funct . is_file_exists ( ip , haproxy_config_path ) :
sql . update_haproxy ( ip )
if funct . is_file_exists ( ip , keepalived_config_path ) :
sql . update_keepalived ( ip )
2022-04-15 09:49:00 +00:00
if funct . is_file_exists ( ip , apache_config_path ) :
sql . update_apache ( ip )
2021-07-01 07:19:23 +00:00
if funct . is_file_exists ( ip , haproxy_dir + ' /waf/bin/modsecurity ' ) :
sql . insert_waf_metrics_enable ( ip , " 0 " )
2021-08-02 08:19:22 +00:00
sql . insert_waf_rules ( ip )
2021-07-01 07:19:23 +00:00
if funct . is_service_active ( ip , ' firewalld ' ) :
sql . update_firewall ( ip )
except :
pass
2021-12-03 10:39:15 +00:00
try :
funct . get_system_info ( ip )
except Exception as e :
funct . logging ( ' Cannot get information from ' + hostname , str ( e ) , haproxywi = 1 , login = 1 )
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True )
template = env . get_template ( ' ajax/new_server.html ' )
template = template . render ( groups = sql . select_groups ( ) ,
servers = sql . select_servers ( server = ip ) ,
masters = sql . select_servers ( get_master_servers = 1 ) ,
sshs = sql . select_ssh ( group = group ) ,
page = page ,
adding = 1 )
print ( template )
2021-10-26 18:07:56 +00:00
funct . logging ( ip , ' A new server ' + hostname + ' has been created ' , haproxywi = 1 , login = 1 ,
keep_history = 1 , service = ' server ' )
2020-07-01 20:39:15 +00:00
2020-02-05 08:15:57 +00:00
if form . getvalue ( ' updatehapwiserver ' ) is not None :
2020-11-16 12:31:52 +00:00
hapwi_id = form . getvalue ( ' updatehapwiserver ' )
2020-09-26 17:37:14 +00:00
active = form . getvalue ( ' active ' )
name = form . getvalue ( ' name ' )
alert = form . getvalue ( ' alert_en ' )
metrics = form . getvalue ( ' metrics ' )
2021-10-18 14:13:18 +00:00
service = form . getvalue ( ' service_name ' )
sql . update_hapwi_server ( hapwi_id , alert , metrics , active , service )
server_ip = sql . select_server_ip_by_id ( hapwi_id )
2021-11-02 20:57:54 +00:00
funct . logging ( server_ip , ' The server ' + name + ' has been updated ' , haproxywi = 1 , login = 1 , keep_history = 1 , service = service )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' updateserver ' ) is not None :
2020-09-26 17:37:14 +00:00
name = form . getvalue ( ' updateserver ' )
group = form . getvalue ( ' servergroup ' )
typeip = form . getvalue ( ' typeip ' )
haproxy = form . getvalue ( ' haproxy ' )
nginx = form . getvalue ( ' nginx ' )
2022-04-15 09:49:00 +00:00
apache = form . getvalue ( ' apache ' )
2020-11-18 04:45:34 +00:00
firewall = form . getvalue ( ' firewall ' )
2020-09-26 17:37:14 +00:00
enable = form . getvalue ( ' enable ' )
master = form . getvalue ( ' slave ' )
2020-11-16 12:31:52 +00:00
serv_id = form . getvalue ( ' id ' )
2020-09-26 17:37:14 +00:00
cred = form . getvalue ( ' cred ' )
port = form . getvalue ( ' port ' )
2021-05-16 05:27:47 +00:00
protected = form . getvalue ( ' protected ' )
2020-09-26 17:37:14 +00:00
desc = form . getvalue ( ' desc ' )
if name is None or port is None :
print ( error_mess )
else :
2022-04-15 09:49:00 +00:00
sql . update_server ( name , group , typeip , enable , master , serv_id , cred , port , desc , haproxy , nginx , apache , firewall , protected )
2021-01-22 04:01:08 +00:00
funct . logging ( ' the server ' + name , ' has been updated ' , haproxywi = 1 , login = 1 )
2021-10-26 18:07:56 +00:00
server_ip = sql . select_server_ip_by_id ( serv_id )
funct . logging ( server_ip , ' The server ' + name + ' has been update ' , haproxywi = 1 , login = 1 ,
keep_history = 1 , service = ' server ' )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' serverdel ' ) is not None :
2021-09-15 05:40:51 +00:00
server_id = form . getvalue ( ' serverdel ' )
server = sql . select_servers ( id = server_id )
2021-11-05 07:03:51 +00:00
server_ip = ' '
2020-09-26 17:37:14 +00:00
for s in server :
hostname = s [ 1 ]
2021-11-05 07:03:51 +00:00
server_ip = s [ 2 ]
if sql . check_exists_backup ( server_ip ) :
2020-09-26 17:37:14 +00:00
print ( ' warning: Delete the backup first ' )
sys . exit ( )
2021-09-15 05:40:51 +00:00
if sql . delete_server ( server_id ) :
sql . delete_waf_server ( server_id )
sql . delete_port_scanner_settings ( server_id )
2021-11-05 07:03:51 +00:00
sql . delete_waf_rules ( server_ip )
2021-09-15 05:40:51 +00:00
sql . delete_action_history ( server_id )
2021-12-03 10:39:15 +00:00
sql . delete_system_info ( server_id )
2022-01-19 07:16:03 +00:00
sql . delete_service_settings ( server_id )
2020-09-26 17:37:14 +00:00
print ( " Ok " )
2021-12-03 10:39:15 +00:00
funct . logging ( server_ip , ' The server ' + hostname + ' has been deleted ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' newgroup ' ) is not None :
2020-09-26 17:37:14 +00:00
newgroup = form . getvalue ( ' groupname ' )
desc = form . getvalue ( ' newdesc ' )
if newgroup is None :
print ( error_mess )
else :
if sql . add_group ( newgroup , desc ) :
from jinja2 import Environment , FileSystemLoader
2020-01-18 23:50:43 +00:00
2020-09-26 17:37:14 +00:00
env = Environment ( loader = FileSystemLoader ( ' templates/ajax/ ' ) , autoescape = True )
template = env . get_template ( ' /new_group.html ' )
2020-01-18 23:50:43 +00:00
2020-09-26 17:37:14 +00:00
output_from_parsed_template = template . render ( groups = sql . select_groups ( group = newgroup ) )
print ( output_from_parsed_template )
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' A new group ' + newgroup + ' has been created ' , haproxywi = 1 , login = 1 )
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' groupdel ' ) is not None :
2020-09-26 17:37:14 +00:00
groupdel = form . getvalue ( ' groupdel ' )
group = sql . select_groups ( id = groupdel )
for g in group :
2021-08-02 08:19:22 +00:00
groupname = g . name
2020-09-26 17:37:14 +00:00
if sql . delete_group ( groupdel ) :
print ( " Ok " )
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' The ' + groupname + ' has been deleted ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' updategroup ' ) is not None :
2020-09-26 17:37:14 +00:00
name = form . getvalue ( ' updategroup ' )
descript = form . getvalue ( ' descript ' )
2020-11-16 12:31:52 +00:00
group_id = form . getvalue ( ' id ' )
2020-09-26 17:37:14 +00:00
if name is None :
print ( error_mess )
else :
2021-09-02 08:07:24 +00:00
try :
sql . update_group ( name , descript , group_id )
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' The ' + name + ' has been updated ' , haproxywi = 1 , login = 1 )
2021-09-02 08:07:24 +00:00
except Exception as e :
print ( ' error: ' + str ( e ) )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' new_ssh ' ) :
2020-09-26 17:37:14 +00:00
user_group = funct . get_user_group ( )
name = form . getvalue ( ' new_ssh ' )
name = name + ' _ ' + user_group
enable = form . getvalue ( ' ssh_enable ' )
group = form . getvalue ( ' new_group ' )
username = form . getvalue ( ' ssh_user ' )
password = form . getvalue ( ' ssh_pass ' )
page = form . getvalue ( ' page ' )
page = page . split ( " # " ) [ 0 ]
if username is None or name is None :
print ( error_mess )
else :
if sql . insert_new_ssh ( name , enable , group , username , password ) :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' /new_ssh.html ' )
output_from_parsed_template = template . render ( groups = sql . select_groups ( ) , sshs = sql . select_ssh ( name = name ) ,
page = page )
print ( output_from_parsed_template )
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' A new SSH credentials ' + name + ' has created ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' sshdel ' ) is not None :
2020-09-26 17:37:14 +00:00
fullpath = funct . get_config_var ( ' main ' , ' fullpath ' )
sshdel = form . getvalue ( ' sshdel ' )
for sshs in sql . select_ssh ( id = sshdel ) :
2021-08-02 08:19:22 +00:00
ssh_enable = sshs . enable
name = sshs . name
ssh_key_name = fullpath + ' /keys/ %s .pem ' % sshs . name
2020-09-26 17:37:14 +00:00
if ssh_enable == 1 :
cmd = ' rm -f %s ' % ssh_key_name
try :
funct . subprocess_execute ( cmd )
2020-11-02 17:01:08 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
pass
if sql . delete_ssh ( sshdel ) :
print ( " Ok " )
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' The SSH credentials ' + name + ' has deleted ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' updatessh ' ) :
2020-11-16 12:31:52 +00:00
ssh_id = form . getvalue ( ' id ' )
2020-09-26 17:37:14 +00:00
name = form . getvalue ( ' name ' )
enable = form . getvalue ( ' ssh_enable ' )
group = form . getvalue ( ' group ' )
username = form . getvalue ( ' ssh_user ' )
password = form . getvalue ( ' ssh_pass ' )
if username is None :
print ( error_mess )
else :
fullpath = funct . get_config_var ( ' main ' , ' fullpath ' )
2020-11-16 12:31:52 +00:00
for sshs in sql . select_ssh ( id = ssh_id ) :
2021-08-02 08:19:22 +00:00
ssh_enable = sshs . enable
ssh_key_name = fullpath + ' /keys/ %s .pem ' % sshs . name
2020-09-26 17:37:14 +00:00
new_ssh_key_name = fullpath + ' /keys/ %s .pem ' % name
if ssh_enable == 1 :
cmd = ' mv %s %s ' % ( ssh_key_name , new_ssh_key_name )
cmd1 = ' chmod 600 %s ' % new_ssh_key_name
try :
funct . subprocess_execute ( cmd )
funct . subprocess_execute ( cmd1 )
2020-11-16 12:31:52 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
pass
2020-11-16 12:31:52 +00:00
sql . update_ssh ( ssh_id , name , enable , group , username , password )
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' The SSH credentials ' + name + ' has been updated ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' ssh_cert ' ) :
2020-10-25 07:14:55 +00:00
import paramiko
2020-09-26 17:37:14 +00:00
user_group = funct . get_user_group ( )
name = form . getvalue ( ' name ' )
2020-10-25 07:14:55 +00:00
key = paramiko . pkey . load_private_key ( form . getvalue ( ' ssh_cert ' ) )
2021-09-02 08:07:24 +00:00
full_dir = ' /var/www/haproxy-wi/keys/ '
ssh_keys = full_dir + name + ' .pem '
2020-10-24 04:11:56 +00:00
2020-10-25 08:57:17 +00:00
try :
split_name = name . split ( ' _ ' ) [ 1 ]
split_name = True
except Exception :
split_name = False
if not os . path . isfile ( ssh_keys ) and not split_name :
2020-10-24 04:11:56 +00:00
name = name + ' _ ' + user_group
2020-07-01 20:39:15 +00:00
2021-09-02 08:07:24 +00:00
if not os . path . exists ( full_dir ) :
os . makedirs ( full_dir )
2020-07-01 20:39:15 +00:00
2021-09-02 08:07:24 +00:00
ssh_keys = full_dir + name + ' .pem '
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
try :
2021-09-03 08:07:55 +00:00
# cloud = sql.is_cloud()
# if cloud != '':
# key.write_private_key_file(ssh_keys, password=cloud)
# else:
key . write_private_key_file ( ssh_keys )
2021-09-02 08:07:24 +00:00
except IOError as e :
print ( ' error: Cannot save SSH key file. ' , str ( e ) )
2020-09-26 17:37:14 +00:00
else :
2021-09-02 08:07:24 +00:00
print ( ' success: SSH key has been saved into: %s ' % ssh_keys )
2020-07-01 20:39:15 +00:00
2020-09-26 17:37:14 +00:00
try :
cmd = ' chmod 600 %s ' % ssh_keys
funct . subprocess_execute ( cmd )
except IOError as e :
funct . logging ( ' localhost ' , e . args [ 0 ] , haproxywi = 1 )
2020-07-01 20:39:15 +00:00
2021-12-03 10:39:15 +00:00
funct . logging ( " localhost " , " A new SSH cert has been uploaded %s " % ssh_keys , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' newtelegram ' ) :
2020-09-26 17:37:14 +00:00
token = form . getvalue ( ' newtelegram ' )
channel = form . getvalue ( ' chanel ' )
group = form . getvalue ( ' telegramgroup ' )
page = form . getvalue ( ' page ' )
page = page . split ( " # " ) [ 0 ]
if token is None or channel is None or group is None :
print ( error_mess )
else :
if sql . insert_new_telegram ( token , channel , group ) :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' /new_telegram.html ' )
output_from_parsed_template = template . render ( groups = sql . select_groups ( ) ,
telegrams = sql . select_telegram ( token = token ) , page = page )
print ( output_from_parsed_template )
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' A new Telegram channel ' + channel + ' has been created ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2021-04-17 17:38:08 +00:00
if form . getvalue ( ' newslack ' ) :
token = form . getvalue ( ' newslack ' )
channel = form . getvalue ( ' chanel ' )
group = form . getvalue ( ' slackgroup ' )
page = form . getvalue ( ' page ' )
page = page . split ( " # " ) [ 0 ]
if token is None or channel is None or group is None :
print ( error_mess )
else :
if sql . insert_new_slack ( token , channel , group ) :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' /new_slack.html ' )
output_from_parsed_template = template . render ( groups = sql . select_groups ( ) ,
slacks = sql . select_slack ( token = token ) , page = page )
print ( output_from_parsed_template )
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' A new Slack channel ' + channel + ' has been created ' , haproxywi = 1 , login = 1 )
2021-04-17 17:38:08 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' telegramdel ' ) is not None :
2020-09-26 17:37:14 +00:00
telegramdel = form . getvalue ( ' telegramdel ' )
telegram = sql . select_telegram ( id = telegramdel )
2021-12-03 10:39:15 +00:00
telegram_name = ' '
2020-09-26 17:37:14 +00:00
for t in telegram :
2021-08-02 08:19:22 +00:00
telegram_name = t . token
2020-09-26 17:37:14 +00:00
if sql . delete_telegram ( telegramdel ) :
print ( " Ok " )
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' The Telegram channel ' + telegram_name + ' has been deleted ' , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2021-04-17 17:38:08 +00:00
if form . getvalue ( ' slackdel ' ) is not None :
slackdel = form . getvalue ( ' slackdel ' )
slack = sql . select_slack ( id = slackdel )
2021-12-03 10:39:15 +00:00
slack_name = ' '
2021-04-17 17:38:08 +00:00
for t in slack :
slack_name = t [ 1 ]
if sql . delete_slack ( slackdel ) :
print ( " Ok " )
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' The Slack channel ' + slack_name + ' has been deleted ' , haproxywi = 1 , login = 1 )
2021-04-17 17:38:08 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' updatetoken ' ) is not None :
2020-09-26 17:37:14 +00:00
token = form . getvalue ( ' updatetoken ' )
channel = form . getvalue ( ' updategchanel ' )
group = form . getvalue ( ' updatetelegramgroup ' )
2020-11-16 12:31:52 +00:00
user_id = form . getvalue ( ' id ' )
2020-09-26 17:37:14 +00:00
if token is None or channel is None or group is None :
print ( error_mess )
else :
2020-11-16 12:31:52 +00:00
sql . update_telegram ( token , channel , group , user_id )
2021-12-03 10:39:15 +00:00
funct . logging ( ' group ' + group , ' The Telegram token has been updated for channel: ' + channel , haproxywi = 1 , login = 1 )
2021-04-17 17:38:08 +00:00
if form . getvalue ( ' update_slack_token ' ) is not None :
token = form . getvalue ( ' update_slack_token ' )
channel = form . getvalue ( ' updategchanel ' )
group = form . getvalue ( ' updateslackgroup ' )
user_id = form . getvalue ( ' id ' )
if token is None or channel is None or group is None :
print ( error_mess )
else :
sql . update_slack ( token , channel , group , user_id )
2021-12-03 10:39:15 +00:00
funct . logging ( ' group ' + group , ' The Slack token has been updated for channel: ' + channel , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2020-01-18 23:50:43 +00:00
if form . getvalue ( ' updatesettings ' ) is not None :
2020-09-26 17:37:14 +00:00
settings = form . getvalue ( ' updatesettings ' )
val = form . getvalue ( ' val ' )
if sql . update_setting ( settings , val ) :
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' The ' + settings + ' setting has been changed to: ' + val , haproxywi = 1 , login = 1 )
2020-09-26 17:37:14 +00:00
print ( " Ok " )
2020-05-10 06:17:07 +00:00
2021-08-15 09:02:12 +00:00
if form . getvalue ( ' getuserservices ' ) :
user_id = form . getvalue ( ' getuserservices ' )
groups = [ ]
u_g = sql . select_user_groups ( user_id )
2022-04-20 08:08:36 +00:00
services = sql . select_services ( )
2021-08-15 09:02:12 +00:00
for g in u_g :
groups . append ( g . user_group_id )
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' /show_user_services.html ' )
2022-04-20 08:08:36 +00:00
template = template . render ( user_services = sql . select_user_services ( user_id ) , id = user_id , services = services )
2021-08-15 09:02:12 +00:00
print ( template )
2020-05-10 06:17:07 +00:00
if form . getvalue ( ' getusergroups ' ) :
2021-08-02 08:19:22 +00:00
user_id = form . getvalue ( ' getusergroups ' )
2020-09-26 17:37:14 +00:00
groups = [ ]
2021-08-02 08:19:22 +00:00
u_g = sql . select_user_groups ( user_id )
2020-09-26 17:37:14 +00:00
for g in u_g :
2021-08-02 08:19:22 +00:00
groups . append ( g . user_group_id )
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' /show_user_groups.html ' )
2021-08-02 08:19:22 +00:00
template = template . render ( groups = sql . select_groups ( ) , user_groups = groups , id = user_id )
2020-09-26 17:37:14 +00:00
print ( template )
2020-07-01 20:39:15 +00:00
2020-05-10 06:17:07 +00:00
if form . getvalue ( ' changeUserGroupId ' ) is not None :
2020-11-02 17:01:08 +00:00
group_id = form . getvalue ( ' changeUserGroupId ' )
2020-09-26 17:37:14 +00:00
groups = form . getvalue ( ' changeUserGroups ' )
user = form . getvalue ( ' changeUserGroupsUser ' )
2020-11-02 17:01:08 +00:00
if sql . delete_user_groups ( group_id ) :
2020-09-26 17:37:14 +00:00
for group in groups :
if group [ 0 ] == ' , ' :
continue
2021-08-02 08:19:22 +00:00
sql . update_user_groups ( groups = group [ 0 ] , user_group_id = group_id )
2020-07-01 20:39:15 +00:00
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' Groups has been updated for user: ' + user , haproxywi = 1 , login = 1 )
2021-08-15 09:02:12 +00:00
if form . getvalue ( ' changeUserServicesId ' ) is not None :
user_id = form . getvalue ( ' changeUserServicesId ' )
services = form . getvalue ( ' changeUserServices ' )
user = form . getvalue ( ' changeUserServicesUser ' )
if sql . update_user_services ( services = services , user_id = user_id ) :
2021-12-03 10:39:15 +00:00
funct . logging ( ' localhost ' , ' Access to the services has been updated for user: ' + user , haproxywi = 1 , login = 1 )
2020-07-01 20:39:15 +00:00
2021-01-02 16:36:43 +00:00
if form . getvalue ( ' changeUserCurrentGroupId ' ) is not None :
group_id = form . getvalue ( ' changeUserCurrentGroupId ' )
user_uuid = form . getvalue ( ' changeUserGroupsUser ' )
if sql . update_user_current_groups ( group_id , user_uuid ) :
print ( ' Ok ' )
else :
print ( ' error: Cannot change group ' )
2020-05-10 06:17:07 +00:00
if form . getvalue ( ' getcurrentusergroup ' ) is not None :
2020-09-26 17:37:14 +00:00
import http . cookies
2020-05-10 06:17:07 +00:00
2020-09-26 17:37:14 +00:00
cookie = http . cookies . SimpleCookie ( os . environ . get ( " HTTP_COOKIE " ) )
user_id = cookie . get ( ' uuid ' )
group = cookie . get ( ' group ' )
2020-11-02 17:01:08 +00:00
group_id = sql . get_user_id_by_uuid ( user_id . value )
2021-08-02 08:19:22 +00:00
groups = sql . select_user_groups_with_names ( group_id )
2020-07-15 04:16:31 +00:00
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
2020-07-15 04:16:31 +00:00
2020-09-26 17:37:14 +00:00
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' /show_user_current_group.html ' )
2020-11-02 17:01:08 +00:00
template = template . render ( groups = groups , group = group . value , id = group_id )
2020-09-26 17:37:14 +00:00
print ( template )
2020-07-15 04:16:31 +00:00
2020-09-26 17:37:14 +00:00
if form . getvalue ( ' newsmon ' ) is not None :
user_group = funct . get_user_group ( id = 1 )
server = form . getvalue ( ' newsmon ' )
port = form . getvalue ( ' newsmonport ' )
enable = form . getvalue ( ' newsmonenable ' )
http = form . getvalue ( ' newsmonproto ' )
uri = form . getvalue ( ' newsmonuri ' )
body = form . getvalue ( ' newsmonbody ' )
group = form . getvalue ( ' newsmongroup ' )
desc = form . getvalue ( ' newsmondescription ' )
telegram = form . getvalue ( ' newsmontelegram ' )
2022-02-16 07:46:30 +00:00
slack = form . getvalue ( ' newsmonslack ' )
2020-09-26 17:37:14 +00:00
try :
port = int ( port )
2020-11-02 17:01:08 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
print ( ' SMON error: port must number ' )
sys . exit ( )
if port > 65535 or port < 0 :
print ( ' SMON error: port must be 0-65535 ' )
sys . exit ( )
if port == 80 and http == ' https ' :
print ( ' SMON error: Cannot be HTTPS with 80 port ' )
sys . exit ( )
if port == 443 and http == ' http ' :
print ( ' SMON error: Cannot be HTTP with 443 port ' )
sys . exit ( )
2022-02-16 07:46:30 +00:00
last_id = sql . insert_smon ( server , port , enable , http , uri , body , group , desc , telegram , slack , user_group )
2021-08-23 10:25:00 +00:00
if last_id :
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates ' ) , autoescape = True )
template = env . get_template ( ' ajax/show_new_smon.html ' )
template = template . render (
2021-08-23 10:25:00 +00:00
smon = sql . select_smon_by_id ( last_id ) ,
2022-02-16 07:46:30 +00:00
telegrams = sql . get_user_telegram_by_group ( user_group ) ,
slacks = sql . get_user_slack_by_group ( user_group ) )
2020-09-26 17:37:14 +00:00
print ( template )
funct . logging ( ' SMON ' , ' Has been add a new server ' + server + ' to SMON ' , haproxywi = 1 , login = 1 )
2020-07-15 04:16:31 +00:00
if form . getvalue ( ' smondel ' ) is not None :
2020-09-26 17:37:14 +00:00
user_group = funct . get_user_group ( id = 1 )
2020-11-02 17:01:08 +00:00
smon_id = form . getvalue ( ' smondel ' )
2020-07-15 04:16:31 +00:00
2020-09-26 17:37:14 +00:00
if funct . check_user_group ( ) :
2020-11-02 17:01:08 +00:00
if sql . delete_smon ( smon_id , user_group ) :
2020-09-26 17:37:14 +00:00
print ( ' Ok ' )
funct . logging ( ' SMON ' , ' Has been delete server from SMON ' , haproxywi = 1 , login = 1 )
2020-07-15 04:16:31 +00:00
if form . getvalue ( ' showsmon ' ) is not None :
2020-09-26 17:37:14 +00:00
user_group = funct . get_user_group ( id = 1 )
sort = form . getvalue ( ' sort ' )
2020-07-15 04:16:31 +00:00
2020-09-26 17:37:14 +00:00
from jinja2 import Environment , FileSystemLoader
2020-07-15 04:16:31 +00:00
2020-09-26 17:37:14 +00:00
env = Environment ( loader = FileSystemLoader ( ' templates ' ) , autoescape = True )
template = env . get_template ( ' ajax/smon_dashboard.html ' )
template = template . render ( smon = sql . smon_list ( user_group ) , sort = sort )
print ( template )
2020-07-15 04:16:31 +00:00
if form . getvalue ( ' updateSmonIp ' ) is not None :
2020-11-02 17:01:08 +00:00
smon_id = form . getvalue ( ' id ' )
2020-09-26 17:37:14 +00:00
ip = form . getvalue ( ' updateSmonIp ' )
port = form . getvalue ( ' updateSmonPort ' )
en = form . getvalue ( ' updateSmonEn ' )
http = form . getvalue ( ' updateSmonHttp ' )
body = form . getvalue ( ' updateSmonBody ' )
telegram = form . getvalue ( ' updateSmonTelegram ' )
2022-02-16 07:46:30 +00:00
slack = form . getvalue ( ' updateSmonSlack ' )
2020-09-26 17:37:14 +00:00
group = form . getvalue ( ' updateSmonGroup ' )
desc = form . getvalue ( ' updateSmonDesc ' )
try :
port = int ( port )
2020-11-02 17:01:08 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
print ( ' SMON error: port must number ' )
sys . exit ( )
if port > 65535 or port < 0 :
print ( ' SMON error: port must be 0-65535 ' )
sys . exit ( )
if port == 80 and http == ' https ' :
print ( ' SMON error: Cannot be https with 80 port ' )
sys . exit ( )
if port == 443 and http == ' http ' :
print ( ' SMON error: Cannot be HTTP with 443 port ' )
sys . exit ( )
2021-08-02 08:19:22 +00:00
2022-02-16 07:46:30 +00:00
if sql . update_smon ( smon_id , ip , port , body , telegram , slack , group , desc , en ) :
2020-09-26 17:37:14 +00:00
print ( " Ok " )
funct . logging ( ' SMON ' , ' Has been update the server ' + ip + ' to SMON ' , haproxywi = 1 , login = 1 )
2020-07-15 04:16:31 +00:00
if form . getvalue ( ' showBytes ' ) is not None :
2020-09-26 17:37:14 +00:00
serv = form . getvalue ( ' showBytes ' )
port = sql . get_setting ( ' haproxy_sock_port ' )
bin_bout = [ ]
2021-08-08 13:02:00 +00:00
cmd = " echo ' show stat ' |nc {} {} |cut -d ' , ' -f 1-2,9|grep -E ' [0-9] ' |awk -F ' , ' ' {{ sum+=$3;}}END {{ print sum;}} ' " . format ( serv , port )
2020-09-26 17:37:14 +00:00
bin , stderr = funct . subprocess_execute ( cmd )
bin_bout . append ( bin [ 0 ] )
2021-08-08 13:02:00 +00:00
cmd = " echo ' show stat ' |nc {} {} |cut -d ' , ' -f 1-2,10|grep -E ' [0-9] ' |awk -F ' , ' ' {{ sum+=$3;}}END {{ print sum;}} ' " . format ( serv , port )
2020-09-26 17:37:14 +00:00
bin , stderr = funct . subprocess_execute ( cmd )
bin_bout . append ( bin [ 0 ] )
2021-08-08 13:02:00 +00:00
cmd = " echo ' show stat ' |nc {} {} |cut -d ' , ' -f 1-2,5|grep -E ' [0-9] ' |awk -F ' , ' ' {{ sum+=$3;}}END {{ print sum;}} ' " . format ( serv , port )
2020-09-26 17:37:14 +00:00
bin , stderr = funct . subprocess_execute ( cmd )
bin_bout . append ( bin [ 0 ] )
2021-08-08 13:02:00 +00:00
cmd = " echo ' show stat ' |nc {} {} |cut -d ' , ' -f 1-2,8|grep -E ' [0-9] ' |awk -F ' , ' ' {{ sum+=$3;}}END {{ print sum;}} ' " . format ( serv , port )
2020-09-26 17:37:14 +00:00
bin , stderr = funct . subprocess_execute ( cmd )
bin_bout . append ( bin [ 0 ] )
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates ' ) , autoescape = True )
template = env . get_template ( ' ajax/bin_bout.html ' )
template = template . render ( bin_bout = bin_bout , serv = serv )
print ( template )
2020-09-02 04:26:36 +00:00
2020-12-04 03:51:31 +00:00
if form . getvalue ( ' nginxConnections ' ) :
import requests
serv = form . getvalue ( ' nginxConnections ' )
port = sql . get_setting ( ' nginx_stats_port ' )
user = sql . get_setting ( ' nginx_stats_user ' )
password = sql . get_setting ( ' nginx_stats_password ' )
page = sql . get_setting ( ' nginx_stats_page ' )
2021-08-15 09:02:12 +00:00
url = ' http:// {} : {} / {} ' . format ( serv , port , page )
2020-12-04 03:51:31 +00:00
2021-08-15 09:02:12 +00:00
r = requests . get ( url , auth = ( user , password ) )
2020-12-04 03:51:31 +00:00
if r . status_code == 200 :
bin_bout = [ 0 , 0 ]
for num , line in enumerate ( r . text . split ( ' \n ' ) ) :
if num == 0 :
bin_bout . append ( line . split ( ' ' ) [ 2 ] )
if num == 2 :
bin_bout . append ( line . split ( ' ' ) [ 3 ] )
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates ' ) )
template = env . get_template ( ' ajax/bin_bout.html ' )
template = template . render ( bin_bout = bin_bout , serv = serv , service = ' nginx ' )
print ( template )
else :
print ( ' error: cannot connect to Nginx stat page ' )
2020-09-02 04:26:36 +00:00
if form . getvalue ( ' alert_consumer ' ) :
2020-09-26 17:37:14 +00:00
try :
user_group = funct . get_user_group ( id = 1 )
if funct . check_user_group ( ) :
message = sql . select_alerts ( user_group )
for m in message :
print ( m [ 0 ] + ' : ' + m [ 1 ] + ' date: ' + m [ 2 ] + ' ; ' )
2020-11-02 17:01:08 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
pass
2020-09-02 04:26:36 +00:00
if form . getvalue ( ' waf_rule_id ' ) :
2020-09-26 17:37:14 +00:00
enable = form . getvalue ( ' waf_en ' )
rule_id = form . getvalue ( ' waf_rule_id ' )
haproxy_path = sql . get_setting ( ' haproxy_dir ' )
rule_file = sql . select_waf_rule_by_id ( rule_id )
2021-08-02 08:19:22 +00:00
conf_file_path = haproxy_path + ' /waf/modsecurity.conf '
rule_file_path = ' Include ' + haproxy_path + ' //waf/rules/ ' + rule_file
2020-09-26 17:37:14 +00:00
if enable == ' 0 ' :
cmd = [ " sudo sed -i ' s! " + rule_file_path + " !# " + rule_file_path + " ! ' " + conf_file_path ]
en_for_log = ' disable '
else :
cmd = [ " sudo sed -i ' s!# " + rule_file_path + " ! " + rule_file_path + " ! ' " + conf_file_path ]
en_for_log = ' enable '
try :
funct . logging ( ' WAF ' , ' Has been ' + en_for_log + ' WAF rule: ' + rule_file + ' for the server ' + serv ,
haproxywi = 1 , login = 1 )
2020-11-02 17:01:08 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
pass
print ( funct . ssh_command ( serv , cmd ) )
sql . update_enable_waf_rules ( rule_id , serv , enable )
2020-09-15 05:56:43 +00:00
if form . getvalue ( ' lets_domain ' ) :
2020-09-26 17:37:14 +00:00
serv = form . getvalue ( ' serv ' )
lets_domain = form . getvalue ( ' lets_domain ' )
lets_email = form . getvalue ( ' lets_email ' )
proxy = sql . get_setting ( ' proxy ' )
ssl_path = sql . get_setting ( ' cert_path ' )
2021-01-10 04:48:18 +00:00
haproxy_dir = sql . get_setting ( ' haproxy_dir ' )
2020-09-26 17:37:14 +00:00
script = " letsencrypt.sh "
2021-12-03 10:39:15 +00:00
ssh_port = " 22 "
2020-09-26 17:37:14 +00:00
ssh_enable , ssh_user_name , ssh_user_password , ssh_key_name = funct . return_ssh_keys_path ( serv )
if ssh_enable == 0 :
ssh_key_name = ' '
servers = sql . select_servers ( server = serv )
for server in servers :
ssh_port = str ( server [ 10 ] )
os . system ( " cp scripts/ %s . " % script )
if proxy is not None and proxy != ' ' and proxy != ' None ' :
proxy_serv = proxy
else :
proxy_serv = ' '
2021-01-10 04:48:18 +00:00
commands = [ " chmod +x " + script + " && ./ " + script + " PROXY= " + proxy_serv + " haproxy_dir= " + haproxy_dir +
2020-09-26 17:37:14 +00:00
" DOMAIN= " + lets_domain + " EMAIL= " + lets_email + " SSH_PORT= " + ssh_port + " SSL_PATH= " + ssl_path +
2021-08-15 09:02:12 +00:00
" HOST= " + serv + " USER= " + ssh_user_name + " PASS= ' " + ssh_user_password + " ' KEY= " + ssh_key_name ]
2020-09-26 17:37:14 +00:00
output , error = funct . subprocess_execute ( commands [ 0 ] )
if error :
funct . logging ( ' localhost ' , error , haproxywi = 1 )
print ( error )
else :
for l in output :
if " msg " in l or " FAILED " in l :
try :
l = l . split ( ' : ' ) [ 1 ]
l = l . split ( ' " ' ) [ 1 ]
print ( l + " <br> " )
break
2020-11-02 17:01:08 +00:00
except Exception :
2020-09-26 17:37:14 +00:00
print ( output )
break
else :
print ( ' success: Certificate has been created ' )
os . system ( " rm -f %s " % script )
2020-10-09 15:56:16 +00:00
if form . getvalue ( ' uploadovpn ' ) :
name = form . getvalue ( ' ovpnname ' )
ovpn_file = os . path . dirname ( ' /tmp/ ' ) + " / " + name + ' .ovpn '
try :
with open ( ovpn_file , " w " ) as conf :
conf . write ( form . getvalue ( ' uploadovpn ' ) )
except IOError as e :
print ( str ( e ) )
print ( ' error: Can \' t save ovpn file ' )
else :
print ( ' success: ovpn file has been saved </div> ' )
try :
cmd = ' sudo openvpn3 config-import --config %s --persistent ' % ovpn_file
funct . subprocess_execute ( cmd )
except IOError as e :
funct . logging ( ' localhost ' , e . args [ 0 ] , haproxywi = 1 )
try :
cmd = ' sudo cp %s /etc/openvpn3/ %s .conf ' % ( ovpn_file , name )
funct . subprocess_execute ( cmd )
except IOError as e :
funct . logging ( ' localhost ' , e . args [ 0 ] , haproxywi = 1 )
funct . logging ( " localhost " , " has been uploaded a new ovpn file %s " % ovpn_file , haproxywi = 1 , login = 1 )
if form . getvalue ( ' openvpndel ' ) is not None :
openvpndel = form . getvalue ( ' openvpndel ' )
cmd = ' sudo openvpn3 config-remove --config /tmp/ %s .ovpn --force ' % openvpndel
try :
funct . subprocess_execute ( cmd )
print ( " Ok " )
funct . logging ( openvpndel , ' has deleted the ovpn file ' , haproxywi = 1 , login = 1 )
except IOError as e :
print ( e . args [ 0 ] )
funct . logging ( ' localhost ' , e . args [ 0 ] , haproxywi = 1 )
if form . getvalue ( ' actionvpn ' ) is not None :
openvpn = form . getvalue ( ' openvpnprofile ' )
action = form . getvalue ( ' actionvpn ' )
if action == ' start ' :
cmd = ' sudo openvpn3 session-start --config /tmp/ %s .ovpn ' % openvpn
elif action == ' restart ' :
cmd = ' sudo openvpn3 session-manage --config /tmp/ %s .ovpn --restart ' % openvpn
elif action == ' disconnect ' :
cmd = ' sudo openvpn3 session-manage --config /tmp/ %s .ovpn --disconnect ' % openvpn
try :
funct . subprocess_execute ( cmd )
print ( " success: The " + openvpn + " has been " + action + " ed " )
funct . logging ( openvpn , ' has ' + action + ' the ovpn session ' , haproxywi = 1 , login = 1 )
except IOError as e :
print ( e . args [ 0 ] )
funct . logging ( ' localhost ' , e . args [ 0 ] , haproxywi = 1 )
2020-11-02 17:01:08 +00:00
if form . getvalue ( ' scan_ports ' ) is not None :
serv_id = form . getvalue ( ' scan_ports ' )
server = sql . select_servers ( id = serv_id )
2021-12-03 10:39:15 +00:00
ip = ' '
2020-11-02 17:01:08 +00:00
for s in server :
ip = s [ 2 ]
cmd = " sudo nmap -sS %s |grep -E ' ^[[:digit:]] ' |sed ' s/ */ /g ' " % ip
2021-01-10 04:48:18 +00:00
cmd1 = " sudo nmap -sS %s |head -5|tail -2 " % ip
2020-11-02 17:01:08 +00:00
stdout , stderr = funct . subprocess_execute ( cmd )
stdout1 , stderr1 = funct . subprocess_execute ( cmd1 )
if stderr != ' ' :
print ( stderr )
else :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates ' ) , autoescape = True )
template = env . get_template ( ' ajax/scan_ports.html ' )
template = template . render ( ports = stdout , info = stdout1 )
print ( template )
2020-12-04 03:51:31 +00:00
if form . getvalue ( ' viewFirewallRules ' ) is not None :
serv = form . getvalue ( ' viewFirewallRules ' )
cmd = [ " sudo iptables -L INPUT -n --line-numbers|sed ' s/ */ /g ' |grep -v -E ' Chain|target ' " ]
cmd1 = [ " sudo iptables -L IN_public_allow -n --line-numbers|sed ' s/ */ /g ' |grep -v -E ' Chain|target ' " ]
cmd2 = [ " sudo iptables -L OUTPUT -n --line-numbers|sed ' s/ */ /g ' |grep -v -E ' Chain|target ' " ]
2020-12-15 06:34:02 +00:00
input_chain = funct . ssh_command ( serv , cmd , raw = 1 )
2021-01-22 04:01:08 +00:00
input_chain2 = [ ]
for each_line in input_chain :
input_chain2 . append ( each_line . strip ( ' \n ' ) )
if ' error: ' in input_chain :
print ( input_chain )
sys . exit ( )
2020-12-04 03:51:31 +00:00
IN_public_allow = funct . ssh_command ( serv , cmd1 , raw = 1 )
2020-12-15 06:34:02 +00:00
output_chain = funct . ssh_command ( serv , cmd2 , raw = 1 )
2020-12-04 03:51:31 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates ' ) )
template = env . get_template ( ' ajax/firewall_rules.html ' )
2021-01-22 04:01:08 +00:00
template = template . render ( input = input_chain2 , IN_public_allow = IN_public_allow , output = output_chain )
2020-12-04 03:51:31 +00:00
print ( template )
2020-12-26 09:08:17 +00:00
if form . getvalue ( ' geoipserv ' ) is not None :
serv = form . getvalue ( ' geoipserv ' )
haproxy_dir = sql . get_setting ( ' haproxy_dir ' )
cmd = [ " ls " + haproxy_dir + " /geoip/ " ]
print ( funct . ssh_command ( serv , cmd ) )
2021-01-09 15:42:08 +00:00
if form . getvalue ( ' geoip_install ' ) :
serv = form . getvalue ( ' geoip_install ' )
geoip_update = form . getvalue ( ' geoip_update ' )
proxy = sql . get_setting ( ' proxy ' )
maxmind_key = sql . get_setting ( ' maxmind_key ' )
haproxy_dir = sql . get_setting ( ' haproxy_dir ' )
script = ' install_geoip.sh '
2021-12-03 10:39:15 +00:00
ssh_port = ' 22 '
2021-01-09 15:42:08 +00:00
ssh_enable , ssh_user_name , ssh_user_password , ssh_key_name = funct . return_ssh_keys_path ( serv )
if ssh_enable == 0 :
ssh_key_name = ' '
servers = sql . select_servers ( server = serv )
for server in servers :
ssh_port = str ( server [ 10 ] )
if proxy is not None and proxy != ' ' and proxy != ' None ' :
proxy_serv = proxy
else :
proxy_serv = ' '
os . system ( " cp scripts/ %s . " % script )
commands = [ " chmod +x " + script + " && ./ " + script + " PROXY= " + proxy_serv + " SSH_PORT= " + ssh_port +
" UPDATE= " + str ( geoip_update ) + " maxmind_key= " + maxmind_key + " haproxy_dir= " + haproxy_dir +
2021-01-22 04:01:08 +00:00
" HOST= " + str ( serv ) + " USER= " + str ( ssh_user_name ) + " PASS= " + str ( ssh_user_password ) +
2021-01-09 15:42:08 +00:00
" KEY= " + str ( ssh_key_name ) ]
output , error = funct . subprocess_execute ( commands [ 0 ] )
funct . show_installation_output ( error , output , ' GeoLite2 Database ' )
os . system ( " rm -f %s " % script )
2021-01-22 04:01:08 +00:00
2021-04-03 04:10:37 +00:00
if form . getvalue ( ' nettools_icmp_server_from ' ) :
server_from = form . getvalue ( ' nettools_icmp_server_from ' )
server_to = form . getvalue ( ' nettools_icmp_server_to ' )
2021-11-02 20:57:54 +00:00
server_to = funct . is_ip_or_dns ( server_to )
2021-04-03 04:10:37 +00:00
action = form . getvalue ( ' nettools_action ' )
stderr = ' '
2021-12-03 10:39:15 +00:00
action_for_sending = ' '
2021-04-03 04:10:37 +00:00
2021-11-02 20:57:54 +00:00
if server_to == ' ' :
print ( ' warning: enter a correct IP or DNS name ' )
sys . exit ( )
2021-04-03 04:10:37 +00:00
if action == ' nettools_ping ' :
action_for_sending = ' ping -c 4 -W 1 -s 56 -O '
elif action == ' nettools_trace ' :
action_for_sending = ' tracepath -m 10 '
action_for_sending = action_for_sending + server_to
if server_from == ' localhost ' :
output , stderr = funct . subprocess_execute ( action_for_sending )
else :
action_for_sending = [ action_for_sending ]
output = funct . ssh_command ( server_from , action_for_sending , raw = 1 )
if stderr != ' ' :
print ( ' error: ' + stderr )
sys . exit ( )
for i in output :
2021-11-02 20:57:54 +00:00
if i == ' ' or i == ' ' :
2021-04-03 04:10:37 +00:00
continue
i = i . strip ( )
2021-11-02 20:57:54 +00:00
if ' PING ' in i :
print ( ' <span style= " color: var(--link-dark-blue); display: block; margin-top: -20px; " > ' )
elif ' no reply ' in i or ' no answer yet ' in i or ' Too many hops ' in i or ' 100 % packet loss ' in i :
print ( ' <span style= " color: var(--red-color); " > ' )
elif ' ms ' in i and ' 100 % packet loss ' not in i :
print ( ' <span style= " color: var(--green-color); " > ' )
else :
print ( ' <span> ' )
print ( i + ' </span><br /> ' )
2021-04-03 04:10:37 +00:00
if form . getvalue ( ' nettools_telnet_server_from ' ) :
server_from = form . getvalue ( ' nettools_telnet_server_from ' )
server_to = form . getvalue ( ' nettools_telnet_server_to ' )
2021-11-02 20:57:54 +00:00
server_to = funct . is_ip_or_dns ( server_to )
2021-04-03 04:10:37 +00:00
port_to = form . getvalue ( ' nettools_telnet_port_to ' )
stderr = ' '
2021-11-02 20:57:54 +00:00
if server_to == ' ' :
print ( ' warning: enter a correct IP or DNS name ' )
sys . exit ( )
2021-04-03 04:10:37 +00:00
if server_from == ' localhost ' :
action_for_sending = ' echo " exit " |nc ' + server_to + ' ' + port_to + ' -t -w 1s '
output , stderr = funct . subprocess_execute ( action_for_sending )
else :
action_for_sending = [ ' echo " exit " |nc ' + server_to + ' ' + port_to + ' -t -w 1s ' ]
output = funct . ssh_command ( server_from , action_for_sending , raw = 1 )
if stderr != ' ' :
2021-11-02 20:57:54 +00:00
print ( ' error: <b> ' + stderr [ 5 : ] + ' </b> ' )
2021-04-03 04:10:37 +00:00
sys . exit ( )
count_string = 0
for i in output :
if i == ' ' :
continue
i = i . strip ( )
if i == ' Ncat: Connection timed out. ' :
2021-11-02 20:57:54 +00:00
print ( ' error: <b> ' + i [ 5 : ] + ' </b> ' )
2021-04-03 04:10:37 +00:00
break
print ( i + ' <br> ' )
count_string + = 1
if count_string > 1 :
break
if form . getvalue ( ' nettools_nslookup_server_from ' ) :
server_from = form . getvalue ( ' nettools_nslookup_server_from ' )
dns_name = form . getvalue ( ' nettools_nslookup_name ' )
2021-11-02 20:57:54 +00:00
dns_name = funct . is_ip_or_dns ( dns_name )
2021-04-03 04:10:37 +00:00
record_type = form . getvalue ( ' nettools_nslookup_record_type ' )
stderr = ' '
2021-11-02 20:57:54 +00:00
if dns_name == ' ' :
print ( ' warning: enter a correct DNS name ' )
sys . exit ( )
2021-04-03 04:10:37 +00:00
action_for_sending = ' dig ' + dns_name + ' ' + record_type + ' |grep -e " SERVER \ | ' + dns_name + ' " '
if server_from == ' localhost ' :
output , stderr = funct . subprocess_execute ( action_for_sending )
else :
action_for_sending = [ action_for_sending ]
output = funct . ssh_command ( server_from , action_for_sending , raw = 1 )
if stderr != ' ' :
print ( ' error: ' + stderr [ 5 : - 1 ] )
sys . exit ( )
count_string = 0
2021-11-02 20:57:54 +00:00
print ( ' <b style= " display: block; margin-top:10px; " >The <i style= " color: var(--blue-color) " > ' + dns_name + ' </i> domain has the following records:</b> ' )
2021-04-03 04:10:37 +00:00
for i in output :
if ' dig: command not found. ' in i :
print ( ' error: Install bind-utils before using NSLookup ' )
break
if ' ; ' in i and ' ;; SERVER: ' not in i :
continue
if ' SOA ' in i and record_type != ' SOA ' :
2021-11-02 20:57:54 +00:00
print ( ' <b style= " color: red " >There are not any records for this type ' )
2021-04-03 04:10:37 +00:00
break
if ' ;; SERVER: ' in i :
2021-11-02 20:57:54 +00:00
i = i [ 10 : ]
2021-04-03 04:10:37 +00:00
print ( ' <br><b>From NS server:</b><br> ' )
i = i . strip ( )
2021-11-02 20:57:54 +00:00
print ( ' <i> ' + i + ' </i><br> ' )
2021-04-03 04:10:37 +00:00
count_string + = 1
if form . getvalue ( ' portscanner_history_server_id ' ) :
server_id = form . getvalue ( ' portscanner_history_server_id ' )
enabled = form . getvalue ( ' portscanner_enabled ' )
notify = form . getvalue ( ' portscanner_notify ' )
history = form . getvalue ( ' portscanner_history ' )
servers = sql . select_servers ( id = server_id )
for s in servers :
user_group_id = s [ 3 ]
if sql . insert_port_scanner_settings ( server_id , user_group_id , enabled , notify , history ) :
print ( ' ok ' )
else :
if sql . update_port_scanner_settings ( server_id , user_group_id , enabled , notify , history ) :
print ( ' ok ' )
2021-01-22 04:01:08 +00:00
if form . getvalue ( ' show_versions ' ) :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates ' ) )
template = env . get_template ( ' ajax/check_version.html ' )
template = template . render ( versions = funct . versions ( ) )
2021-02-03 19:25:37 +00:00
print ( template )
if form . getvalue ( ' get_group_name_by_id ' ) :
print ( sql . get_group_name_by_id ( form . getvalue ( ' get_group_name_by_id ' ) ) )
2021-02-15 06:10:00 +00:00
2021-03-16 14:38:12 +00:00
if form . getvalue ( ' do_new_name ' ) or form . getvalue ( ' aws_new_name ' ) or form . getvalue ( ' gcore_new_name ' ) :
2021-02-15 06:10:00 +00:00
funct . check_user_group ( )
is_add = False
if form . getvalue ( ' do_new_name ' ) :
provider_name = form . getvalue ( ' do_new_name ' )
provider_group = form . getvalue ( ' do_new_group ' )
provider_token = form . getvalue ( ' do_new_token ' )
if sql . add_provider_do ( provider_name , provider_group , provider_token ) :
is_add = True
elif form . getvalue ( ' aws_new_name ' ) :
provider_name = form . getvalue ( ' aws_new_name ' )
provider_group = form . getvalue ( ' aws_new_group ' )
provider_token = form . getvalue ( ' aws_new_key ' )
provider_secret = form . getvalue ( ' aws_new_secret ' )
if sql . add_provider_aws ( provider_name , provider_group , provider_token , provider_secret ) :
is_add = True
2021-03-16 14:38:12 +00:00
elif form . getvalue ( ' gcore_new_name ' ) :
provider_name = form . getvalue ( ' gcore_new_name ' )
provider_group = form . getvalue ( ' gcore_new_group ' )
provider_token = form . getvalue ( ' gcore_new_user ' )
provider_pass = form . getvalue ( ' gcore_new_pass ' )
if sql . add_provider_gcore ( provider_name , provider_group , provider_token , provider_pass ) :
is_add = True
2021-02-15 06:10:00 +00:00
if is_add :
from jinja2 import Environment , FileSystemLoader
import http . cookies
import os
cookie = http . cookies . SimpleCookie ( os . environ . get ( " HTTP_COOKIE " ) )
user_uuid = cookie . get ( ' uuid ' )
role_id = sql . get_user_role_by_uuid ( user_uuid . value )
if role_id == 1 :
groups = sql . select_groups ( )
else :
groups = ' '
env = Environment ( loader = FileSystemLoader ( ' templates ' ) , autoescape = True )
template = env . get_template ( ' ajax/provisioning/providers.html ' )
template = template . render ( providers = sql . select_providers ( provider_group , key = provider_token ) , role = role_id , groups = groups , user_group = provider_group , adding = 1 )
print ( template )
if form . getvalue ( ' providerdel ' ) :
funct . check_user_group ( )
if sql . delete_provider ( form . getvalue ( ' providerdel ' ) ) :
print ( ' Ok ' )
funct . logging ( ' localhost ' , ' Provider has been deleted ' , provisioning = 1 )
2021-03-16 14:38:12 +00:00
if form . getvalue ( ' awsinit ' ) or form . getvalue ( ' doinit ' ) or form . getvalue ( ' gcoreinitserver ' ) :
2021-02-15 06:10:00 +00:00
funct . check_user_group ( )
2021-02-23 04:50:23 +00:00
cmd = ' cd scripts/terraform/ && sudo terraform init -upgrade -no-color '
2021-02-15 06:10:00 +00:00
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
print ( ' error: ' + stderr )
else :
if " Terraform initialized in an empty directory " in output [ 0 ] :
print ( ' error: There is not need modules ' )
elif " mkdir .terraform: permission denied " in output [ 0 ] :
print ( ' error: Cannot init. Check permission to folder ' )
print ( output [ 0 ] )
if form . getvalue ( ' awsvars ' ) or form . getvalue ( ' awseditvars ' ) :
if form . getvalue ( ' awsvars ' ) :
awsvars = form . getvalue ( ' awsvars ' )
group = form . getvalue ( ' aws_create_group ' )
provider = form . getvalue ( ' aws_create_provider ' )
region = form . getvalue ( ' aws_create_regions ' )
size = form . getvalue ( ' aws_create_size ' )
oss = form . getvalue ( ' aws_create_oss ' )
ssh_name = form . getvalue ( ' aws_create_ssh_name ' )
volume_size = form . getvalue ( ' aws_create_volume_size ' )
2021-03-16 14:38:12 +00:00
volume_type = form . getvalue ( ' aws_create_volume_type ' )
2021-02-15 06:10:00 +00:00
delete_on_termination = form . getvalue ( ' aws_create_delete_on_termination ' )
floating_ip = form . getvalue ( ' aws_create_floating_net ' )
firewall = form . getvalue ( ' aws_create_firewall ' )
public_ip = form . getvalue ( ' aws_create_public_ip ' )
elif form . getvalue ( ' awseditvars ' ) :
awsvars = form . getvalue ( ' awseditvars ' )
group = form . getvalue ( ' aws_editing_group ' )
provider = form . getvalue ( ' aws_editing_provider ' )
region = form . getvalue ( ' aws_editing_regions ' )
size = form . getvalue ( ' aws_editing_size ' )
oss = form . getvalue ( ' aws_editing_oss ' )
ssh_name = form . getvalue ( ' aws_editing_ssh_name ' )
volume_size = form . getvalue ( ' aws_editing_volume_size ' )
2021-03-16 14:38:12 +00:00
volume_type = form . getvalue ( ' aws_editing_volume_type ' )
2021-02-15 06:10:00 +00:00
delete_on_termination = form . getvalue ( ' aws_editing_delete_on_termination ' )
floating_ip = form . getvalue ( ' aws_editing_floating_net ' )
firewall = form . getvalue ( ' aws_editing_firewall ' )
public_ip = form . getvalue ( ' aws_editing_public_ip ' )
aws_key , aws_secret = sql . select_aws_provider ( provider )
cmd = ' cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e " region= {} ' \
' group= {} size= {} os= {} floating_ip= {} volume_size= {} server_name= {} AWS_ACCESS_KEY= {} ' \
2021-03-16 14:38:12 +00:00
' AWS_SECRET_KEY= {} firewall= {} public_ip= {} ssh_name= {} delete_on_termination= {} volume_type= {} ' \
2021-02-15 06:10:00 +00:00
' cloud=aws " ' . format ( region , group , size , oss , floating_ip , volume_size , awsvars , aws_key , aws_secret ,
2021-03-16 14:38:12 +00:00
firewall , public_ip , ssh_name , delete_on_termination , volume_type )
2021-02-15 06:10:00 +00:00
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
print ( ' error: ' + stderr )
else :
print ( ' ok ' )
2022-03-02 20:09:39 +00:00
2021-02-15 06:10:00 +00:00
if form . getvalue ( ' dovars ' ) or form . getvalue ( ' doeditvars ' ) :
if form . getvalue ( ' dovars ' ) :
dovars = form . getvalue ( ' dovars ' )
group = form . getvalue ( ' do_create_group ' )
provider = form . getvalue ( ' do_create_provider ' )
region = form . getvalue ( ' do_create_regions ' )
size = form . getvalue ( ' do_create_size ' )
oss = form . getvalue ( ' do_create_oss ' )
ssh_name = form . getvalue ( ' do_create_ssh_name ' )
ssh_ids = form . getvalue ( ' do_create_ssh_ids ' )
backup = form . getvalue ( ' do_create_backup ' )
privet_net = form . getvalue ( ' do_create_private_net ' )
floating_ip = form . getvalue ( ' do_create_floating_net ' )
monitoring = form . getvalue ( ' do_create_monitoring ' )
firewall = form . getvalue ( ' do_create_firewall ' )
elif form . getvalue ( ' doeditvars ' ) :
dovars = form . getvalue ( ' doeditvars ' )
group = form . getvalue ( ' do_edit_group ' )
provider = form . getvalue ( ' do_edit_provider ' )
region = form . getvalue ( ' do_edit_regions ' )
size = form . getvalue ( ' do_edit_size ' )
oss = form . getvalue ( ' do_edit_oss ' )
ssh_name = form . getvalue ( ' do_edit_ssh_name ' )
ssh_ids = form . getvalue ( ' do_edit_ssh_ids ' )
backup = form . getvalue ( ' do_edit_backup ' )
privet_net = form . getvalue ( ' do_edit_private_net ' )
floating_ip = form . getvalue ( ' do_edit_floating_net ' )
monitoring = form . getvalue ( ' do_edit_monitoring ' )
firewall = form . getvalue ( ' do_edit_firewall ' )
token = sql . select_do_provider ( provider )
cmd = ' cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e " region= {} ' \
' group= {} size= {} os= {} floating_ip= {} ssh_ids= {} server_name= {} token= {} backup= {} monitoring= {} ' \
' privet_net= {} firewall= {} floating_ip= {} ssh_name= {} cloud=do " ' . format ( region , group , size , oss , floating_ip ,
ssh_ids , dovars , token , backup , monitoring ,
privet_net , firewall , floating_ip , ssh_name )
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
print ( ' error: ' + stderr )
else :
print ( cmd )
print ( output )
if form . getvalue ( ' dovalidate ' ) or form . getvalue ( ' doeditvalidate ' ) :
if form . getvalue ( ' dovalidate ' ) :
workspace = form . getvalue ( ' dovalidate ' )
group = form . getvalue ( ' do_create_group ' )
elif form . getvalue ( ' doeditvalidate ' ) :
workspace = form . getvalue ( ' doeditvalidate ' )
group = form . getvalue ( ' do_edit_group ' )
cmd = ' cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.do_module -var-file vars/ ' + workspace + ' _ ' + group + ' _do.tfvars '
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
print ( ' error: ' + stderr )
else :
print ( ' ok ' )
2022-03-02 20:09:39 +00:00
2021-02-15 06:10:00 +00:00
if form . getvalue ( ' doworkspace ' ) :
workspace = form . getvalue ( ' doworkspace ' )
group = form . getvalue ( ' do_create_group ' )
provider = form . getvalue ( ' do_create_provider ' )
region = form . getvalue ( ' do_create_regions ' )
size = form . getvalue ( ' do_create_size ' )
oss = form . getvalue ( ' do_create_oss ' )
ssh_name = form . getvalue ( ' do_create_ssh_name ' )
ssh_ids = form . getvalue ( ' do_create_ssh_ids ' )
backup = form . getvalue ( ' do_create_backup ' )
privet_net = form . getvalue ( ' do_create_private_net ' )
floating_ip = form . getvalue ( ' do_create_floating_net ' )
monitoring = form . getvalue ( ' do_create_monitoring ' )
firewall = form . getvalue ( ' do_create_firewall ' )
cmd = ' cd scripts/terraform/ && sudo terraform workspace new ' + workspace + ' _ ' + group + ' _do '
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
stderr = stderr . strip ( )
stderr = repr ( stderr )
stderr = stderr . replace ( " ' " , " " )
stderr = stderr . replace ( " \' " , " " )
sql . update_provisioning_server_status ( ' Error ' , group , workspace , provider )
sql . update_provisioning_server_error ( stderr , group , workspace , provider )
print ( ' error: ' + stderr )
else :
if sql . add_server_do ( region , size , privet_net , floating_ip , ssh_ids , ssh_name , workspace , oss , firewall , monitoring ,
backup , provider , group , ' Creating ' ) :
from jinja2 import Environment , FileSystemLoader
2021-10-26 18:07:56 +00:00
user , user_id , role , token , servers , user_services = funct . get_users_params ( )
2021-02-15 06:10:00 +00:00
new_server = sql . select_provisioned_servers ( new = workspace , group = group , type = ' do ' )
2021-03-16 14:38:12 +00:00
env = Environment ( extensions = [ " jinja2.ext.do " ] , loader = FileSystemLoader ( ' templates ' ) )
2021-02-15 06:10:00 +00:00
template = env . get_template ( ' ajax/provisioning/provisioned_servers.html ' )
template = template . render ( servers = new_server ,
groups = sql . select_groups ( ) ,
user_group = group ,
providers = sql . select_providers ( group ) ,
role = role ,
adding = 1 )
print ( template )
if form . getvalue ( ' doeditworkspace ' ) :
workspace = form . getvalue ( ' doeditworkspace ' )
group = form . getvalue ( ' do_edit_group ' )
provider = form . getvalue ( ' do_edit_provider ' )
region = form . getvalue ( ' do_edit_regions ' )
size = form . getvalue ( ' do_edit_size ' )
oss = form . getvalue ( ' do_edit_oss ' )
ssh_name = form . getvalue ( ' do_edit_ssh_name ' )
ssh_ids = form . getvalue ( ' do_edit_ssh_ids ' )
backup = form . getvalue ( ' do_edit_backup ' )
privet_net = form . getvalue ( ' do_edit_private_net ' )
floating_ip = form . getvalue ( ' do_edit_floating_net ' )
monitoring = form . getvalue ( ' do_edit_monitoring ' )
firewall = form . getvalue ( ' do_edit_firewall ' )
server_id = form . getvalue ( ' server_id ' )
if sql . update_server_do ( size , privet_net , floating_ip , ssh_ids , ssh_name , oss , firewall , monitoring , backup , provider ,
group , ' Creating ' , server_id ) :
cmd = ' cd scripts/terraform/ && sudo terraform workspace select ' + workspace + ' _ ' + group + ' _do '
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
stderr = stderr . strip ( )
stderr = repr ( stderr )
stderr = stderr . replace ( " ' " , " " )
stderr = stderr . replace ( " \' " , " " )
sql . update_provisioning_server_status ( ' Error ' , group , workspace , provider )
sql . update_provisioning_server_error ( stderr , group , workspace , provider )
print ( ' error: ' + stderr )
else :
print ( cmd )
print ( output )
if form . getvalue ( ' awsvalidate ' ) or form . getvalue ( ' awseditvalidate ' ) :
if form . getvalue ( ' awsvalidate ' ) :
workspace = form . getvalue ( ' awsvalidate ' )
group = form . getvalue ( ' aws_create_group ' )
elif form . getvalue ( ' awseditvalidate ' ) :
workspace = form . getvalue ( ' awseditvalidate ' )
group = form . getvalue ( ' aws_edit_group ' )
cmd = ' cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.aws_module -var-file vars/ ' + workspace + ' _ ' + group + ' _aws.tfvars '
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
print ( ' error: ' + stderr )
else :
print ( ' ok ' )
if form . getvalue ( ' awsworkspace ' ) :
workspace = form . getvalue ( ' awsworkspace ' )
group = form . getvalue ( ' aws_create_group ' )
provider = form . getvalue ( ' aws_create_provider ' )
region = form . getvalue ( ' aws_create_regions ' )
size = form . getvalue ( ' aws_create_size ' )
oss = form . getvalue ( ' aws_create_oss ' )
ssh_name = form . getvalue ( ' aws_create_ssh_name ' )
volume_size = form . getvalue ( ' aws_create_volume_size ' )
2021-03-16 14:38:12 +00:00
volume_type = form . getvalue ( ' aws_create_volume_type ' )
2021-02-15 06:10:00 +00:00
delete_on_termination = form . getvalue ( ' aws_create_delete_on_termination ' )
floating_ip = form . getvalue ( ' aws_create_floating_net ' )
firewall = form . getvalue ( ' aws_create_firewall ' )
public_ip = form . getvalue ( ' aws_create_public_ip ' )
cmd = ' cd scripts/terraform/ && sudo terraform workspace new ' + workspace + ' _ ' + group + ' _aws '
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
stderr = stderr . strip ( )
stderr = repr ( stderr )
stderr = stderr . replace ( " ' " , " " )
stderr = stderr . replace ( " \' " , " " )
sql . update_provisioning_server_status ( ' Error ' , group , workspace , provider )
sql . update_provisioning_server_error ( stderr , group , workspace , provider )
print ( ' error: ' + stderr )
else :
if sql . add_server_aws ( region , size , public_ip , floating_ip , volume_size , ssh_name , workspace , oss , firewall ,
2021-03-16 14:38:12 +00:00
provider , group , ' Creating ' , delete_on_termination , volume_type ) :
2021-02-15 06:10:00 +00:00
from jinja2 import Environment , FileSystemLoader
2021-10-26 18:07:56 +00:00
user , user_id , role , token , servers , user_services = funct . get_users_params ( )
2021-02-15 06:10:00 +00:00
new_server = sql . select_provisioned_servers ( new = workspace , group = group , type = ' aws ' )
2021-03-16 14:38:12 +00:00
env = Environment ( extensions = [ " jinja2.ext.do " ] , loader = FileSystemLoader ( ' templates ' ) )
2021-02-15 06:10:00 +00:00
template = env . get_template ( ' ajax/provisioning/provisioned_servers.html ' )
template = template . render ( servers = new_server ,
groups = sql . select_groups ( ) ,
user_group = group ,
providers = sql . select_providers ( group ) ,
role = role ,
adding = 1 )
print ( template )
if form . getvalue ( ' awseditworkspace ' ) :
workspace = form . getvalue ( ' awseditworkspace ' )
group = form . getvalue ( ' aws_editing_group ' )
provider = form . getvalue ( ' aws_editing_provider ' )
region = form . getvalue ( ' aws_editing_regions ' )
size = form . getvalue ( ' aws_editing_size ' )
oss = form . getvalue ( ' aws_editing_oss ' )
ssh_name = form . getvalue ( ' aws_editing_ssh_name ' )
volume_size = form . getvalue ( ' aws_editing_volume_size ' )
2021-03-16 14:38:12 +00:00
volume_type = form . getvalue ( ' aws_editing_volume_type ' )
2021-02-15 06:10:00 +00:00
delete_on_termination = form . getvalue ( ' aws_editing_delete_on_termination ' )
floating_ip = form . getvalue ( ' aws_editing_floating_net ' )
firewall = form . getvalue ( ' aws_editing_firewall ' )
public_ip = form . getvalue ( ' aws_editing_public_ip ' )
server_id = form . getvalue ( ' server_id ' )
2021-03-16 14:38:12 +00:00
if sql . update_server_aws ( region , size , public_ip , floating_ip , volume_size , ssh_name , workspace , oss , firewall ,
provider , group , ' Editing ' , server_id , delete_on_termination , volume_type ) :
2021-02-15 06:10:00 +00:00
try :
cmd = ' cd scripts/terraform/ && sudo terraform workspace select ' + workspace + ' _ ' + group + ' _aws '
output , stderr = funct . subprocess_execute ( cmd )
except Exception as e :
print ( ' error: ' + str ( e ) )
2022-03-02 20:09:39 +00:00
2021-02-15 06:10:00 +00:00
if stderr != ' ' :
stderr = stderr . strip ( )
stderr = repr ( stderr )
stderr = stderr . replace ( " ' " , " " )
stderr = stderr . replace ( " \' " , " " )
sql . update_provisioning_server_error ( stderr , group , workspace , provider )
print ( ' error: ' + stderr )
else :
print ( ' ok ' )
2021-03-16 14:38:12 +00:00
if (
form . getvalue ( ' awsprovisining ' ) or
form . getvalue ( ' awseditingprovisining ' ) or
form . getvalue ( ' doprovisining ' ) or
form . getvalue ( ' doeditprovisining ' ) or
form . getvalue ( ' gcoreprovisining ' ) or
form . getvalue ( ' gcoreeditgprovisining ' )
) :
2021-02-15 06:10:00 +00:00
funct . check_user_group ( )
if form . getvalue ( ' awsprovisining ' ) :
workspace = form . getvalue ( ' awsprovisining ' )
group = form . getvalue ( ' aws_create_group ' )
provider_id = form . getvalue ( ' aws_create_provider ' )
action = ' created '
cloud = ' aws '
state_name = ' aws_instance '
elif form . getvalue ( ' awseditingprovisining ' ) :
workspace = form . getvalue ( ' awseditingprovisining ' )
group = form . getvalue ( ' aws_edit_group ' )
provider_id = form . getvalue ( ' aws_edit_provider ' )
action = ' modified '
cloud = ' aws '
state_name = ' aws_instance '
elif form . getvalue ( ' doprovisining ' ) :
workspace = form . getvalue ( ' doprovisining ' )
group = form . getvalue ( ' do_create_group ' )
provider_id = form . getvalue ( ' do_create_provider ' )
action = ' created '
cloud = ' do '
state_name = ' digitalocean_droplet '
elif form . getvalue ( ' doeditprovisining ' ) :
workspace = form . getvalue ( ' doeditprovisining ' )
group = form . getvalue ( ' do_edit_group ' )
provider_id = form . getvalue ( ' do_edit_provider ' )
action = ' modified '
cloud = ' do '
state_name = ' digitalocean_droplet '
2021-03-16 14:38:12 +00:00
elif form . getvalue ( ' gcoreprovisining ' ) :
workspace = form . getvalue ( ' gcoreprovisining ' )
group = form . getvalue ( ' gcore_create_group ' )
provider_id = form . getvalue ( ' gcore_create_provider ' )
action = ' created '
cloud = ' gcore '
state_name = ' gcore_instance '
elif form . getvalue ( ' gcoreeditgprovisining ' ) :
workspace = form . getvalue ( ' gcoreeditgprovisining ' )
group = form . getvalue ( ' gcore_edit_group ' )
provider_id = form . getvalue ( ' gcore_edit_provider ' )
action = ' modified '
cloud = ' gcore '
state_name = ' gcore_instance '
2021-02-15 06:10:00 +00:00
tfvars = workspace + ' _ ' + group + ' _ ' + cloud + ' .tfvars '
cmd = ' cd scripts/terraform/ && sudo terraform apply -auto-approve -no-color -input=false -target=module. ' + cloud + ' _module -var-file vars/ ' + tfvars
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
stderr = stderr . strip ( )
stderr = repr ( stderr )
stderr = stderr . replace ( " ' " , " " )
stderr = stderr . replace ( " \' " , " " )
sql . update_provisioning_server_status ( ' Error ' , group , workspace , provider_id )
sql . update_provisioning_server_error ( stderr , group , workspace , provider_id )
print ( ' error: ' + stderr )
else :
if cloud == ' aws ' :
cmd = ' cd scripts/terraform/ && sudo terraform state show module.aws_module.aws_eip.floating_ip[0]|grep -Eo " [0-9] { 1,3} \ .[0-9] { 1,3} \ .[0-9] { 1,3} \ .[0-9] { 1,3} " '
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
cmd = ' cd scripts/terraform/ && sudo terraform state show module. ' + cloud + ' _module. ' + state_name + ' .hapwi|grep -Eo " [0-9] { 1,3} \ .[0-9] { 1,3} \ .[0-9] { 1,3} \ .[0-9] { 1,3} " '
else :
cmd = ' cd scripts/terraform/ && sudo terraform state show module. ' + cloud + ' _module. ' + state_name + ' .hapwi|grep -Eo " [0-9] { 1,3} \ .[0-9] { 1,3} \ .[0-9] { 1,3} \ .[0-9] { 1,3} " '
output , stderr = funct . subprocess_execute ( cmd )
ips = ' '
for ip in output :
ips + = ip
ips + = ' '
print ( ips )
sql . update_provisioning_server_status ( ' Created ' , group , workspace , provider_id , update_ip = ips )
2021-03-16 14:38:12 +00:00
if cloud == ' gcore ' :
cmd = ' cd scripts/terraform/ && sudo terraform state show module.gcore_module.gcore_instance.hapwi|grep " name " |grep -v -e " _name \ |name_ " |head -1 |awk -F " \\ \" " \' { print $2} \' '
output , stderr = funct . subprocess_execute ( cmd )
print ( ' : ' + output [ 0 ] )
sql . update_provisioning_server_gcore_name ( workspace , output [ 0 ] , group , provider_id )
2021-02-15 06:10:00 +00:00
funct . logging ( ' localhost ' , ' Server ' + workspace + ' has been ' + action , provisioning = 1 )
if form . getvalue ( ' provisiningdestroyserver ' ) :
funct . check_user_group ( )
server_id = form . getvalue ( ' provisiningdestroyserver ' )
workspace = form . getvalue ( ' servername ' )
group = form . getvalue ( ' group ' )
cloud_type = form . getvalue ( ' type ' )
provider_id = form . getvalue ( ' provider_id ' )
tf_workspace = workspace + ' _ ' + group + ' _ ' + cloud_type
2021-03-22 06:33:28 +00:00
cmd = ' cd scripts/terraform/ && sudo terraform init -upgrade -no-color && sudo terraform workspace select ' + tf_workspace
2021-02-15 06:10:00 +00:00
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
stderr = stderr . strip ( )
stderr = repr ( stderr )
stderr = stderr . replace ( " ' " , " " )
stderr = stderr . replace ( " \' " , " " )
sql . update_provisioning_server_status ( ' Error ' , group , workspace , provider_id )
sql . update_provisioning_server_error ( stderr , group , workspace , provider_id )
print ( ' error: ' + stderr )
else :
cmd = ' cd scripts/terraform/ && sudo terraform destroy -auto-approve -no-color -target=module. ' + cloud_type + ' _module -var-file vars/ ' + tf_workspace + ' .tfvars '
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
print ( ' error: ' + stderr )
else :
cmd = ' cd scripts/terraform/ && sudo terraform workspace select default && sudo terraform workspace delete -force ' + tf_workspace
output , stderr = funct . subprocess_execute ( cmd )
print ( ' ok ' )
funct . logging ( ' localhost ' , ' Server has been destroyed ' , provisioning = 1 )
sql . delete_provisioned_servers ( server_id )
2021-03-16 14:38:12 +00:00
if form . getvalue ( ' gcorevars ' ) or form . getvalue ( ' gcoreeditvars ' ) :
if form . getvalue ( ' gcorevars ' ) :
gcorevars = form . getvalue ( ' gcorevars ' )
group = form . getvalue ( ' gcore_create_group ' )
provider = form . getvalue ( ' gcore_create_provider ' )
region = form . getvalue ( ' gcore_create_regions ' )
project = form . getvalue ( ' gcore_create_project ' )
size = form . getvalue ( ' gcore_create_size ' )
oss = form . getvalue ( ' gcore_create_oss ' )
ssh_name = form . getvalue ( ' gcore_create_ssh_name ' )
volume_size = form . getvalue ( ' gcore_create_volume_size ' )
volume_type = form . getvalue ( ' gcore_create_volume_type ' )
delete_on_termination = form . getvalue ( ' gcore_create_delete_on_termination ' )
network_name = form . getvalue ( ' gcore_create_network_name ' )
firewall = form . getvalue ( ' gcore_create_firewall ' )
network_type = form . getvalue ( ' gcore_create_network_type ' )
elif form . getvalue ( ' gcoreeditvars ' ) :
gcorevars = form . getvalue ( ' gcoreeditvars ' )
group = form . getvalue ( ' gcore_edit_group ' )
provider = form . getvalue ( ' gcore_edit_provider ' )
region = form . getvalue ( ' gcore_edit_regions ' )
project = form . getvalue ( ' gcore_edit_project ' )
size = form . getvalue ( ' gcore_edit_size ' )
oss = form . getvalue ( ' gcore_edit_oss ' )
ssh_name = form . getvalue ( ' gcore_edit_ssh_name ' )
volume_size = form . getvalue ( ' gcore_edit_volume_size ' )
volume_type = form . getvalue ( ' gcore_edit_volume_type ' )
delete_on_termination = form . getvalue ( ' gcore_edit_delete_on_termination ' )
network_name = form . getvalue ( ' gcore_edit_network_name ' )
firewall = form . getvalue ( ' gcore_edit_firewall ' )
network_type = form . getvalue ( ' gcore_edit_network_type ' )
gcore_user , gcore_pass = sql . select_gcore_provider ( provider )
cmd = ' cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e " region= {} ' \
' group= {} size= {} os= {} network_name= {} volume_size= {} server_name= {} username= {} ' \
' pass= {} firewall= {} network_type= {} ssh_name= {} delete_on_termination= {} project= {} volume_type= {} ' \
' cloud=gcore " ' . format ( region , group , size , oss , network_name , volume_size , gcorevars , gcore_user , gcore_pass ,
firewall , network_type , ssh_name , delete_on_termination , project , volume_type )
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
print ( ' error: ' + stderr )
else :
print ( ' ok ' )
if form . getvalue ( ' gcorevalidate ' ) or form . getvalue ( ' gcoreeditvalidate ' ) :
if form . getvalue ( ' gcorevalidate ' ) :
workspace = form . getvalue ( ' gcorevalidate ' )
group = form . getvalue ( ' gcore_create_group ' )
elif form . getvalue ( ' gcoreeditvalidate ' ) :
workspace = form . getvalue ( ' gcoreeditvalidate ' )
group = form . getvalue ( ' gcore_edit_group ' )
cmd = ' cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.gcore_module -var-file vars/ ' + workspace + ' _ ' + group + ' _gcore.tfvars '
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
print ( ' error: ' + stderr )
else :
print ( ' ok ' )
if form . getvalue ( ' gcoreworkspace ' ) :
workspace = form . getvalue ( ' gcoreworkspace ' )
group = form . getvalue ( ' gcore_create_group ' )
provider = form . getvalue ( ' gcore_create_provider ' )
region = form . getvalue ( ' gcore_create_regions ' )
project = form . getvalue ( ' gcore_create_project ' )
size = form . getvalue ( ' gcore_create_size ' )
oss = form . getvalue ( ' gcore_create_oss ' )
ssh_name = form . getvalue ( ' gcore_create_ssh_name ' )
volume_size = form . getvalue ( ' gcore_create_volume_size ' )
volume_type = form . getvalue ( ' gcore_create_volume_type ' )
delete_on_termination = form . getvalue ( ' gcore_create_delete_on_termination ' )
network_type = form . getvalue ( ' gcore_create_network_type ' )
firewall = form . getvalue ( ' gcore_create_firewall ' )
network_name = form . getvalue ( ' gcore_create_network_name ' )
cmd = ' cd scripts/terraform/ && sudo terraform workspace new ' + workspace + ' _ ' + group + ' _gcore '
output , stderr = funct . subprocess_execute ( cmd )
if stderr != ' ' :
stderr = stderr . strip ( )
stderr = repr ( stderr )
stderr = stderr . replace ( " ' " , " " )
stderr = stderr . replace ( " \' " , " " )
sql . update_provisioning_server_status ( ' Error ' , group , workspace , provider )
sql . update_provisioning_server_error ( stderr , group , workspace , provider )
print ( ' error: ' + stderr )
else :
if sql . add_server_gcore ( project , region , size , network_type , network_name , volume_size , ssh_name , workspace , oss , firewall ,
provider , group , ' Creating ' , delete_on_termination , volume_type ) :
from jinja2 import Environment , FileSystemLoader
2021-10-26 18:07:56 +00:00
user , user_id , role , token , servers , user_services = funct . get_users_params ( )
2021-03-16 14:38:12 +00:00
new_server = sql . select_provisioned_servers ( new = workspace , group = group , type = ' gcore ' )
env = Environment ( extensions = [ " jinja2.ext.do " ] , loader = FileSystemLoader ( ' templates ' ) )
template = env . get_template ( ' ajax/provisioning/provisioned_servers.html ' )
template = template . render ( servers = new_server ,
groups = sql . select_groups ( ) ,
user_group = group ,
providers = sql . select_providers ( group ) ,
role = role ,
adding = 1 )
print ( template )
if form . getvalue ( ' gcoreeditworkspace ' ) :
workspace = form . getvalue ( ' gcoreeditworkspace ' )
group = form . getvalue ( ' gcore_edit_group ' )
provider = form . getvalue ( ' gcore_edit_provider ' )
region = form . getvalue ( ' gcore_edit_regions ' )
project = form . getvalue ( ' gcore_edit_project ' )
size = form . getvalue ( ' gcore_edit_size ' )
oss = form . getvalue ( ' gcore_edit_oss ' )
ssh_name = form . getvalue ( ' gcore_edit_ssh_name ' )
volume_size = form . getvalue ( ' gcore_edit_volume_size ' )
volume_type = form . getvalue ( ' gcore_edit_volume_type ' )
delete_on_termination = form . getvalue ( ' gcore_edit_delete_on_termination ' )
network_type = form . getvalue ( ' gcore_edit_network_type ' )
firewall = form . getvalue ( ' gcore_edit_firewall ' )
network_name = form . getvalue ( ' gcore_edit_network_name ' )
server_id = form . getvalue ( ' server_id ' )
if sql . update_server_gcore ( region , size , network_type , network_name , volume_size , ssh_name , workspace , oss , firewall ,
provider , group , ' Editing ' , server_id , delete_on_termination , volume_type , project ) :
try :
cmd = ' cd scripts/terraform/ && sudo terraform workspace select ' + workspace + ' _ ' + group + ' _gcore '
output , stderr = funct . subprocess_execute ( cmd )
except Exception as e :
print ( ' error: ' + str ( e ) )
if stderr != ' ' :
stderr = stderr . strip ( )
stderr = repr ( stderr )
stderr = stderr . replace ( " ' " , " " )
stderr = stderr . replace ( " \' " , " " )
sql . update_provisioning_server_error ( stderr , group , workspace , provider )
print ( ' error: ' + stderr )
else :
print ( ' ok ' )
2021-02-15 06:10:00 +00:00
if form . getvalue ( ' editAwsServer ' ) :
funct . check_user_group ( )
server_id = form . getvalue ( ' editAwsServer ' )
user_group = form . getvalue ( ' editAwsGroup ' )
from jinja2 import Environment , FileSystemLoader
2021-03-16 14:38:12 +00:00
env = Environment ( extensions = [ " jinja2.ext.do " ] , loader = FileSystemLoader ( ' templates ' ) )
2021-02-15 06:10:00 +00:00
template = env . get_template ( ' ajax/provisioning/aws_edit_dialog.html ' )
2021-03-16 14:38:12 +00:00
template = template . render ( server = sql . select_aws_server ( server_id = server_id ) , providers = sql . select_providers ( int ( user_group ) ) )
print ( template )
if form . getvalue ( ' editGcoreServer ' ) :
funct . check_user_group ( )
server_id = form . getvalue ( ' editGcoreServer ' )
user_group = form . getvalue ( ' editGcoreGroup ' )
from jinja2 import Environment , FileSystemLoader
env = Environment ( extensions = [ " jinja2.ext.do " ] , loader = FileSystemLoader ( ' templates ' ) )
template = env . get_template ( ' ajax/provisioning/gcore_edit_dialog.html ' )
template = template . render ( server = sql . select_gcore_server ( server_id = server_id ) , providers = sql . select_providers ( int ( user_group ) ) )
2021-02-15 06:10:00 +00:00
print ( template )
if form . getvalue ( ' editDoServer ' ) :
funct . check_user_group ( )
server_id = form . getvalue ( ' editDoServer ' )
user_group = form . getvalue ( ' editDoGroup ' )
from jinja2 import Environment , FileSystemLoader
2021-03-16 14:38:12 +00:00
env = Environment ( extensions = [ " jinja2.ext.do " ] , loader = FileSystemLoader ( ' templates ' ) )
2021-02-15 06:10:00 +00:00
template = env . get_template ( ' ajax/provisioning/do_edit_dialog.html ' )
2021-03-16 14:38:12 +00:00
template = template . render ( server = sql . select_do_server ( server_id = server_id ) , providers = sql . select_providers ( int ( user_group ) ) )
2021-02-15 06:10:00 +00:00
print ( template )
if form . getvalue ( ' edit_do_provider ' ) :
funct . check_user_group ( )
provider_id = form . getvalue ( ' edit_do_provider ' )
new_name = form . getvalue ( ' edit_do_provider_name ' )
new_token = form . getvalue ( ' edit_do_provider_token ' )
if sql . update_do_provider ( new_name , new_token , provider_id ) :
print ( ' ok ' )
funct . logging ( ' localhost ' , ' Provider has been renamed. New name is ' + new_name , provisioning = 1 )
2021-03-16 14:38:12 +00:00
if form . getvalue ( ' edit_gcore_provider ' ) :
funct . check_user_group ( )
provider_id = form . getvalue ( ' edit_gcore_provider ' )
new_name = form . getvalue ( ' edit_gcore_provider_name ' )
new_user = form . getvalue ( ' edit_gcore_provider_user ' )
new_pass = form . getvalue ( ' edit_gcore_provider_pass ' )
if sql . update_gcore_provider ( new_name , new_user , new_pass , provider_id ) :
print ( ' ok ' )
funct . logging ( ' localhost ' , ' Provider has been renamed. New name is ' + new_name , provisioning = 1 )
2021-02-15 06:10:00 +00:00
if form . getvalue ( ' edit_aws_provider ' ) :
funct . check_user_group ( )
provider_id = form . getvalue ( ' edit_aws_provider ' )
new_name = form . getvalue ( ' edit_aws_provider_name ' )
new_key = form . getvalue ( ' edit_aws_provider_key ' )
new_secret = form . getvalue ( ' edit_aws_provider_secret ' )
if sql . update_aws_provider ( new_name , new_key , new_secret , provider_id ) :
print ( ' ok ' )
funct . logging ( ' localhost ' , ' Provider has been renamed. New name is ' + new_name , provisioning = 1 )
2021-02-20 07:47:33 +00:00
2021-02-23 04:50:23 +00:00
if form . getvalue ( ' loadservices ' ) :
2021-02-20 07:47:33 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates ' ) )
2021-02-23 04:50:23 +00:00
template = env . get_template ( ' ajax/load_services.html ' )
services = funct . get_services_status ( )
2021-02-20 07:47:33 +00:00
2021-02-23 04:50:23 +00:00
template = template . render ( services = services )
print ( template )
if form . getvalue ( ' loadchecker ' ) :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates ' ) )
template = env . get_template ( ' ajax/load_telegram.html ' )
services = funct . get_services_status ( )
groups = sql . select_groups ( )
page = form . getvalue ( ' page ' )
2022-04-29 10:28:48 +00:00
try :
user_status , user_plan = funct . return_user_status ( )
except Exception as e :
user_status , user_plan = 0 , 0
funct . logging ( ' localhost ' , ' Cannot get a user plan: ' + str ( e ) , haproxywi = 1 )
if user_status :
if page == ' servers.py ' :
user_group = funct . get_user_group ( id = 1 )
telegrams = sql . get_user_telegram_by_group ( user_group )
slacks = sql . get_user_slack_by_group ( user_group )
else :
telegrams = sql . select_telegram ( )
slacks = sql . select_slack ( )
2021-02-23 04:50:23 +00:00
else :
2022-04-29 10:28:48 +00:00
telegrams = ' '
slacks = ' '
2021-02-23 04:50:23 +00:00
template = template . render ( services = services ,
telegrams = telegrams ,
groups = groups ,
2021-04-17 17:38:08 +00:00
slacks = slacks ,
2022-04-29 10:28:48 +00:00
user_status = user_status ,
user_plan = user_plan ,
2021-02-23 04:50:23 +00:00
page = page )
print ( template )
2021-02-25 04:43:29 +00:00
if form . getvalue ( ' load_update_hapwi ' ) :
2021-02-23 04:50:23 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates ' ) )
template = env . get_template ( ' ajax/load_updatehapwi.html ' )
versions = funct . versions ( )
checker_ver = funct . check_new_version ( service = ' checker ' )
smon_ver = funct . check_new_version ( service = ' smon ' )
metrics_ver = funct . check_new_version ( service = ' metrics ' )
keep_ver = funct . check_new_version ( service = ' keep ' )
2021-04-17 17:38:08 +00:00
portscanner_ver = funct . check_new_version ( service = ' portscanner ' )
2022-03-15 09:51:03 +00:00
socket_ver = funct . check_new_version ( service = ' socket ' )
2021-02-23 04:50:23 +00:00
services = funct . get_services_status ( )
2021-02-20 07:47:33 +00:00
template = template . render ( services = services ,
versions = versions ,
checker_ver = checker_ver ,
smon_ver = smon_ver ,
metrics_ver = metrics_ver ,
2021-04-17 17:38:08 +00:00
portscanner_ver = portscanner_ver ,
2022-03-15 09:51:03 +00:00
socket_ver = socket_ver ,
2021-02-23 04:50:23 +00:00
keep_ver = keep_ver )
2021-02-20 07:47:33 +00:00
print ( template )
if form . getvalue ( ' loadopenvpn ' ) :
2021-09-02 08:07:24 +00:00
import distro
2021-02-20 07:47:33 +00:00
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates ' ) )
template = env . get_template ( ' ajax/load_openvpn.html ' )
openvpn_configs = ' '
openvpn_sess = ' '
openvpn = ' '
2021-12-04 08:17:33 +00:00
if distro . id ( ) == ' ubuntu ' :
stdout , stderr = funct . subprocess_execute ( " apt show openvpn3 2>&1|grep E: " )
elif distro . id ( ) == ' centos ' or distro . id ( ) == ' rhel ' :
2021-02-20 07:47:33 +00:00
stdout , stderr = funct . subprocess_execute ( " rpm --query openvpn3-client " )
2021-12-04 08:17:33 +00:00
if (
( stdout [ 0 ] != ' package openvpn3-client is not installed ' and stderr != ' /bin/sh: rpm: command not found ' ) and
stdout [ 0 ] != ' E: No packages found '
) :
cmd = " sudo openvpn3 configs-list |grep -E ' ovpn|(^|[^0-9])[0-9] {4} ($|[^0-9]) ' |grep -v net|awk -F \" \" ' { print $1} ' |awk ' ORS=NR % 2? \" \" : \" \\ n \" ' "
openvpn_configs , stderr = funct . subprocess_execute ( cmd )
cmd = " sudo openvpn3 sessions-list|grep -E ' Config|Status ' |awk -F \" : \" ' { print $2} ' |awk ' ORS=NR % 2? \" \" : \" \\ n \" ' | sed ' s/^ //g ' "
openvpn_sess , stderr = funct . subprocess_execute ( cmd )
openvpn = stdout [ 0 ]
2021-02-20 07:47:33 +00:00
template = template . render ( openvpn = openvpn ,
openvpn_sess = openvpn_sess ,
openvpn_configs = openvpn_configs )
print ( template )
2021-03-17 17:19:06 +00:00
if form . getvalue ( ' check_telegram ' ) :
telegram_id = form . getvalue ( ' check_telegram ' )
2021-06-02 07:28:07 +00:00
mess = ' Test message from Roxy-WI '
2021-03-31 13:59:03 +00:00
funct . telegram_send_mess ( mess , telegram_channel_id = telegram_id )
2021-04-17 17:38:08 +00:00
if form . getvalue ( ' check_slack ' ) :
slack_id = form . getvalue ( ' check_slack ' )
2021-06-02 07:28:07 +00:00
mess = ' Test message from Roxy-WI '
2021-04-17 17:38:08 +00:00
funct . slack_send_mess ( mess , slack_channel_id = slack_id )
2021-08-02 08:19:22 +00:00
if form . getvalue ( ' getoption ' ) :
group = form . getvalue ( ' getoption ' )
term = form . getvalue ( ' term ' )
options = sql . select_options ( group = group , term = term )
a = { }
v = 0
for i in options :
a [ v ] = i . options
v = v + 1
import json
print ( json . dumps ( a ) )
if form . getvalue ( ' newtoption ' ) :
option = form . getvalue ( ' newtoption ' )
group = form . getvalue ( ' newoptiongroup ' )
if option is None or group is None :
print ( error_mess )
else :
if sql . insert_new_option ( option , group ) :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' /new_option.html ' )
template = template . render ( options = sql . select_options ( option = option ) )
print ( template )
if form . getvalue ( ' updateoption ' ) is not None :
option = form . getvalue ( ' updateoption ' )
option_id = form . getvalue ( ' id ' )
if option is None or option_id is None :
print ( error_mess )
else :
sql . update_options ( option , option_id )
if form . getvalue ( ' optiondel ' ) is not None :
if sql . delete_option ( form . getvalue ( ' optiondel ' ) ) :
print ( " Ok " )
if form . getvalue ( ' getsavedserver ' ) :
group = form . getvalue ( ' getsavedserver ' )
term = form . getvalue ( ' term ' )
servers = sql . select_saved_servers ( group = group , term = term )
a = { }
v = 0
for i in servers :
a [ v ] = { }
a [ v ] [ ' value ' ] = { }
a [ v ] [ ' desc ' ] = { }
a [ v ] [ ' value ' ] = i . server
a [ v ] [ ' desc ' ] = i . description
v = v + 1
import json
print ( json . dumps ( a ) )
if form . getvalue ( ' newsavedserver ' ) :
savedserver = form . getvalue ( ' newsavedserver ' )
description = form . getvalue ( ' newsavedserverdesc ' )
group = form . getvalue ( ' newsavedservergroup ' )
if savedserver is None or group is None :
print ( error_mess )
else :
if sql . insert_new_savedserver ( savedserver , description , group ) :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' /new_saved_servers.html ' )
template = template . render ( server = sql . select_saved_servers ( server = savedserver ) )
print ( template )
if form . getvalue ( ' updatesavedserver ' ) is not None :
savedserver = form . getvalue ( ' updatesavedserver ' )
description = form . getvalue ( ' description ' )
savedserver_id = form . getvalue ( ' id ' )
if savedserver is None or savedserver_id is None :
print ( error_mess )
else :
sql . update_savedserver ( savedserver , description , savedserver_id )
if form . getvalue ( ' savedserverdel ' ) is not None :
if sql . delete_savedserver ( form . getvalue ( ' savedserverdel ' ) ) :
print ( " Ok " )
2021-09-15 05:40:51 +00:00
if form . getvalue ( ' show_users_ovw ' ) is not None :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ajax ' ) , autoescape = True )
template = env . get_template ( ' /show_users_ovw.html ' )
user , user_id , role , token , servers , user_services = funct . get_users_params ( )
users_groups = sql . select_user_groups_with_names ( 1 , all = 1 )
user_group = funct . get_user_group ( id = 1 )
if ( role == 2 or role == 3 ) and int ( user_group ) != 1 :
users = sql . select_users ( group = user_group )
else :
users = sql . select_users ( )
template = template . render ( users = users , users_groups = users_groups )
print ( template )
if form . getvalue ( ' serverSettings ' ) is not None :
server_id = form . getvalue ( ' serverSettings ' )
service = form . getvalue ( ' serverSettingsService ' )
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True )
template = env . get_template ( ' ajax/show_service_settings.html ' )
template = template . render ( settings = sql . select_service_settings ( server_id , service ) , service = service )
print ( template )
if form . getvalue ( ' serverSettingsSave ' ) is not None :
server_id = form . getvalue ( ' serverSettingsSave ' )
service = form . getvalue ( ' serverSettingsService ' )
haproxy_enterprise = form . getvalue ( ' serverSettingsEnterprise ' )
2021-10-03 18:46:19 +00:00
haproxy_dockerized = form . getvalue ( ' serverSettingshaproxy_dockerized ' )
nginx_dockerized = form . getvalue ( ' serverSettingsnginx_dockerized ' )
2022-04-15 09:49:00 +00:00
apache_dockerized = form . getvalue ( ' serverSettingsapache_dockerized ' )
2021-10-03 18:46:19 +00:00
server_ip = sql . select_server_ip_by_id ( server_id )
2021-09-15 05:40:51 +00:00
if service == ' haproxy ' :
if sql . insert_or_update_service_setting ( server_id , service , ' haproxy_enterprise ' , haproxy_enterprise ) :
print ( ' Ok ' )
2021-10-03 18:46:19 +00:00
if haproxy_enterprise == ' 1 ' :
funct . logging ( server_ip , ' Service has been flagged as an Enterprise version ' , haproxywi = 1 , login = 1 ,
keep_history = 1 , service = service )
else :
funct . logging ( server_ip , ' Service has been flagged as a community version ' , haproxywi = 1 , login = 1 ,
keep_history = 1 , service = service )
if sql . insert_or_update_service_setting ( server_id , service , ' dockerized ' , haproxy_dockerized ) :
print ( ' Ok ' )
if haproxy_dockerized == ' 1 ' :
funct . logging ( server_ip , ' Service has been flagged as a dockerized ' , haproxywi = 1 , login = 1 ,
keep_history = 1 , service = service )
else :
funct . logging ( server_ip , ' Service has been flagged as a system service ' , haproxywi = 1 , login = 1 ,
keep_history = 1 , service = service )
if service == ' nginx ' :
if sql . insert_or_update_service_setting ( server_id , service , ' dockerized ' , nginx_dockerized ) :
print ( ' Ok ' )
if nginx_dockerized :
funct . logging ( server_ip , ' Service has been flagged as a dockerized ' , haproxywi = 1 , login = 1 ,
keep_history = 1 , service = service )
else :
funct . logging ( server_ip , ' Service has been flagged as a system service ' , haproxywi = 1 , login = 1 ,
keep_history = 1 , service = service )
2021-10-17 05:57:51 +00:00
2022-04-15 09:49:00 +00:00
if service == ' apache ' :
if sql . insert_or_update_service_setting ( server_id , service , ' dockerized ' , apache_dockerized ) :
print ( ' Ok ' )
if apache_dockerized :
funct . logging ( server_ip , ' Service has been flagged as a dockerized ' , haproxywi = 1 , login = 1 ,
keep_history = 1 , service = service )
else :
funct . logging ( server_ip , ' Service has been flagged as a system service ' , haproxywi = 1 , login = 1 ,
keep_history = 1 , service = service )
2021-10-17 05:57:51 +00:00
if act == ' showListOfVersion ' :
service = form . getvalue ( ' service ' )
configver = form . getvalue ( ' configver ' )
for_delver = form . getvalue ( ' for_delver ' )
style = form . getvalue ( ' style ' )
2022-04-06 12:32:04 +00:00
users = sql . select_users ( )
2021-10-17 05:57:51 +00:00
if service == ' keepalived ' :
configs_dir = funct . get_config_var ( ' configs ' , ' kp_save_configs_dir ' )
files = funct . get_files ( dir = configs_dir , format = ' conf ' )
configs = sql . select_config_version ( serv , service )
action = ' versions.py?service=keepalived '
elif service == ' nginx ' :
configs_dir = funct . get_config_var ( ' configs ' , ' nginx_save_configs_dir ' )
files = funct . get_files ( dir = configs_dir , format = ' conf ' )
configs = sql . select_config_version ( serv , service )
action = ' versions.py?service=nginx '
2022-04-15 09:49:00 +00:00
elif service == ' apache ' :
configs_dir = funct . get_config_var ( ' configs ' , ' apache_save_configs_dir ' )
files = funct . get_files ( dir = configs_dir , format = ' conf ' )
configs = sql . select_config_version ( serv , service )
action = ' versions.py?service=apache '
2021-10-17 05:57:51 +00:00
else :
service = ' haproxy '
files = funct . get_files ( )
configs = sql . select_config_version ( serv , service )
action = " versions.py "
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True ,
extensions = [ " jinja2.ext.loopcontrols " , " jinja2.ext.do " ] )
template = env . get_template ( ' ajax/show_list_version.html ' )
template = template . render ( serv = serv ,
service = service ,
action = action ,
return_files = files ,
configver = configver ,
for_delver = for_delver ,
configs = configs ,
2022-04-06 12:32:04 +00:00
users = users ,
2021-10-17 05:57:51 +00:00
style = style )
2021-12-03 10:39:15 +00:00
print ( template )
if act == ' getSystemInfo ' :
server_ip = form . getvalue ( ' server_ip ' )
server_ip = funct . is_ip_or_dns ( server_ip )
server_id = form . getvalue ( ' server_id ' )
if server_ip == ' ' :
print ( ' error: IP or DNS name is not valid ' )
sys . exit ( )
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True ,
extensions = [ " jinja2.ext.loopcontrols " , " jinja2.ext.do " ] )
env . globals [ ' string_to_dict ' ] = funct . string_to_dict
template = env . get_template ( ' ajax/show_system_info.html ' )
if sql . is_system_info ( server_id ) :
if funct . get_system_info ( server_ip ) :
system_info = sql . select_one_system_info ( server_id )
template = template . render ( system_info = system_info , server_ip = server_ip , server_id = server_id )
print ( template )
else :
print ( ' error: Cannot update server info ' )
else :
system_info = sql . select_one_system_info ( server_id )
template = template . render ( system_info = system_info , server_ip = server_ip , server_id = server_id )
print ( template )
if act == ' updateSystemInfo ' :
server_ip = form . getvalue ( ' server_ip ' )
server_ip = funct . is_ip_or_dns ( server_ip )
server_id = form . getvalue ( ' server_id ' )
if server_ip == ' ' :
print ( ' error: IP or DNS name is not valid ' )
sys . exit ( )
sql . delete_system_info ( server_id )
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True ,
extensions = [ " jinja2.ext.loopcontrols " , " jinja2.ext.do " ] )
env . globals [ ' string_to_dict ' ] = funct . string_to_dict
template = env . get_template ( ' ajax/show_system_info.html ' )
if funct . get_system_info ( server_ip ) :
system_info = sql . select_one_system_info ( server_id )
template = template . render ( system_info = system_info , server_ip = server_ip , server_id = server_id )
print ( template )
else :
print ( ' error: Cannot update server info ' )
2022-03-02 20:09:39 +00:00
if act == ' findInConfigs ' :
server_ip = serv
server_ip = funct . is_ip_or_dns ( server_ip )
finding_words = form . getvalue ( ' words ' )
service = form . getvalue ( ' service ' )
log_path = sql . get_setting ( service + ' _dir ' )
log_path = funct . return_nice_path ( log_path )
2022-04-15 09:49:00 +00:00
commands = [ ' sudo grep " %s " %s */*.conf -C 2 -Rn ' % ( finding_words , log_path ) ]
2022-03-02 20:09:39 +00:00
return_find = funct . ssh_command ( server_ip , commands , raw = ' 1 ' )
return_find = funct . show_finding_in_config ( return_find , grep = finding_words )
if ' error: ' in return_find :
print ( return_find )
sys . exit ( )
print ( return_find )
2022-04-15 09:49:00 +00:00
if act == ' check_service ' :
import http . cookies
cookie = http . cookies . SimpleCookie ( os . environ . get ( " HTTP_COOKIE " ) )
user_uuid = cookie . get ( ' uuid ' )
user_id = sql . get_user_id_by_uuid ( user_uuid . value )
user_services = sql . select_user_services ( user_id )
server_id = form . getvalue ( ' server_id ' )
service = form . getvalue ( ' service ' )
if ' 1 ' in user_services :
if service == ' haproxy ' :
haproxy_sock_port = sql . get_setting ( ' haproxy_sock_port ' )
cmd = ' echo " show info " |nc %s %s -w 1 -v|grep Name ' % ( serv , haproxy_sock_port )
out = funct . subprocess_execute ( cmd )
for k in out [ 0 ] :
if " Name " in k :
print ( ' up ' )
break
else :
print ( ' down ' )
if ' 2 ' in user_services :
if service == ' nginx ' :
import socket
from contextlib import closing
nginx_stats_port = sql . get_setting ( ' nginx_stats_port ' )
with closing ( socket . socket ( socket . AF_INET , socket . SOCK_STREAM ) ) as sock :
sock . settimeout ( 5 )
try :
if sock . connect_ex ( ( serv , nginx_stats_port ) ) == 0 :
print ( ' up ' )
else :
print ( ' down ' )
except Exception :
print ( ' down ' )
2022-05-03 07:55:16 +00:00
if ' 4 ' in user_services :
if service == ' apache ' :
import socket
from contextlib import closing
apache_stats_port = sql . get_setting ( ' apache_stats_port ' )
with closing ( socket . socket ( socket . AF_INET , socket . SOCK_STREAM ) ) as sock :
sock . settimeout ( 5 )
try :
if sock . connect_ex ( ( serv , apache_stats_port ) ) == 0 :
print ( ' up ' )
else :
print ( ' down ' )
except Exception as e :
print ( ' down ' + str ( e ) )
2022-04-24 07:08:45 +00:00
if form . getvalue ( ' show_sub_ovw ' ) :
from jinja2 import Environment , FileSystemLoader
env = Environment ( loader = FileSystemLoader ( ' templates/ ' ) , autoescape = True )
template = env . get_template ( ' ajax/show_sub_ovw.html ' )
template = template . render ( sub = sql . select_user_all ( ) )
2022-04-27 18:10:26 +00:00
print ( template )