Pavel Loginov 2020-01-19 02:50:43 +03:00
parent 9062c3a083
commit d9de291842
12 changed files with 587 additions and 550 deletions

View File

@ -147,7 +147,7 @@ if login is not None and password is not None:
for users in USERS: for users in USERS:
if users[7] == 0: if users[7] == 0:
print("Content-type: text/html\n") print("Content-type: text/html\n")
print('<center><div class="alert alert-danger">Your login is disabled</div><br /><br />') print('Your login is disabled')
sys.exit() sys.exit()
if users[6] == 1: if users[6] == 1:
if login in users[1]: if login in users[1]:

View File

@ -48,32 +48,6 @@ if form.getvalue('getcert') is not None and serv is not None:
except: except:
print('<div class="alert alert-danger" style="margin:0">Can not connect to the server</div>') print('<div class="alert alert-danger" style="margin:0">Can not connect to the server</div>')
if form.getvalue('ssh_cert'):
name = form.getvalue('name')
if not os.path.exists(os.getcwd()+'/keys/'):
os.makedirs(os.getcwd()+'/keys/')
ssh_keys = os.path.dirname(os.getcwd())+'/keys/'+name+'.pem'
try:
with open(ssh_keys, "w") as conf:
conf.write(form.getvalue('ssh_cert'))
except IOError:
print('<div class="alert alert-danger">Can\'t save ssh keys file. Check ssh keys path in config</div>')
else:
print('<div class="alert alert-success">Ssh key was save into: %s </div>' % ssh_keys)
try:
cmd = 'chmod 600 %s' % ssh_keys
funct.subprocess_execute(cmd)
except IOError as e:
funct.logging('localhost', e.args[0], haproxywi=1)
try:
funct.logging("local", "users.py#ssh upload new ssh cert %s" % ssh_keys)
except:
pass
if serv and form.getvalue('ssl_cert'): if serv and form.getvalue('ssl_cert'):
#cert_local_dir = funct.get_config_var('main', 'cert_local_dir') #cert_local_dir = funct.get_config_var('main', 'cert_local_dir')
@ -1024,3 +998,320 @@ if form.getvalue('change_waf_mode'):
commands = [ "sudo sed -i 's/^SecRuleEngine.*/SecRuleEngine %s/' %s/waf/modsecurity.conf " % (waf_mode, haproxy_dir) ] commands = [ "sudo sed -i 's/^SecRuleEngine.*/SecRuleEngine %s/' %s/waf/modsecurity.conf " % (waf_mode, haproxy_dir) ]
funct.ssh_command(serv, commands) funct.ssh_command(serv, commands)
funct.logging(serv, 'Was changed WAF mod to '+waf_mode, haproxywi=1, login=1) funct.logging(serv, 'Was changed WAF mod to '+waf_mode, haproxywi=1, login=1)
error_mess = '<span class="alert alert-danger" id="error">All fields must be completed <a title="Close" id="errorMess"><b>X</b></a></span>'
if form.getvalue('newuser') is not None:
email = form.getvalue('newemail')
password = form.getvalue('newpassword')
role = form.getvalue('newrole')
group = form.getvalue('newgroupuser')
new_user = form.getvalue('newusername')
page = form.getvalue('page')
activeuser = form.getvalue('activeuser')
role_id = sql.get_role_id_by_name(role)
if sql.check_group(group, role_id):
if funct.is_admin(level=role_id):
if sql.add_user(new_user, email, password, role, group, activeuser):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'))
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())
print(template)
funct.logging('a new user '+new_user, ' has created ', haproxywi=1, login=1)
else:
funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1)
if form.getvalue('userdel') is not None:
userdel = form.getvalue('userdel')
user = sql.select_users(id=userdel)
for u in user:
username = u[1]
if sql.delete_user(userdel):
funct.logging(username, ' has deleted user ', haproxywi=1, login=1)
print("Ok")
if form.getvalue('updateuser') is not None:
email = form.getvalue('email')
role = form.getvalue('role')
group = form.getvalue('usergroup')
new_user = form.getvalue('updateuser')
id = form.getvalue('id')
activeuser = form.getvalue('activeuser')
role_id = sql.get_role_id_by_name(role)
if sql.check_group(group, role_id):
if funct.is_admin(level=role_id):
sql.update_user(new_user, email, role, group, id, activeuser)
funct.logging(new_user, ' has updated user ', haproxywi=1, login=1)
else:
funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1)
if form.getvalue('updatepassowrd') is not None:
password = form.getvalue('updatepassowrd')
id = form.getvalue('id')
user = sql.select_users(id=id)
for u in user:
username = u[1]
sql.update_user_password(password, id)
funct.logging('user '+username, ' has changed password ', haproxywi=1, login=1)
print("Ok")
if form.getvalue('newserver') is not None:
hostname = form.getvalue('servername')
ip = form.getvalue('newip')
group = form.getvalue('newservergroup')
typeip = form.getvalue('typeip')
enable = form.getvalue('enable')
master = form.getvalue('slave')
cred = form.getvalue('cred')
alert = form.getvalue('alert_en')
metrics = form.getvalue('metrics')
page = form.getvalue('page')
page = page.split("#")[0]
port = form.getvalue('newport')
desc = form.getvalue('desc')
active = form.getvalue('active')
if sql.add_server(hostname, ip, group, typeip, enable, master, cred, alert, metrics, port, desc, active):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'))
template = env.get_template('ajax/new_server.html')
template = template.render(groups = sql.select_groups(),
servers = sql.select_servers(server=ip),
roles = sql.select_roles(),
masters = sql.select_servers(get_master_servers=1),
sshs = sql.select_ssh(),
page = page)
print(template)
funct.logging('a new server '+hostname, ' has created ', haproxywi=1, login=1)
if form.getvalue('updateserver') is not None:
name = form.getvalue('updateserver')
ip = form.getvalue('ip')
group = form.getvalue('servergroup')
typeip = form.getvalue('typeip')
enable = form.getvalue('enable')
master = form.getvalue('slave')
id = form.getvalue('id')
cred = form.getvalue('cred')
alert = form.getvalue('alert_en')
metrics = form.getvalue('metrics')
port = form.getvalue('port')
desc = form.getvalue('desc')
active = form.getvalue('active')
if name is None or ip is None or port is None:
print(error_mess)
else:
sql.update_server(name, ip, group, typeip, enable, master, id, cred, alert, metrics, port, desc, active)
funct.logging('the server '+name, ' has updated ', haproxywi=1, login=1)
if form.getvalue('serverdel') is not None:
serverdel = form.getvalue('serverdel')
server = sql.select_servers(id=serverdel)
for s in server:
hostname = s[1]
if sql.delete_server(serverdel):
sql.delete_waf_server(serverdel)
print("Ok")
funct.logging(hostname, ' has deleted server with ', haproxywi=1, login=1)
if form.getvalue('newgroup') is not None:
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
env = Environment(loader=FileSystemLoader('templates/ajax/'))
template = env.get_template('/new_group.html')
output_from_parsed_template = template.render(groups = sql.select_groups(group=newgroup))
print(output_from_parsed_template)
funct.logging('a new group '+newgroup, ' created ', haproxywi=1, login=1)
if form.getvalue('groupdel') is not None:
groupdel = form.getvalue('groupdel')
group = sql.select_groups(id=groupdel)
for g in group:
groupname = g[1]
if sql.delete_group(groupdel):
print("Ok")
funct.logging(groupname, ' has deleted group ', haproxywi=1, login=1)
if form.getvalue('updategroup') is not None:
name = form.getvalue('updategroup')
descript = form.getvalue('descript')
id = form.getvalue('id')
if name is None:
print(error_mess)
else:
group = sql.select_groups(id=id)
for g in group:
groupname = g[1]
sql.update_group(name, descript, id)
funct.logging('the group '+groupname, ' has update ', haproxywi=1, login=1)
if form.getvalue('new_ssh'):
name = form.getvalue('new_ssh')
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'))
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)
funct.logging(name, ' has created a new SSH credentials ', haproxywi=1, login=1)
if form.getvalue('sshdel') is not None:
fullpath = funct.get_config_var('main', 'fullpath')
sshdel = form.getvalue('sshdel')
for sshs in sql.select_ssh(id=sshdel):
ssh_enable = sshs[2]
name = sshs[1]
ssh_key_name = fullpath+'/keys/%s.pem' % sshs[1]
if ssh_enable == 1:
cmd = 'rm -f %s' % ssh_key_name
try:
funct.subprocess_execute(cmd)
except:
pass
if sql.delete_ssh(sshdel):
print("Ok")
funct.logging(name, ' has deleted the SSH credentials ', haproxywi=1, login=1)
if form.getvalue('updatessh'):
id = form.getvalue('id')
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')
for sshs in sql.select_ssh(id=id):
ssh_enable = sshs[2]
ssh_key_name = fullpath+'/keys/%s.pem' % sshs[1]
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)
except:
pass
sql.update_ssh(id, name, enable, group, username, password)
funct.logging('the SSH '+name, ' has updated credentials ', haproxywi=1, login=1)
if form.getvalue('ssh_cert'):
name = form.getvalue('name')
if not os.path.exists(os.getcwd()+'/keys/'):
os.makedirs(os.getcwd()+'/keys/')
ssh_keys = os.path.dirname(os.getcwd())+'/keys/'+name+'.pem'
try:
with open(ssh_keys, "w") as conf:
conf.write(form.getvalue('ssh_cert'))
except IOError:
print('<div class="alert alert-danger">Can\'t save ssh keys file. Check ssh keys path in config</div>')
else:
print('<div class="alert alert-success">Ssh key was save into: %s </div>' % ssh_keys)
try:
cmd = 'chmod 600 %s' % ssh_keys
funct.subprocess_execute(cmd)
except IOError as e:
funct.logging('localhost', e.args[0], haproxywi=1)
funct.logging("localhost", " upload a new SSH cert %s" % ssh_keys, haproxywi=1, login=1)
if form.getvalue('newtelegram'):
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'))
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)
funct.logging(channel, ' has created a new Telegram channel ', haproxywi=1, login=1)
if form.getvalue('telegramdel') is not None:
telegramdel = form.getvalue('telegramdel')
telegram = sql.select_telegram(id=telegramdel)
for t in telegram:
telegram_name = t[1]
if sql.delete_telegram(telegramdel):
print("Ok")
funct.logging(telegram_name, ' has deleted the Telegram channel ', haproxywi=1, login=1)
if form.getvalue('updatetoken') is not None:
token = form.getvalue('updatetoken')
channel = form.getvalue('updategchanel')
group = form.getvalue('updategroup')
id = form.getvalue('id')
if token is None or channel is None or group is None:
print(error_mess)
else:
sql.update_telegram(token, channel, group, id)
funct.logging('group '+group, ' telegram token has updated channel: '+channel, haproxywi=1, login=1)
if form.getvalue('updatesettings') is not None:
settings = form.getvalue('updatesettings')
val = form.getvalue('val')
if sql.update_setting(settings, val):
funct.logging('value '+val, ' changed settings '+settings, haproxywi=1, login=1)
print("Ok")

