diff --git a/app/add.py b/app/add.py
index bdcce6d3..7b361ed2 100644
--- a/app/add.py
+++ b/app/add.py
@@ -1,4 +1,5 @@
#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
import os
import funct
import sql
@@ -20,7 +21,9 @@ funct.page_for_admin(level = 2)
try:
user, user_id, role, token, servers = funct.get_users_params()
- user_group = sql.get_user_group_by_uuid(user_id.value)
+ cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
+ group = cookie.get('group')
+ user_group = group.value
except:
pass
diff --git a/app/create_db.py b/app/create_db.py
index ad5197e8..0591dc66 100644
--- a/app/create_db.py
+++ b/app/create_db.py
@@ -131,6 +131,7 @@ def create_table(**kwargs):
CREATE TABLE IF NOT EXISTS `backups` ( `id` INTEGER NOT NULL, `server` VARCHAR ( 64 ), `rhost` VARCHAR ( 120 ), `rpath` VARCHAR ( 120 ), `type` VARCHAR ( 120 ), `time` VARCHAR ( 120 ), cred INTEGER, `description` VARCHAR ( 120 ), PRIMARY KEY(`id`));
CREATE TABLE IF NOT EXISTS `waf` (`server_id` INTEGER UNIQUE, metrics INTEGER);
CREATE TABLE IF NOT EXISTS `waf_metrics` (`serv` varchar(64), conn INTEGER, `date` DATETIME default '0000-00-00 00:00:00');
+ CREATE TABLE IF NOT EXISTS user_groups(user_id INTEGER NOT NULL, user_group_id INTEGER NOT NULL, UNIQUE(user_id,user_group_id));
"""
try:
cur.executescript(sql)
@@ -451,9 +452,51 @@ def update_db_v_4_2_3(**kwargs):
con.close()
+def update_db_v_4_3(**kwargs):
+ con, cur = get_cur()
+ sql = """
+ CREATE TABLE IF NOT EXISTS user_groups(user_id INTEGER NOT NULL, user_group_id INTEGER NOT NULL, UNIQUE(user_id,user_group_id));
+ """
+ try:
+ cur.execute(sql)
+ con.commit()
+ except sqltool.Error as e:
+ if kwargs.get('silent') != 1:
+ if e.args[0] == 'duplicate column name: haproxy' or e == " 1060 (42S21): Duplicate column name 'haproxy' ":
+ print('Updating... go to version 4.3.0')
+ else:
+ print("An error occurred:", e)
+ return False
+ else:
+ return True
+ cur.close()
+ con.close()
+
+
+def update_db_v_4_3_1(**kwargs):
+ con, cur = get_cur()
+ sql = """
+ insert OR IGNORE into user_groups(user_id, user_group_id) select id, groups from user;
+ """
+ try:
+ cur.execute(sql)
+ con.commit()
+ except sqltool.Error as e:
+ if kwargs.get('silent') != 1:
+ if e.args[0] == 'duplicate column name: haproxy' or e == " 1060 (42S21): Duplicate column name 'haproxy' ":
+ print('DB was update to 4.3.0')
+ else:
+ print("An error occurred:", e)
+ return False
+ else:
+ return True
+ cur.close()
+ con.close()
+
+
def update_ver(**kwargs):
con, cur = get_cur()
- sql = """update version set version = '4.2.3.0'; """
+ sql = """update version set version = '4.3.0.0'; """
try:
cur.execute(sql)
con.commit()
@@ -478,6 +521,8 @@ def update_all():
update_db_v_41()
update_db_v_42()
update_db_v_4_2_3()
+ update_db_v_4_3()
+ update_db_v_4_3_1()
update_ver()
@@ -496,6 +541,8 @@ def update_all_silent():
update_db_v_41(silent=1)
update_db_v_42(silent=1)
update_db_v_4_2_3(silent=1)
+ update_db_v_4_3(silent=1)
+ update_db_v_4_3_1(silent=1)
update_ver()
diff --git a/app/funct.py b/app/funct.py
index 2e740410..f280fa6f 100644
--- a/app/funct.py
+++ b/app/funct.py
@@ -975,8 +975,8 @@ def check_group(group, role_id):
import sql
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_id = cookie.get('uuid')
- user_group = sql.get_user_group_by_uuid(user_id.value)
- if user_group == group or user_group == '1' or role_id == 1:
+ id = sql.get_user_id_by_uuid(user_id.value)
+ if sql.select_user_groups(id, check_id=group) or role_id == 1:
return True
else:
logging('localhost', ' has tried to actions in not own group ', haproxywi=1, login=1)
diff --git a/app/haproxy-wi.db.sql b/app/haproxy-wi.db.sql
index 0ccf2375..1da71cfb 100644
--- a/app/haproxy-wi.db.sql
+++ b/app/haproxy-wi.db.sql
@@ -19,4 +19,5 @@ CREATE TABLE IF NOT EXISTS `options` ( `id` INTEGER NOT NULL, `options` VARCHAR
CREATE TABLE IF NOT EXISTS `saved_servers` ( `id` INTEGER NOT NULL, `server` VARCHAR ( 64 ), `description` VARCHAR ( 120 ), `groups` VARCHAR ( 120 ), PRIMARY KEY(`id`));
CREATE TABLE IF NOT EXISTS `backups` ( `id` INTEGER NOT NULL, `server` VARCHAR ( 64 ), `rhost` VARCHAR ( 120 ), `rpath` VARCHAR ( 120 ), `time` VARCHAR ( 120 ), cred INTEGER, `description` VARCHAR ( 120 ), PRIMARY KEY(`id`));
CREATE TABLE IF NOT EXISTS `waf` (`server_id` INTEGER UNIQUE, metrics INTEGER);
-CREATE TABLE IF NOT EXISTS `waf_metrics` (`serv` varchar(64), conn INTEGER, `date` DATETIME default '0000-00-00 00:00:00');
\ No newline at end of file
+CREATE TABLE IF NOT EXISTS `waf_metrics` (`serv` varchar(64), conn INTEGER, `date` DATETIME default '0000-00-00 00:00:00');
+CREATE TABLE IF NOT EXISTS user_groups(user_id INTEGER NOT NULL, user_group_id INTEGER NOT NULL, UNIQUE(user_id,user_group_id));
\ No newline at end of file
diff --git a/app/login.py b/app/login.py
index 65764a37..75bd0a50 100644
--- a/app/login.py
+++ b/app/login.py
@@ -30,14 +30,21 @@ def send_cookie(login):
expires = datetime.datetime.utcnow() + datetime.timedelta(days=session_ttl)
user_uuid = str(uuid.uuid4())
user_token = str(uuid.uuid4())
+ sql.write_user_uuid(login, user_uuid)
+ sql.write_user_token(login, user_token)
+
+ id = sql.get_user_id_by_uuid(user_uuid)
+ user_groups = sql.select_user_groups(id, limit=1)
c = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
c["uuid"] = user_uuid
c["uuid"]["path"] = "/"
c["uuid"]["expires"] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")
+ c["group"] = user_groups
+ c["group"]["path"] = "/"
+ c["group"]["expires"] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")
print(c)
- sql.write_user_uuid(login, user_uuid)
- sql.write_user_token(login, user_token)
+
try:
funct.logging('locahost', ' '+sql.get_user_name_by_uuid(user_uuid)+' log in', haproxywi=1)
except:
diff --git a/app/options.py b/app/options.py
index 6f00bec9..902573bb 100644
--- a/app/options.py
+++ b/app/options.py
@@ -8,7 +8,7 @@ form = funct.form
serv = form.getvalue('serv')
act = form.getvalue('act')
-if form.getvalue('new_metrics') or form.getvalue('new_waf_metrics'):
+if form.getvalue('new_metrics') or form.getvalue('new_waf_metrics') or form.getvalue('metrics_hapwi_ram') or form.getvalue('metrics_hapwi_cpu'):
print('Content-type: application/json\n')
else:
print('Content-type: text/html\n')
@@ -275,10 +275,6 @@ if act == "overviewServers":
import asyncio
async def async_get_overviewServers(serv1, serv2, service):
server_status = ()
- if service == 'haproxy':
- commands = [ "top -u haproxy -b -n 1" ]
- else:
- commands = [ "top -u nginx -b -n 1" ]
if service == 'haproxy':
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "Ver\|CurrConns\|Maxco\|MB\|Uptime:"' % (serv2, sql.get_setting('haproxy_sock_port'))
@@ -295,7 +291,7 @@ if act == "overviewServers":
else:
out1 = ''
- server_status = (serv1,serv2, out1, funct.ssh_command(serv2, commands))
+ server_status = (serv1,serv2, out1)
return server_status
async def get_runner_overviewServers(**kwargs):
@@ -325,18 +321,6 @@ if act == "overviewServers":
ioloop.close()
-
-if act == "overviewHapwi":
- from jinja2 import Environment, FileSystemLoader
- env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
- template = env.get_template('/overviewHapwi.html')
- cmd = "top -b -n 1 |head -12"
- server_status, stderr = funct.subprocess_execute(cmd)
-
- template = template.render(server_status=server_status,stderr=stderr)
- print(template)
-
-
if form.getvalue('action'):
import requests
@@ -1119,6 +1103,50 @@ if form.getvalue('table_metrics'):
print(template)
+if form.getvalue('metrics_hapwi_ram'):
+ ip = form.getvalue('ip')
+ metrics = {}
+ metrics['chartData'] = {}
+ rams = ''
+
+ if ip == '1':
+ cmd = "free -m |grep Mem |awk '{print $3,$4,$5,$6,$7}'"
+ metric, error = funct.subprocess_execute(cmd)
+ else:
+ commands = [ "free -m |grep Mem |awk '{print $3,$4,$5,$6,$7}'" ]
+ metric, error = funct.subprocess_execute(commands[0])
+
+ for i in metric:
+ rams = i
+
+ metrics['chartData']['rams'] = rams
+
+ import json
+ print(json.dumps(metrics))
+
+
+if form.getvalue('metrics_hapwi_cpu'):
+ ip = form.getvalue('ip')
+ metrics = {}
+ metrics['chartData'] = {}
+ cpus = ''
+
+ 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])
+
+ for i in metric:
+ cpus = i
+
+ metrics['chartData']['cpus'] = cpus
+
+ import json
+ print(json.dumps(metrics))
+
+
if form.getvalue('new_metrics'):
serv = form.getvalue('server')
metric = sql.select_metrics(serv)
@@ -1322,7 +1350,7 @@ if form.getvalue('newuser') is not None:
if funct.check_group(group, role_id):
if funct.is_admin(level=role_id):
- if sql.add_user(new_user, email, password, role, group, activeuser):
+ if sql.add_user(new_user, email, password, role, activeuser):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/new_user.html')
@@ -1343,6 +1371,7 @@ if form.getvalue('userdel') is not None:
for u in user:
username = u[1]
if sql.delete_user(userdel):
+ sql.delete_user_groups(userdel)
funct.logging(username, ' has deleted user ', haproxywi=1, login=1)
print("Ok")
@@ -1358,7 +1387,7 @@ if form.getvalue('updateuser') is not None:
if funct.check_group(group, role_id):
if funct.is_admin(level=role_id):
- sql.update_user(new_user, email, role, group, id, activeuser)
+ sql.update_user(new_user, email, role, 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)
@@ -1629,3 +1658,44 @@ if form.getvalue('updatesettings') is not None:
if sql.update_setting(settings, val):
funct.logging('value '+val, ' changed settings '+settings, haproxywi=1, login=1)
print("Ok")
+
+
+if form.getvalue('getusergroups'):
+ id = form.getvalue('getusergroups')
+ groups = []
+ u_g = sql.select_user_groups(id=id)
+ for g in u_g:
+ groups.append(g[0])
+ from jinja2 import Environment, FileSystemLoader
+ env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
+ template = env.get_template('/show_user_groups.html')
+ template = template.render(groups=sql.select_groups(), user_groups=groups,id=id)
+ print(template)
+
+
+if form.getvalue('changeUserGroupId') is not None:
+ id = form.getvalue('changeUserGroupId')
+ groups = form.getvalue('changeUserGroups')
+ user = form.getvalue('changeUserGroupsUser')
+ if sql.delete_user_groups(id):
+ for group in groups:
+ if group[0] == ',':
+ continue
+ sql.update_user_groups(groups=group[0], id=id)
+
+ funct.logging('localhost', ' has upgraded groups for user: '+user, haproxywi=1, login=1)
+
+
+if form.getvalue('getcurrentusergroup') is not None:
+ import http.cookies
+ cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
+ user_id = cookie.get('uuid')
+ group = cookie.get('group')
+ id = sql.get_user_id_by_uuid(user_id.value)
+ groups = sql.select_user_groups_with_names(id=id)
+
+ from jinja2 import Environment, FileSystemLoader
+ env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
+ template = env.get_template('/show_user_current_group.html')
+ template = template.render(groups=groups, group=group.value,id=id)
+ print(template)
\ No newline at end of file
diff --git a/app/overview.py b/app/overview.py
index 07b4da50..ef76e27c 100644
--- a/app/overview.py
+++ b/app/overview.py
@@ -67,7 +67,6 @@ except:
is_checker_worker = ''
is_metrics_worker = ''
token = ''
- host = ''
template = template.render(h2 = 1,
@@ -77,6 +76,7 @@ template = template.render(h2 = 1,
user = user,
users = users,
groups = groups,
+ users_groups = sql.select_user_groups_with_names(1, all=1),
roles = sql.select_roles(),
metrics_master = ''.join(metrics_master),
metrics_worker = ''.join(metrics_worker),
diff --git a/app/servers.py b/app/servers.py
index 28270134..47de8af5 100644
--- a/app/servers.py
+++ b/app/servers.py
@@ -13,6 +13,10 @@ try:
user, user_id, role, token, servers = funct.get_users_params()
ldap_enable = sql.get_setting('ldap_enable')
grafana, stderr = funct.subprocess_execute("service grafana-server status |grep Active |awk '{print $1}'")
+ import http.cookies, os
+ cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
+ group = cookie.get('group')
+ user_group = group.value
except:
pass
@@ -20,12 +24,12 @@ except:
output_from_parsed_template = template.render(title = "Servers manage",
role = role,
user = user,
- users = sql.select_users(),
+ users = sql.select_users(group=user_group),
groups = sql.select_groups(),
servers = sql.get_dick_permit(virt=1, disable=0),
roles = sql.select_roles(),
masters = sql.select_servers(get_master_servers=1, uuid=user_id.value),
- group = sql.get_user_group_by_uuid(user_id.value),
+ group = user_group,
sshs = sql.select_ssh(),
telegrams = sql.get_user_telegram_by_uuid(user_id.value),
token = token,
diff --git a/app/sql.py b/app/sql.py
index 795df584..e1a21db0 100644
--- a/app/sql.py
+++ b/app/sql.py
@@ -31,12 +31,12 @@ def get_cur():
return con, cur
-def add_user(user, email, password, role, group, activeuser):
+def add_user(user, email, password, role, activeuser):
con, cur = get_cur()
if password != 'aduser':
- sql = """INSERT INTO user (username, email, password, role, groups, activeuser) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')""" % (user, email, funct.get_hash(password), role, group, activeuser)
+ sql = """INSERT INTO user (username, email, password, role, activeuser) VALUES ('%s', '%s', '%s', '%s', '%s')""" % (user, email, funct.get_hash(password), role, activeuser)
else:
- sql = """INSERT INTO user (username, email, role, groups, ldap_user, activeuser) VALUES ('%s', '%s', '%s', '%s', '1', '%s')""" % (user, email, role, group, activeuser)
+ sql = """INSERT INTO user (username, email, role, ldap_user, activeuser) VALUES ('%s', '%s', '%s', '1', '%s')""" % (user, email, role, activeuser)
try:
cur.execute(sql)
con.commit()
@@ -49,14 +49,47 @@ def add_user(user, email, password, role, group, activeuser):
cur.close()
con.close()
-def update_user(user, email, role, group, id, activeuser):
+
+def update_user(user, email, role, id, activeuser):
con, cur = get_cur()
sql = """update user set username = '%s',
email = '%s',
- role = '%s',
- groups = '%s',
+ role = '%s',
activeuser = '%s'
- where id = '%s'""" % (user, email, role, group, activeuser, id)
+ where id = '%s'""" % (user, email, role, activeuser, id)
+ try:
+ cur.execute(sql)
+ con.commit()
+ except sqltool.Error as e:
+ funct.out_error(e)
+ con.rollback()
+ return False
+ else:
+ return True
+ cur.close()
+ con.close()
+
+
+def update_user_groups(groups, id):
+ con, cur = get_cur()
+ sql = """insert into user_groups(user_id, user_group_id) values('%s', '%s')""" % (id, groups)
+ try:
+ cur.execute(sql)
+ con.commit()
+ except sqltool.Error as e:
+ funct.out_error(e)
+ con.rollback()
+ return False
+ else:
+ return True
+ cur.close()
+ con.close()
+
+
+def delete_user_groups(id):
+ con, cur = get_cur()
+ sql = """delete from user_groups
+ where user_id = '%s'""" % (id)
try:
cur.execute(sql)
con.commit()
@@ -252,6 +285,9 @@ def select_users(**kwargs):
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")
+ if kwargs.get("group") is not None:
+ sql = """ select user.* from user left join user_groups as groups on user.id = groups.user_id where groups.user_group_id = '%s' group by id;
+ """ % kwargs.get("group")
try:
cur.execute(sql)
except sqltool.Error as e:
@@ -259,7 +295,57 @@ def select_users(**kwargs):
else:
return cur.fetchall()
cur.close()
- con.close()
+ con.close()
+
+
+def select_user_groups(id, **kwargs):
+ con, cur = get_cur()
+ sql = """select user_group_id from user_groups where user_id = '%s' """ % id
+ if kwargs.get("limit") is not None:
+ sql = """select user_group_id from user_groups where user_id = '%s' limit 1 """ % id
+ if kwargs.get("check_id") is not None:
+ sql = """select * from user_groups where user_id='%s' and user_group_id = '%s' """ % (id, kwargs.get("check_id"))
+ try:
+ cur.execute(sql)
+ except sqltool.Error as e:
+ funct.out_error(e)
+ else:
+ if kwargs.get("check_id") is not None:
+ for g in cur.fetchall():
+ if g[0] is None:
+ return False
+ else:
+ return True
+ elif kwargs.get("limit") is not None:
+ for g in cur.fetchall():
+ return g[0]
+ else:
+ return cur.fetchall()
+ cur.close()
+ con.close()
+
+
+def select_user_groups_with_names(id, **kwargs):
+ con, cur = get_cur()
+ if kwargs.get("all") is not None:
+ sql = """select user_groups.user_id, groups.name from user_groups
+ left join groups as groups on user_groups.user_group_id = groups.id """
+ else:
+ sql = """select user_groups.user_group_id, groups.name from user_groups
+ left join groups as groups on user_groups.user_group_id = groups.id
+ where user_groups.user_id = '%s' """ % id
+ try:
+ cur.execute(sql)
+ except sqltool.Error as e:
+ funct.out_error(e)
+ else:
+ if kwargs.get("limit") is not None:
+ for g in cur.fetchall():
+ return g[0]
+ else:
+ return cur.fetchall()
+ cur.close()
+ con.close()
def select_groups(**kwargs):
@@ -398,6 +484,7 @@ def get_token(uuid):
cur.close()
con.close()
+
def delete_uuid(uuid):
con, cur = get_cur()
sql = """ delete from uuid where uuid = '%s' """ % uuid
@@ -409,6 +496,7 @@ def delete_uuid(uuid):
cur.close()
con.close()
+
def delete_old_uuid():
con, cur = get_cur()
if mysql_enable == '1':
@@ -427,6 +515,7 @@ def delete_old_uuid():
cur.close()
con.close()
+
def update_last_act_user(uuid):
con, cur = get_cur()
session_ttl = get_setting('session_ttl')
@@ -444,6 +533,7 @@ def update_last_act_user(uuid):
cur.close()
con.close()
+
def get_user_name_by_uuid(uuid):
con, cur = get_cur()
sql = """ select user.username from user left join uuid as uuid on user.id = uuid.user_id where uuid.uuid = '%s' """ % uuid
@@ -457,6 +547,20 @@ def get_user_name_by_uuid(uuid):
cur.close()
con.close()
+
+def get_user_id_by_uuid(uuid):
+ con, cur = get_cur()
+ sql = """ select user.id from user left join uuid as uuid on user.id = uuid.user_id where uuid.uuid = '%s' """ % uuid
+ try:
+ cur.execute(sql)
+ except sqltool.Error as e:
+ funct.out_error(e)
+ else:
+ for user_id in cur.fetchall():
+ return user_id[0]
+ cur.close()
+ con.close()
+
def get_user_role_by_uuid(uuid):
con, cur = get_cur()
@@ -487,19 +591,6 @@ def get_role_id_by_name(name):
cur.close()
con.close()
-
-def get_user_group_by_uuid(uuid):
- con, cur = get_cur()
- sql = """ select user.groups from user left join uuid as uuid on user.id = uuid.user_id where uuid.uuid = '%s' """ % uuid
- try:
- cur.execute(sql)
- except sqltool.Error as e:
- funct.out_error(e)
- else:
- for user_id in cur.fetchall():
- return user_id[0]
- cur.close()
- con.close()
def get_user_telegram_by_uuid(uuid):
con, cur = get_cur()
@@ -513,6 +604,7 @@ def get_user_telegram_by_uuid(uuid):
cur.close()
con.close()
+
def get_telegram_by_ip(ip):
con, cur = get_cur()
sql = """ select telegram.* from telegram left join servers as serv on serv.groups = telegram.groups where serv.ip = '%s' """ % ip
@@ -525,22 +617,25 @@ def get_telegram_by_ip(ip):
cur.close()
con.close()
+
def get_dick_permit(**kwargs):
import http.cookies
import os
- cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
- user_id = cookie.get('uuid')
+ if kwargs.get('username'):
+ user = kwargs.get('username')
+ grp = '1'
+ else:
+ cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
+ user_id = cookie.get('uuid')
+ group = cookie.get('group')
+ grp = group.value
+ user = get_user_id_by_uuid(user_id.value)
disable = ''
haproxy = ''
nginx = ''
keepalived = ''
ip = ''
- con, cur = get_cur()
- if kwargs.get('username'):
- sql = """ select * from user where username = '%s' """ % kwargs.get('username')
- else:
- sql = """ select * from user where username = '%s' """ % get_user_name_by_uuid(user_id.value)
if kwargs.get('virt'):
type_ip = ""
else:
@@ -555,18 +650,15 @@ def get_dick_permit(**kwargs):
nginx = "and nginx = 1"
if kwargs.get('keepalived'):
nginx = "and keepalived = 1"
-
- try:
- cur.execute(sql)
- except sqltool.Error as e:
- print("An error occurred:", e)
- else:
- for group in cur:
- if group[5] == '1':
- sql = """ select * from servers where enable = 1 %s %s %s """ % (disable, type_ip, nginx)
- else:
- sql = """ select * from servers where groups like '%{group}%' and (enable = 1 {disable}) {type_ip} {ip} {haproxy} {nginx} {keepalived}
- """.format(group=group[5], disable=disable, type_ip=type_ip, ip=ip, haproxy=haproxy, nginx=nginx, keepalived=keepalived)
+
+ if select_user_groups(user, check_id=grp):
+ con, cur = get_cur()
+ if grp == '1':
+ sql = """ select * from servers where enable = 1 %s %s %s """ % (disable, type_ip, nginx)
+ else:
+ sql = """ select * from servers where groups like '%{group}%' and (enable = 1 {disable}) {type_ip} {ip} {haproxy} {nginx} {keepalived}
+ """.format(group=grp, disable=disable, type_ip=type_ip, ip=ip, haproxy=haproxy, nginx=nginx, keepalived=keepalived)
+
try:
cur.execute(sql)
except sqltool.Error as e:
@@ -574,8 +666,11 @@ def get_dick_permit(**kwargs):
else:
return cur.fetchall()
- cur.close()
- con.close()
+ cur.close()
+ con.close()
+ else:
+ print('Atata!')
+
def is_master(ip, **kwargs):
@@ -1171,18 +1266,18 @@ def select_servers_metrics_for_master():
def select_servers_metrics(uuid, **kwargs):
con, cur = get_cur()
- sql = """ select * from user where username = '%s' """ % get_user_name_by_uuid(uuid)
-
- try:
- cur.execute(sql)
- except sqltool.Error as e:
- print("An error occurred:", e)
- else:
- for group in cur:
- if group[5] == '1':
- sql = """ select ip from servers where enable = 1 and metrics = '1' """
- else:
- sql = """ select ip from servers where groups like '%{group}%' and metrics = '1'""".format(group=group[5])
+ import http.cookies
+ import os
+ cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
+ user_id = cookie.get('uuid')
+ group = cookie.get('group')
+ group = group.value
+ id = get_user_id_by_uuid(user_id.value)
+ if select_user_groups(id, check_id=group) is not None:
+ if group == '1':
+ sql = """ select ip from servers where enable = 1 and metrics = '1' """
+ else:
+ sql = """ select ip from servers where groups like '%{group}%' and metrics = '1'""".format(group=group)
try:
cur.execute(sql)
except sqltool.Error as e:
@@ -1195,19 +1290,18 @@ def select_servers_metrics(uuid, **kwargs):
def select_table_metrics(uuid):
con, cur = get_cur()
- groups = ""
- sql = """ select * from user where username = '%s' """ % get_user_name_by_uuid(uuid)
-
- try:
- cur.execute(sql)
- except sqltool.Error as e:
- print("An error occurred:", e)
- else:
- for group in cur:
- if group[5] == '1':
- groups = ""
- else:
- groups = "and servers.groups like '%{group}%' ".format(group=group[5])
+ import http.cookies
+ import os
+ cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
+ user_id = cookie.get('uuid')
+ group = cookie.get('group')
+ group = group.value
+ id = get_user_id_by_uuid(user_id.value)
+ if select_user_groups(id, check_id=group) is not None:
+ if group == '1':
+ groups = ""
+ else:
+ groups = "and servers.groups like '%{group}%' ".format(group=group)
if mysql_enable == '1':
sql = """
select ip.ip, hostname, avg_sess_1h, avg_sess_24h, avg_sess_3d, max_sess_1h, max_sess_24h, max_sess_3d, avg_cur_1h, avg_cur_24h, avg_cur_3d, max_con_1h, max_con_24h, max_con_3d from
diff --git a/app/templates/admin.html b/app/templates/admin.html
index 9e3414aa..e6c6f100 100644
--- a/app/templates/admin.html
+++ b/app/templates/admin.html
@@ -53,16 +53,7 @@
-
+
@@ -603,6 +594,9 @@
{% include 'include/change_pass_form.html' %}
+
+
+
+ }
+ {% 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 %}
+ });
+
{% endblock %}
\ No newline at end of file
diff --git a/app/templates/ajax/new_user.html b/app/templates/ajax/new_user.html
index 8a125203..9fd9a91e 100644
--- a/app/templates/ajax/new_user.html
+++ b/app/templates/ajax/new_user.html
@@ -16,16 +16,7 @@
{% if page != "servers.py" %}
{% if page != "servers.py#users" %}
-
+
{% endif %}
{% endif %}
diff --git a/app/templates/ajax/overviewServers.html b/app/templates/ajax/overviewServers.html
index 94299417..7fcc0a7b 100644
--- a/app/templates/ajax/overviewServers.html
+++ b/app/templates/ajax/overviewServers.html
@@ -1,5 +1,5 @@
{%- for service in service_status -%}
-
+
{% if service_page == 'nginx' %}
{% else %}
@@ -18,13 +18,16 @@
{% endif %}
{% if service_page == 'nginx' %}
-
+
{% else %}
-
+
{% endif %}
-
-{{ service.3 }}
-
-
+
+
+
+
+
+
+
{% endfor %}
\ No newline at end of file
diff --git a/app/templates/ajax/show_user_current_group.html b/app/templates/ajax/show_user_current_group.html
new file mode 100644
index 00000000..0b3c8d7e
--- /dev/null
+++ b/app/templates/ajax/show_user_current_group.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/templates/ajax/show_user_groups.html b/app/templates/ajax/show_user_groups.html
new file mode 100644
index 00000000..464980f3
--- /dev/null
+++ b/app/templates/ajax/show_user_groups.html
@@ -0,0 +1,70 @@
+
+
+
+
Choose groups
+
+
+
+
+
\ No newline at end of file
diff --git a/app/templates/base.html b/app/templates/base.html
index 894e63f3..2e0e8180 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -259,12 +259,15 @@