View File

@ -36,7 +36,21 @@ try:
servers = sql.get_dick_permit() servers = sql.get_dick_permit()
except: except:
role = '' role = ''
pass user = ''
users = ''
groups = ''
roles = ''
metrics_master = ''
metrics_worker = ''
checker_master = ''
checker_worker = ''
keep_alive = ''
api = ''
date = ''
error = ''
versions = ''
haproxy_wi_log = ''
servers = ''
template = template.render(h2 = 1, template = template.render(h2 = 1,

View File

@ -231,11 +231,14 @@ def update_server_master(master, slave):
cur.close() cur.close()
con.close() con.close()
def select_users(**kwargs): def select_users(**kwargs):
con, cur = get_cur() con, cur = get_cur()
sql = """select * from user ORDER BY id""" sql = """select * from user ORDER BY id"""
if kwargs.get("user") is not None: if kwargs.get("user") is not None:
sql = """select * from user where username='%s' """ % kwargs.get("user") sql = """select * from user where username='%s' """ % kwargs.get("user")
if kwargs.get("id") is not None:
sql = """select * from user where id='%s' """ % kwargs.get("id")
try: try:
cur.execute(sql) cur.execute(sql)
except sqltool.Error as e: except sqltool.Error as e:
@ -245,11 +248,14 @@ def select_users(**kwargs):
cur.close() cur.close()
con.close() con.close()
def select_groups(**kwargs): def select_groups(**kwargs):
con, cur = get_cur() con, cur = get_cur()
sql = """select * from groups ORDER BY id""" sql = """select * from groups ORDER BY id"""
if kwargs.get("group") is not None: if kwargs.get("group") is not None:
sql = """select * from groups where name='%s' """ % kwargs.get("group") sql = """select * from groups where name='%s' """ % kwargs.get("group")
if kwargs.get("id") is not None:
sql = """select * from groups where id='%s' """ % kwargs.get("id")
try: try:
cur.execute(sql) cur.execute(sql)
except sqltool.Error as e: except sqltool.Error as e:
@ -259,6 +265,7 @@ def select_groups(**kwargs):
cur.close() cur.close()
con.close() con.close()
def select_user_name_group(id): def select_user_name_group(id):
con, cur = get_cur() con, cur = get_cur()
sql = """select name from groups where id='%s' """ % id sql = """select name from groups where id='%s' """ % id
@ -705,14 +712,6 @@ def check_exists_backup(server):
cur.close() cur.close()
con.close() con.close()
def show_update_ssh(name, page):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax'))
template = env.get_template('/new_ssh.html')
print('Content-type: text/html\n')
output_from_parsed_template = template.render(groups = select_groups(), sshs = select_ssh(name=name),page=page)
print(output_from_parsed_template)
def insert_new_telegram(token, chanel, group): def insert_new_telegram(token, chanel, group):
con, cur = get_cur() con, cur = get_cur()
@ -728,6 +727,7 @@ def insert_new_telegram(token, chanel, group):
cur.close() cur.close()
con.close() con.close()
def delete_telegram(id): def delete_telegram(id):
con, cur = get_cur() con, cur = get_cur()
sql = """ delete from telegram where id = %s """ % (id) sql = """ delete from telegram where id = %s """ % (id)
@ -742,6 +742,7 @@ def delete_telegram(id):
cur.close() cur.close()
con.close() con.close()
def select_telegram(**kwargs): def select_telegram(**kwargs):
con, cur = get_cur() con, cur = get_cur()
sql = """select * from telegram """ sql = """select * from telegram """
@ -749,6 +750,8 @@ def select_telegram(**kwargs):
sql = """select * from telegram where groups = '%s' """ % kwargs.get('group') sql = """select * from telegram where groups = '%s' """ % kwargs.get('group')
if kwargs.get('token'): if kwargs.get('token'):
sql = """select * from telegram where token = '%s' """ % kwargs.get('token') sql = """select * from telegram where token = '%s' """ % kwargs.get('token')
if kwargs.get('id'):
sql = """select * from telegram where id = '%s' """ % kwargs.get('id')
try: try:
cur.execute(sql) cur.execute(sql)
except sqltool.Error as e: except sqltool.Error as e:
@ -758,6 +761,7 @@ def select_telegram(**kwargs):
cur.close() cur.close()
con.close() con.close()
def insert_new_telegram(token, chanel, group): def insert_new_telegram(token, chanel, group):
con, cur = get_cur() con, cur = get_cur()
sql = """insert into telegram(`token`, `chanel_name`, `groups`) values ('%s', '%s', '%s') """ % (token, chanel, group) sql = """insert into telegram(`token`, `chanel_name`, `groups`) values ('%s', '%s', '%s') """ % (token, chanel, group)
@ -772,6 +776,7 @@ def insert_new_telegram(token, chanel, group):
cur.close() cur.close()
con.close() con.close()
def update_telegram(token, chanel, group, id): def update_telegram(token, chanel, group, id):
con, cur = get_cur() con, cur = get_cur()
sql = """ update telegram set sql = """ update telegram set
@ -788,6 +793,7 @@ def update_telegram(token, chanel, group, id):
cur.close() cur.close()
con.close() con.close()
def insert_new_option(option, group): def insert_new_option(option, group):
con, cur = get_cur() con, cur = get_cur()
sql = """insert into options(`options`, `groups`) values ('%s', '%s') """ % (option, group) sql = """insert into options(`options`, `groups`) values ('%s', '%s') """ % (option, group)
@ -802,6 +808,7 @@ def insert_new_option(option, group):
cur.close() cur.close()
con.close() con.close()
def select_options(**kwargs): def select_options(**kwargs):
con, cur = get_cur() con, cur = get_cur()
sql = """select * from options """ sql = """select * from options """
@ -818,6 +825,7 @@ def select_options(**kwargs):
cur.close() cur.close()
con.close() con.close()
def update_options(option, id): def update_options(option, id):
con, cur = get_cur() con, cur = get_cur()
sql = """ update options set sql = """ update options set
@ -832,6 +840,7 @@ def update_options(option, id):
cur.close() cur.close()
con.close() con.close()
def delete_option(id): def delete_option(id):
con, cur = get_cur() con, cur = get_cur()
sql = """ delete from options where id = %s """ % (id) sql = """ delete from options where id = %s """ % (id)
@ -861,6 +870,7 @@ def insert_new_savedserver(server, description, group):
cur.close() cur.close()
con.close() con.close()
def select_saved_servers(**kwargs): def select_saved_servers(**kwargs):
con, cur = get_cur() con, cur = get_cur()
sql = """select * from saved_servers """ sql = """select * from saved_servers """
@ -877,6 +887,7 @@ def select_saved_servers(**kwargs):
cur.close() cur.close()
con.close() con.close()
def update_savedserver(server, description, id): def update_savedserver(server, description, id):
con, cur = get_cur() con, cur = get_cur()
sql = """ update saved_servers set sql = """ update saved_servers set
@ -892,6 +903,7 @@ def update_savedserver(server, description, id):
cur.close() cur.close()
con.close() con.close()
def delete_savedserver(id): def delete_savedserver(id):
con, cur = get_cur() con, cur = get_cur()
sql = """ delete from saved_servers where id = %s """ % (id) sql = """ delete from saved_servers where id = %s """ % (id)
@ -922,6 +934,7 @@ def insert_mentrics(serv, curr_con, cur_ssl_con, sess_rate, max_sess_rate):
cur.close() cur.close()
con.close() con.close()
def select_waf_metrics_enable(id): def select_waf_metrics_enable(id):
con, cur = get_cur() con, cur = get_cur()
sql = """ select waf.metrics from waf left join servers as serv on waf.server_id = serv.id where server_id = '%s' """ % id sql = """ select waf.metrics from waf left join servers as serv on waf.server_id = serv.id where server_id = '%s' """ % id
@ -934,6 +947,7 @@ def select_waf_metrics_enable(id):
cur.close() cur.close()
con.close() con.close()
def select_waf_metrics_enable_server(ip): def select_waf_metrics_enable_server(ip):
con, cur = get_cur() con, cur = get_cur()
sql = """ select waf.metrics from waf left join servers as serv on waf.server_id = serv.id where ip = '%s' """ % ip sql = """ select waf.metrics from waf left join servers as serv on waf.server_id = serv.id where ip = '%s' """ % ip
@ -996,6 +1010,7 @@ def select_waf_servers_metrics(uuid, **kwargs):
cur.close() cur.close()
con.close() con.close()
def select_waf_metrics(serv, **kwargs): def select_waf_metrics(serv, **kwargs):
con, cur = get_cur() con, cur = get_cur()
sql = """ select * from (select * from waf_metrics where serv = '%s' order by `date` desc limit 60) order by `date`""" % serv sql = """ select * from (select * from waf_metrics where serv = '%s' order by `date` desc limit 60) order by `date`""" % serv
@ -1008,6 +1023,7 @@ def select_waf_metrics(serv, **kwargs):
cur.close() cur.close()
con.close() con.close()
def insert_waf_metrics_enable(serv, enable): def insert_waf_metrics_enable(serv, enable):
con, cur = get_cur() con, cur = get_cur()
sql = """ insert into waf (server_id, metrics) values((select id from servers where ip = '%s'), '%s') """ % (serv, enable) sql = """ insert into waf (server_id, metrics) values((select id from servers where ip = '%s'), '%s') """ % (serv, enable)
@ -1020,6 +1036,7 @@ def insert_waf_metrics_enable(serv, enable):
cur.close() cur.close()
con.close() con.close()
def delete_waf_server(id): def delete_waf_server(id):
con, cur = get_cur() con, cur = get_cur()
sql = """ delete from waf where server_id = '%s' """ % id sql = """ delete from waf where server_id = '%s' """ % id
@ -1032,6 +1049,7 @@ def delete_waf_server(id):
cur.close() cur.close()
con.close() con.close()
def insert_waf_mentrics(serv, conn): def insert_waf_mentrics(serv, conn):
con, cur = get_cur() con, cur = get_cur()
if mysql_enable == '1': if mysql_enable == '1':
@ -1047,6 +1065,7 @@ def insert_waf_mentrics(serv, conn):
cur.close() cur.close()
con.close() con.close()
def delete_waf_mentrics(): def delete_waf_mentrics():
con, cur = get_cur() con, cur = get_cur()
if mysql_enable == '1': if mysql_enable == '1':
@ -1062,6 +1081,7 @@ def delete_waf_mentrics():
cur.close() cur.close()
con.close() con.close()
def update_waf_metrics_enable(name, enable): def update_waf_metrics_enable(name, enable):
con, cur = get_cur() con, cur = get_cur()
sql = """ update waf set metrics = %s where server_id = (select id from servers where hostname = '%s') """ % (enable, name) sql = """ update waf set metrics = %s where server_id = (select id from servers where hostname = '%s') """ % (enable, name)
@ -1074,6 +1094,7 @@ def update_waf_metrics_enable(name, enable):
cur.close() cur.close()
con.close() con.close()
def delete_mentrics(): def delete_mentrics():
con, cur = get_cur() con, cur = get_cur()
if mysql_enable == '1': if mysql_enable == '1':
@ -1089,6 +1110,7 @@ def delete_mentrics():
cur.close() cur.close()
con.close() con.close()
def select_metrics(serv, **kwargs): def select_metrics(serv, **kwargs):
con, cur = get_cur() con, cur = get_cur()
sql = """ select * from (select * from metrics where serv = '%s' order by `date` desc limit 60) order by `date` """ % serv sql = """ select * from (select * from metrics where serv = '%s' order by `date` desc limit 60) order by `date` """ % serv
@ -1101,6 +1123,7 @@ def select_metrics(serv, **kwargs):
cur.close() cur.close()
con.close() con.close()
def select_servers_metrics_for_master(): def select_servers_metrics_for_master():
con, cur = get_cur() con, cur = get_cur()
sql = """select ip from servers where metrics = 1 """ sql = """select ip from servers where metrics = 1 """
@ -1113,6 +1136,7 @@ def select_servers_metrics_for_master():
cur.close() cur.close()
con.close() con.close()
def select_servers_metrics(uuid, **kwargs): def select_servers_metrics(uuid, **kwargs):
con, cur = get_cur() con, cur = get_cur()
sql = """ select * from user where username = '%s' """ % get_user_name_by_uuid(uuid) sql = """ select * from user where username = '%s' """ % get_user_name_by_uuid(uuid)
@ -1136,6 +1160,7 @@ def select_servers_metrics(uuid, **kwargs):
cur.close() cur.close()
con.close() con.close()
def select_table_metrics(uuid): def select_table_metrics(uuid):
con, cur = get_cur() con, cur = get_cur()
groups = "" groups = ""
@ -1351,6 +1376,7 @@ def select_table_metrics(uuid):
cur.close() cur.close()
con.close() con.close()
def get_setting(param, **kwargs): def get_setting(param, **kwargs):
con, cur = get_cur() con, cur = get_cur()
sql = """select value from `settings` where param='%s' """ % param sql = """select value from `settings` where param='%s' """ % param
@ -1369,6 +1395,7 @@ def get_setting(param, **kwargs):
cur.close() cur.close()
con.close() con.close()
def update_setting(param, val): def update_setting(param, val):
con, cur = get_cur() con, cur = get_cur()
sql = """update `settings` set `value` = '%s' where param = '%s' """ % (val, param) sql = """update `settings` set `value` = '%s' where param = '%s' """ % (val, param)
@ -1396,70 +1423,7 @@ def get_ver():
return ver[0] return ver[0]
cur.close() cur.close()
con.close() con.close()
def show_update_option(option):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax'))
template = env.get_template('/new_option.html')
print('Content-type: text/html\n')
template = template.render(options=select_options(option=option))
print(template)
def show_update_savedserver(server):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax'))
template = env.get_template('/new_saved_servers.html')
print('Content-type: text/html\n')
template = template.render(server=select_saved_servers(server=server))
print(template)
def show_update_telegram(token, page):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax'))
template = env.get_template('/new_telegram.html')
print('Content-type: text/html\n')
output_from_parsed_template = template.render(groups = select_groups(), telegrams = select_telegram(token=token),page=page)
print(output_from_parsed_template)
def show_update_user(user,page):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'))
template = env.get_template('ajax/new_user.html')
print('Content-type: text/html\n')
template = template.render(users = select_users(user=user),
groups = select_groups(),
page=page,
roles = select_roles())
print(template)
def show_update_server(server, page):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'))
template = env.get_template('ajax/new_server.html')
print('Content-type: text/html\n')
output_from_parsed_template = template.render(groups = select_groups(),
servers = select_servers(server=server),
roles = select_roles(),
masters = select_servers(get_master_servers=1),
sshs = select_ssh(),
page = page)
print(output_from_parsed_template)
def show_update_group(group):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax/'))
template = env.get_template('/new_group.html')
print('Content-type: text/html\n')
output_from_parsed_template = template.render(groups = select_groups(group=group))
print(output_from_parsed_template)
def select_roles(**kwargs): def select_roles(**kwargs):
con, cur = get_cur() con, cur = get_cur()
@ -1543,257 +1507,28 @@ def check_group(group, role_id):
if user_group == group or user_group == '1' or role_id == 1: if user_group == group or user_group == '1' or role_id == 1:
return True return True
else: else:
funct.logging(new_user, ' tried to change user group', haproxywi=1, login=1) funct.logging('localhost', ' has tried to actions in not own group ', haproxywi=1, login=1)
return False return False
def show_update_option(option):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax'))
template = env.get_template('/new_option.html')
if form.getvalue('newuser') is not None: print('Content-type: text/html\n')
email = form.getvalue('newemail') template = template.render(options=select_options(option=option))
password = form.getvalue('newpassword') print(template)
role = form.getvalue('newrole')
group = form.getvalue('newgroupuser')
new_user = form.getvalue('newusername')
page = form.getvalue('page')
activeuser = form.getvalue('activeuser')
check_token()
if password is None or role is None or group is None:
print(error_mess)
else:
role_id = get_role_id_by_name(role)
if check_group(group, role_id):
if funct.is_admin(level=role_id):
if add_user(new_user, email, password, role, group, activeuser):
show_update_user(new_user, page)
funct.logging('a new user '+new_user, ' created ', haproxywi=1, login=1)
else:
funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1)
if form.getvalue('updateuser') is not None: def show_update_savedserver(server):
email = form.getvalue('email') from jinja2 import Environment, FileSystemLoader
role = form.getvalue('role') env = Environment(loader=FileSystemLoader('templates/ajax'))
group = form.getvalue('usergroup') template = env.get_template('/new_saved_servers.html')
new_user = form.getvalue('updateuser')
id = form.getvalue('id')
activeuser = form.getvalue('activeuser')
check_token()
if new_user is None or role is None or group is None:
print('Content-type: text/html\n')
print(error_mess)
else:
role_id = get_role_id_by_name(role)
if check_group(group, role_id):
if funct.is_admin(level=role_id):
update_user(new_user, email, role, group, id, activeuser)
funct.logging('user with id '+id, ' user '+new_user+' updated ', haproxywi=1, login=1)
else:
funct.logging(new_user, ' tried to privilege escalation', haproxywi=1, login=1)
if form.getvalue('updatepassowrd') is not None:
password = form.getvalue('updatepassowrd')
id = form.getvalue('id')
print('Content-type: text/html\n') print('Content-type: text/html\n')
check_token() template = template.render(server=select_saved_servers(server=server))
if password is None or id is None: print(template)
print(error_mess)
else:
update_user_password(password, id)
funct.logging('user with id '+id, ' changed password ', haproxywi=1, login=1)
print("Ok")
if form.getvalue('userdel') is not None:
print('Content-type: text/html\n')
userdel = form.getvalue('userdel')
check_token()
if delete_user(userdel):
print("Ok")
if form.getvalue('newserver') is not None:
hostname = form.getvalue('servername')
ip = form.getvalue('newip')
group = form.getvalue('newservergroup')
typeip = form.getvalue('typeip')
enable = form.getvalue('enable')
master = form.getvalue('slave')
cred = form.getvalue('cred')
alert = form.getvalue('alert_en')
metrics = form.getvalue('metrics')
page = form.getvalue('page')
page = page.split("#")[0]
port = form.getvalue('newport')
desc = form.getvalue('desc')
active = form.getvalue('active')
print('Content-type: text/html\n')
check_token()
if ip is None or group is None or cred is None or port is None:
print(error_mess)
else:
if add_server(hostname, ip, group, typeip, enable, master, cred, alert, metrics, port, desc, active):
show_update_server(ip, page)
#funct.logging('a new server '+hostname, ' created ', haproxywi=1, login=1)
if form.getvalue('serverdel') is not None:
print('Content-type: text/html\n')
check_token()
serverdel = form.getvalue('serverdel')
if delete_server(serverdel):
delete_waf_server(serverdel)
print("Ok")
if form.getvalue('newgroup') is not None:
newgroup = form.getvalue('groupname')
desc = form.getvalue('newdesc')
print('Content-type: text/html\n')
check_token()
if newgroup is None:
print(error_mess)
else:
if add_group(newgroup, desc):
show_update_group(newgroup)
funct.logging('a new group '+newgroup, ' created ', haproxywi=1, login=1)
if form.getvalue('groupdel') is not None:
print('Content-type: text/html\n')
check_token()
groupdel = form.getvalue('groupdel')
if delete_group(groupdel):
print("Ok")
if form.getvalue('updategroup') is not None:
name = form.getvalue('updategroup')
descript = form.getvalue('descript')
id = form.getvalue('id')
print('Content-type: text/html\n')
check_token()
if name is None:
print(error_mess)
else:
update_group(name, descript, id)
funct.logging('the group '+name, ' update ', haproxywi=1, login=1)
if form.getvalue('updateserver') is not None:
name = form.getvalue('updateserver')
ip = form.getvalue('ip')
group = form.getvalue('servergroup')
typeip = form.getvalue('typeip')
enable = form.getvalue('enable')
master = form.getvalue('slave')
id = form.getvalue('id')
cred = form.getvalue('cred')
alert = form.getvalue('alert_en')
metrics = form.getvalue('metrics')
port = form.getvalue('port')
desc = form.getvalue('desc')
active = form.getvalue('active')
print('Content-type: text/html\n')
check_token()
if name is None or ip is None or port is None:
print(error_mess)
else:
update_server(name, ip, group, typeip, enable, master, id, cred, alert, metrics, port, desc, active)
funct.logging('the server '+name, ' updated ', haproxywi=1, login=1)
if form.getvalue('updatessh'):
id = form.getvalue('id')
name = form.getvalue('name')
enable = form.getvalue('ssh_enable')
group = form.getvalue('group')
username = form.getvalue('ssh_user')
password = form.getvalue('ssh_pass')
check_token()
print('Content-type: text/html\n')
if username is None:
print(error_mess)
else:
import funct
fullpath = funct.get_config_var('main', 'fullpath')
for sshs in select_ssh(id=id):
ssh_enable = sshs[2]
ssh_key_name = fullpath+'/keys/%s.pem' % sshs[1]
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)
except:
pass
update_ssh(id, name, enable, group, username, password)
funct.logging('the SSH '+name, ' updated ', haproxywi=1, login=1)
if form.getvalue('new_ssh'):
name = form.getvalue('new_ssh')
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]
check_token()
if username is None or name is None:
print('Content-type: text/html\n')
print(error_mess)
else:
if insert_new_ssh(name, enable, group, username, password):
show_update_ssh(name, page)
if form.getvalue('sshdel') is not None:
import funct
print('Content-type: text/html\n')
check_token()
fullpath = funct.get_config_var('main', 'fullpath')
sshdel = form.getvalue('sshdel')
for sshs in select_ssh(id=sshdel):
ssh_enable = sshs[2]
ssh_key_name = fullpath+'/keys/%s.pem' % sshs[1]
if ssh_enable == 1:
cmd = 'rm -f %s' % ssh_key_name
try:
funct.subprocess_execute(cmd)
except:
pass
if delete_ssh(sshdel):
print("Ok")
if form.getvalue('newtelegram'):
token = form.getvalue('newtelegram')
chanel = form.getvalue('chanel')
group = form.getvalue('telegramgroup')
page = form.getvalue('page')
page = page.split("#")[0]
check_token()
if token is None or chanel is None or group is None:
print('Content-type: text/html\n')
print(error_mess)
else:
if insert_new_telegram(token, chanel, group):
show_update_telegram(token, page)
if form.getvalue('telegramdel') is not None:
print('Content-type: text/html\n')
check_token()
if delete_telegram(form.getvalue('telegramdel')):
print("Ok")
if form.getvalue('getoption'): if form.getvalue('getoption'):
@ -1892,26 +1627,3 @@ if form.getvalue('savedserverdel') is not None:
check_token() check_token()
if delete_savedserver(form.getvalue('savedserverdel')): if delete_savedserver(form.getvalue('savedserverdel')):
print("Ok") print("Ok")
if form.getvalue('updatetoken') is not None:
token = form.getvalue('updatetoken')
chanel = form.getvalue('updategchanel')
group = form.getvalue('updategroup')
id = form.getvalue('id')
print('Content-type: text/html\n')
if token is None or chanel is None or group is None:
print(error_mess)
else:
update_telegram(token, chanel, group, id)
funct.logging('group '+group, ' telegram token was updated channel: '+chanel, haproxywi=1, login=1)
if form.getvalue('updatesettings') is not None:
print('Content-type: text/html\n')
settings = form.getvalue('updatesettings')
val = form.getvalue('val')
check_token()
if update_setting(settings, val):
funct.logging('value '+val, ' changed settings '+settings, haproxywi=1, login=1)
print("Ok")

View File

@ -781,7 +781,7 @@ h3 {
In this section you can create and edit black and white lists. And after use them in the HAProxy configs or in the "Add proxy" pages In this section you can create and edit black and white lists. And after use them in the HAProxy configs or in the "Add proxy" pages
</div> </div>
<div id="ajax"></div> <div id="ajax"></div>
<div id="dialog-confirm" title="View certificate " style="display: none;"> <div id="dialog-confirm-cert-edit" title="View certificate " style="display: none;">
<span><b>Note:</b> Each new address must be specified from a new line</span> <span><b>Note:</b> Each new address must be specified from a new line</span>
<textarea id="edit_lists" style="width: 100%" rows=20></textarea> <textarea id="edit_lists" style="width: 100%" rows=20></textarea>
</div> </div>

View File

@ -24,59 +24,19 @@
<ul id='browse_histroy'></ul> <ul id='browse_histroy'></ul>
<div id="users"> <div id="users">
<table class="overview" id="ajax-users"> <table class="overview" id="ajax-users">
<thead>
<tr class="overviewHead"> <tr class="overviewHead">
<td class="padding10 first-collumn">Login name</td> <th class="padding10 first-collumn">Login name</th>
<td>Password</td> <th>Password</th>
<td>Active</td> <th>Active</th>
<td>Email</td> <th>Email</th>
<td>Role</td> <th>Role</th>
<td>Group</td> <th>Group</th>
<td></td> <th></th>
<td></td> <th></th>
</tr> </tr>
<tr> </thead>
<script> <tbody>
$( function() {
{% for user in users %}
$("#role-{{user.0}}" ).selectmenu({
width: 100
});
$("#usergroup-{{user.0}}" ).selectmenu({
width: 100
});
{% endfor %}
{% for server in servers %}
$("#servergroup-{{ server.0}}" ).selectmenu({
width: 100
});
$("#slavefor-{{server.0}}" ).selectmenu({
width: 130
});
$("#credentials-{{server.0}}" ).selectmenu({
width: 150
});
{% endfor %}
{% for ssh in sshs %}
if (window.matchMedia('(max-width: 1280px)').matches) {
$("#sshgroup-{{ ssh.0}}" ).selectmenu({
width: 100
});
}
{% endfor %}
{% for server in backups %}
$("#backup-time-{{ server.0}}" ).selectmenu({
width: 100
});
$("#backup-type-{{server.0}}" ).selectmenu({
width: 130
});
$("#backup-credentials-{{server.0}}" ).selectmenu({
width: 150
});
{% endfor %}
});
</script>
{% for user in users %} {% for user in users %}
<tr id="user-{{user.0}}" class="{{ loop.cycle('odd', 'even') }}"> <tr id="user-{{user.0}}" class="{{ loop.cycle('odd', 'even') }}">
{% include 'include/admin_users.html' %} {% include 'include/admin_users.html' %}
@ -112,17 +72,20 @@
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
<tbody>
</table> </table>
<br /><span class="add-button" title="Add user" id="add-user-button">+ Add</span> <br /><span class="add-button" title="Add user" id="add-user-button">+ Add</span>
<br /><br /> <br /><br />
</div> </div>
<div id="groups"> <div id="groups">
<table class="overview" id="ajax-group"> <table class="overview" id="ajax-group">
<thead>
<tr class="overviewHead"> <tr class="overviewHead">
<td class="padding10 first-collumn">Name</td> <th class="padding10 first-collumn">Name</th>
<td>Description</td> <th>Description</th>
<td></td> <th></th>
</tr> </tr>
<tbody>
{% for group in groups %} {% for group in groups %}
<tr id="group-{{ group.0 }}" class="{{ loop.cycle('odd', 'even') }}"> <tr id="group-{{ group.0 }}" class="{{ loop.cycle('odd', 'even') }}">
{% if group.1 == "All" %} {% if group.1 == "All" %}
@ -146,6 +109,7 @@
{% endif %} {% endif %}
</tr> </tr>
{% endfor %} {% endfor %}
</tbody>
</table> </table>
<br /><span class="add-button" title="Add group" id="add-group-button">+ Add</span> <br /><span class="add-button" title="Add group" id="add-group-button">+ Add</span>
<br /><br /> <br /><br />
@ -159,7 +123,7 @@
<td class="padding10 first-collumn"> <td class="padding10 first-collumn">
{{ input('new-group-add') }} {{ input('new-group-add') }}
</td> </td>
<td> <td style="width: 100%;">
{{ input('new-desc', size="60") }} {{ input('new-desc', size="60") }}
</td> </td>
<td> <td>
@ -173,22 +137,25 @@
</div> </div>
<div id="servers"> <div id="servers">
<table class="overview" id="ajax-servers"> <table class="overview" id="ajax-servers">
<thead>
<tr class="overviewHead"> <tr class="overviewHead">
<td class="padding10 first-collumn">Hostname</td> <th class="padding10 first-collumn">Hostname</th>
<td class="ip-field">IP</td> <th class="ip-field">IP</th>
<td class="checkbox-head"><span title="SSH port">Port</span></td></td> <th class="checkbox-head"><span title="SSH port">Port</span></th>
<td class="group-field">Group</td> <th class="group-field">Group</th>
<td class="checkbox-head">Enable</td> <th class="checkbox-head">Enable</th>
<td class="checkbox-head"><span title="Vitrual IP, something like VRRP">Virt</span></td> <th class="checkbox-head"><span title="Vitrual IP, something like VRRP">Virt</span></th>
<td class="checkbox-head"><span title="Alert if backend change status. Before enable add Telgram chanel at Checker tab">Alert</span></td> <th class="checkbox-head"><span title="Alert if backend change status. Before enable add Telgram chanel at Checker tab">Alert</span></th>
<td class="checkbox-head"><span title="Enable save and show metrics">Metrics</span></td> <th class="checkbox-head"><span title="Enable save and show metrics">Metrics</span></th>
<td class="checkbox-head"><span title="Keep start HAProxy service if down">Start</span></td> <th class="checkbox-head"><span title="Keep start HAProxy service if down">Start</span></th>
<td class="slave-field"><span title="Actions with master config will automatically apply on slave">Slave for</span></td> <th class="slave-field"><span title="Actions with master config will automatically apply on slave">Slave for</span></th>
<td class="cred-field">Credentials</td> <th class="cred-field">Credentials</th>
<td>Description</td> <th>Description</th>
<td></td> <th></th>
<td></td> <th></th>
</tr> </tr>
</thead>
<tbody>
{% for server in servers %} {% for server in servers %}
<tr id="server-{{server.0}}" class="{{ loop.cycle('odd', 'even') }}"> <tr id="server-{{server.0}}" class="{{ loop.cycle('odd', 'even') }}">
<td class="padding10 first-collumn"> <td class="padding10 first-collumn">
@ -215,6 +182,7 @@
{% include 'include/admin_servers.html' %} {% include 'include/admin_servers.html' %}
</tr> </tr>
{% endfor %} {% endfor %}
</tbody>
</table> </table>
<br /><span class="add-button" title="Add server" id="add-server-button">+ Add</span> <br /><span class="add-button" title="Add server" id="add-server-button">+ Add</span>
<br /><br /> <br /><br />
@ -635,4 +603,46 @@
width: 10%; width: 10%;
} }
</style> </style>
<script>
$( function() {
{% for user in users %}
$("#role-{{user.0}}" ).selectmenu({
width: 100
});
$("#usergroup-{{user.0}}" ).selectmenu({
width: 100
});
{% endfor %}
{% for server in servers %}
$("#servergroup-{{ server.0}}" ).selectmenu({
width: 100
});
$("#slavefor-{{server.0}}" ).selectmenu({
width: 130
});
$("#credentials-{{server.0}}" ).selectmenu({
width: 150
});
{% endfor %}
{% for ssh in sshs %}
if (window.matchMedia('(max-width: 1280px)').matches) {
$("#sshgroup-{{ ssh.0}}" ).selectmenu({
width: 100
});
}
{% endfor %}
{% for server in backups %}
$("#backup-time-{{ server.0}}" ).selectmenu({
width: 100
});
$("#backup-type-{{server.0}}" ).selectmenu({
width: 130
});
$("#backup-credentials-{{server.0}}" ).selectmenu({
width: 150
});
{% endfor %}
});
</script>
{% endblock %} {% endblock %}

View File

@ -1,6 +1,6 @@
<html lang="en"> <html lang="en">
<head> <head>
<title>{{title}} - HAproxy-WI</title> <title>{{title}} - HAProxy-WI</title>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Pragma" content="no-cache" />
@ -105,7 +105,7 @@
<li><a href="/app/users.py#groups" title="Actions with groups" class="group head-submenu">Groups</a></li> <li><a href="/app/users.py#groups" title="Actions with groups" class="group head-submenu">Groups</a></li>
<li><a href="/app/users.py#servers" title="Actions with servers" class="runtime head-submenu">Servers</a></li> <li><a href="/app/users.py#servers" title="Actions with servers" class="runtime head-submenu">Servers</a></li>
<li><a href="/app/users.py#ssh" title="Manage SSH credentials" class="admin head-submenu">SSH credentials</a></li> <li><a href="/app/users.py#ssh" title="Manage SSH credentials" class="admin head-submenu">SSH credentials</a></li>
<li><a href="/app/users.py#settings" title="HAproxy-WI settings" class="settings head-submenu">Settings</a></li> <li><a href="/app/users.py#settings" title="HAProxy-WI settings" class="settings head-submenu">Settings</a></li>
<li><a href="/app/viewlogs.py" title="View internal logs" class="logs head-submenu">Internal logs</a></li> <li><a href="/app/viewlogs.py" title="View internal logs" class="logs head-submenu">Internal logs</a></li>
<li><a href="/app/users.py#updatehapwi" title="Update HAProxy-WI" class="upload updatehapwi head-submenu">Update</a></li> <li><a href="/app/users.py#updatehapwi" title="Update HAProxy-WI" class="upload updatehapwi head-submenu">Update</a></li>
</ul> </ul>
@ -260,7 +260,8 @@
<a href="https://github.com/Aidaho12/haproxy-wi/" class="footer-link" target="_blank">Github</a> <a href="https://github.com/Aidaho12/haproxy-wi/" class="footer-link" target="_blank">Github</a>
<a href="https://github.com/Aidaho12/haproxy-wi/issues" class="footer-link" target="_blank">Help</a> <a href="https://github.com/Aidaho12/haproxy-wi/issues" class="footer-link" target="_blank">Help</a>
<a href="https://haproxy-wi.org/contacts.py" class="footer-link" target="_blank">Contact</a> <a href="https://haproxy-wi.org/contacts.py" class="footer-link" target="_blank">Contact</a>
<a href="http://haproxy-wi.org" class="footer-link" target="_blank">About</a> <a href="https://haproxy-wi.org" class="footer-link" target="_blank">About</a>
<a href="https://haproxy-wi.org/cloud.py" class="footer-link" target="_blank" title="HAProxy-WI Cloud">Cloud</a>
</div> </div>
</div> </div>
</body> </body>

View File

@ -1,4 +1,13 @@
<div id="create" style="height: 95%;"> {% if add %}
<div class="alert alert-success" style="position: absolute;top: 45px;left: 5px;">
<div id="close">
<span title="Close" style="cursor: pointer; float: right;">X</span>
</div>
<h3>{{ add }} was success added</h3>
{{ conf_add }}
</div>
{% endif %}
<div id="create" style="height: 95%; margin-top: 20px;">
<div id="left-collumn"> <div id="left-collumn">
<div class="div-pannel"> <div class="div-pannel">
<div class="div-server"> <div class="div-server">
@ -126,10 +135,4 @@
</div> </div>
</div> </div>
</div> </div>
{% if add %}
<div class="alert alert-success" style="margin-left: 20px; clear: both;">
<h3>{{ add }} was success added</h3>
{{ conf_add }}
</div>
{% endif %}
</div> </div>

View File

@ -23,7 +23,6 @@ body, .container {
<center style="margin-top: 15%; background-color: #5d9ceb;"> <center style="margin-top: 15%; background-color: #5d9ceb;">
{{error_log}} {{error_log}}
{{error}} {{error}}
{{db_create}}
<div id="login-form" style="padding-top: 40px; padding-bottom: 50px; height: 250px; color: #000;"> <div id="login-form" style="padding-top: 40px; padding-bottom: 50px; height: 250px; color: #000;">
<span id="logo_span"> <span id="logo_span">
<img src="/inc/images/logo_login.png" width="330"> <img src="/inc/images/logo_login.png" width="330">

View File

@ -2,6 +2,10 @@ var ssl_offloading_var = "http-request set-header X-Forwarded-Port %[dst_port] \
"http-request add-header X-Forwarded-Proto https if { ssl_fc } \n"+ "http-request add-header X-Forwarded-Proto https if { ssl_fc } \n"+
"redirect scheme https if !{ ssl_fc } \n" "redirect scheme https if !{ ssl_fc } \n"
$( function() { $( function() {
$('#close').click(function(){
$('.alert-success').remove();
$('.alert-danger').remove();
});
$( "#listen-mode-select" ).on('selectmenuchange',function() { $( "#listen-mode-select" ).on('selectmenuchange',function() {
if ($( "#listen-mode-select option:selected" ).val() == "tcp") { if ($( "#listen-mode-select option:selected" ).val() == "tcp") {
$( "#https-listen-span" ).hide("fast"); $( "#https-listen-span" ).hide("fast");
@ -1146,4 +1150,84 @@ function change_select_waf(id) {
} }
} }
} ); } );
}
function createList(color) {
if(color == 'white') {
list = $('#new_whitelist_name').val()
} else {
list = $('#new_blacklist_name').val()
}
$.ajax( {
url: "options.py",
data: {
bwlists_create: list,
color: color,
group: $('#group').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
$("#ajax").html(data);
setTimeout(function() {
location.reload();
}, 2500 );
}
} );
}
function editList(list, color) {
$.ajax( {
url: "options.py",
data: {
bwlists: list,
color: color,
group: $('#group').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
if (data.indexOf('danger') != '-1') {
$("#ajax").html(data);
} else {
$('.alert-danger').remove();
$('#edit_lists').text(data);
$( "#dialog-confirm-cert-edit" ).dialog({
resizable: false,
height: "auto",
width: 650,
modal: true,
title: "Edit "+color+" list "+list,
buttons: {
"Just save": function() {
$( this ).dialog( "close" );
saveList('save', list, color);
},
"Save and restart": function() {
$( this ).dialog( "close" );
saveList('restart', list, color);
},
Cancel: function() {
$( this ).dialog( "close" );
}
}
});
}
}
} );
}
function saveList(action, list, color) {
$.ajax( {
url: "options.py",
data: {
bwlists_save: list,
bwlists_content: $('#edit_lists').val(),
color: color,
group: $('#group').val(),
bwlists_restart: action,
token: $('#token').val()
},
type: "POST",
success: function( data ) {
$("#ajax").html(data);
}
} );
} }

View File

@ -601,6 +601,9 @@ $( function() {
success: function( data ) { success: function( data ) {
if (data.indexOf('ok') != '-1') { if (data.indexOf('ok') != '-1') {
window.location.replace(ref); window.location.replace(ref);
} else if (data.indexOf('disabled') != '-1') {
$('.alert').show();
$('.alert').html(data);
} else if (data.indexOf('ban') != '-1') { } else if (data.indexOf('ban') != '-1') {
ban(); ban();
} }
@ -796,86 +799,6 @@ function replace_text(id_textarea, text_var) {
var text_val = str.substring(0, beg) + str.substring(end, len); var text_val = str.substring(0, beg) + str.substring(end, len);
$(id_textarea).text(text_val); $(id_textarea).text(text_val);
} }
function createList(color) {
if(color == 'white') {
list = $('#new_whitelist_name').val()
} else {
list = $('#new_blacklist_name').val()
}
$.ajax( {
url: "options.py",
data: {
bwlists_create: list,
color: color,
group: $('#group').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
$("#ajax").html(data);
setTimeout(function() {
location.reload();
}, 2500 );
}
} );
}
function editList(list, color) {
$.ajax( {
url: "options.py",
data: {
bwlists: list,
color: color,
group: $('#group').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
if (data.indexOf('danger') != '-1') {
$("#ajax").html(data);
} else {
$('.alert-danger').remove();
$('#edit_lists').text(data);
$( "#dialog-confirm" ).dialog({
resizable: false,
height: "auto",
width: 650,
modal: true,
title: "Edit "+color+" list "+list,
buttons: {
"Just save": function() {
$( this ).dialog( "close" );
saveList('save', list, color);
},
"Save and restart": function() {
$( this ).dialog( "close" );
saveList('restart', list, color);
},
Cancel: function() {
$( this ).dialog( "close" );
}
}
});
}
}
} );
}
function saveList(action, list, color) {
$.ajax( {
url: "options.py",
data: {
bwlists_save: list,
bwlists_content: $('#edit_lists').val(),
color: color,
group: $('#group').val(),
bwlists_restart: action,
token: $('#token').val()
},
type: "POST",
success: function( data ) {
$("#ajax").html(data);
}
} );
}
function createHistroy() { function createHistroy() {
try { try {
var get_history_array = JSON.parse(Cookies.get('history')); var get_history_array = JSON.parse(Cookies.get('history'));
@ -922,4 +845,4 @@ function listHistroy() {
Cookies.set('history', JSON.stringify(browse_history), { expires: 1, path: '/app' }); Cookies.set('history', JSON.stringify(browse_history), { expires: 1, path: '/app' });
} }
createHistroy() createHistroy()
listHistroy() listHistroy()

View File

@ -240,7 +240,7 @@ $( function() {
$('#error').remove(); $('#error').remove();
$('.alert-danger').remove(); $('.alert-danger').remove();
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
newgroup: "1", newgroup: "1",
groupname: $('#new-group-add').val(), groupname: $('#new-group-add').val(),
@ -274,7 +274,7 @@ $( function() {
ssh_enable = '1'; ssh_enable = '1';
} }
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
new_ssh: $('#new-ssh-add').val(), new_ssh: $('#new-ssh-add').val(),
new_group: $('#new-sshgroup').val(), new_group: $('#new-sshgroup').val(),
@ -315,7 +315,7 @@ $( function() {
$('#error').remove(); $('#error').remove();
$('.alert-danger').remove(); $('.alert-danger').remove();
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
newtelegram: $('#telegram-token-add').val(), newtelegram: $('#telegram-token-add').val(),
chanel: $('#telegram-chanel-add').val(), chanel: $('#telegram-chanel-add').val(),
@ -582,7 +582,7 @@ function addUser() {
} }
if (valid) { if (valid) {
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
newuser: "1", newuser: "1",
newusername: $('#new-username').val(), newusername: $('#new-username').val(),
@ -648,7 +648,7 @@ function addServer() {
valid = valid && checkLength( $('#new-port'), "Port", 1 ); valid = valid && checkLength( $('#new-port'), "Port", 1 );
if (valid) { if (valid) {
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
newserver: "1", newserver: "1",
servername: servername, servername: servername,
@ -679,14 +679,14 @@ function addServer() {
$('.alert-danger').remove(); $('.alert-danger').remove();
$("#ajax-servers").append(data); $("#ajax-servers").append(data);
$(".newserver").addClass( "update", 1000 ); $(".newserver").addClass( "update", 1000 );
setTimeout(function() {
$( ".newserver" ).removeClass( "update" );
}, 2500 );
$( "input[type=submit], button" ).button(); $( "input[type=submit], button" ).button();
$( "input[type=checkbox]" ).checkboxradio(); $( "input[type=checkbox]" ).checkboxradio();
$( ".controlgroup" ).controlgroup(); $( ".controlgroup" ).controlgroup();
$( "select" ).selectmenu(); $( "select" ).selectmenu();
$.getScript(awesome); $.getScript(awesome);
setTimeout(function() {
$( ".newserver" ).removeClass( "update" );
}, 2500 );
} }
} }
} ); } );
@ -749,7 +749,7 @@ function addBackup() {
function updateSettings(param, val) { function updateSettings(param, val) {
$('.alert-danger').remove(); $('.alert-danger').remove();
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
updatesettings: param, updatesettings: param,
val: val, val: val,
@ -977,7 +977,7 @@ function cloneBackup(id) {
function removeUser(id) { function removeUser(id) {
$("#user-"+id).css("background-color", "#f2dede"); $("#user-"+id).css("background-color", "#f2dede");
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
userdel: id, userdel: id,
token: $('#token').val() token: $('#token').val()
@ -994,7 +994,7 @@ function removeUser(id) {
function removeServer(id) { function removeServer(id) {
$("#server-"+id).css("background-color", "#f2dede"); $("#server-"+id).css("background-color", "#f2dede");
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
serverdel: id, serverdel: id,
token: $('#token').val() token: $('#token').val()
@ -1011,7 +1011,7 @@ function removeServer(id) {
function removeGroup(id) { function removeGroup(id) {
$("#group-"+id).css("background-color", "#f2dede"); $("#group-"+id).css("background-color", "#f2dede");
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
groupdel: id, groupdel: id,
token: $('#token').val() token: $('#token').val()
@ -1030,7 +1030,7 @@ function removeGroup(id) {
function removeSsh(id) { function removeSsh(id) {
$("#ssh-table-"+id).css("background-color", "#f2dede"); $("#ssh-table-"+id).css("background-color", "#f2dede");
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
sshdel: id, sshdel: id,
token: $('#token').val() token: $('#token').val()
@ -1049,7 +1049,7 @@ function removeSsh(id) {
function removeTelegram(id) { function removeTelegram(id) {
$("#telegram-table-"+id).css("background-color", "#f2dede"); $("#telegram-table-"+id).css("background-color", "#f2dede");
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
telegramdel: id, telegramdel: id,
token: $('#token').val() token: $('#token').val()
@ -1097,7 +1097,7 @@ function updateUser(id) {
activeuser = '1'; activeuser = '1';
} }
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
updateuser: $('#login-'+id).val(), updateuser: $('#login-'+id).val(),
email: $('#email-'+id).val(), email: $('#email-'+id).val(),
@ -1129,7 +1129,7 @@ function updateUser(id) {
function updateGroup(id) { function updateGroup(id) {
$('#error').remove(); $('#error').remove();
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
updategroup: $('#name-'+id).val(), updategroup: $('#name-'+id).val(),
descript: $('#descript-'+id).val(), descript: $('#descript-'+id).val(),
@ -1184,7 +1184,7 @@ function updateServer(id) {
servergroup = $('#servergroup-'+id).val(); servergroup = $('#servergroup-'+id).val();
} }
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
updateserver: $('#hostname-'+id).val(), updateserver: $('#hostname-'+id).val(),
ip: $('#ip-'+id).val(), ip: $('#ip-'+id).val(),
@ -1254,7 +1254,7 @@ function updateSSH(id) {
ssh_enable = '1'; ssh_enable = '1';
} }
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
updatessh: 1, updatessh: 1,
name: $('#ssh_name-'+id).val(), name: $('#ssh_name-'+id).val(),
@ -1291,7 +1291,7 @@ function updateSSH(id) {
function updateTelegram(id) { function updateTelegram(id) {
$('#error').remove(); $('#error').remove();
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
updatetoken: $('#telegram-token-'+id).val(), updatetoken: $('#telegram-token-'+id).val(),
updategchanel: $('#telegram-chanel-'+id).val(), updategchanel: $('#telegram-chanel-'+id).val(),
@ -1453,7 +1453,7 @@ function changeUserPassword(id, d) {
$('#missmatchpass').hide(); $('#missmatchpass').hide();
$('#error').remove(); $('#error').remove();
$.ajax( { $.ajax( {
url: "sql.py", url: "options.py",
data: { data: {
updatepassowrd: pass, updatepassowrd: pass,
id: id, id: id,