' % (enable, backend, serv, serv))
@@ -1769,7 +1790,8 @@ if form.getvalue('bwlists_save'):
except Exception:
pass
- haproxy_enterprise = sql.get_setting('haproxy_enterprise')
+ server_id = sql.select_server_id_by_ip(server=serv)
+ haproxy_enterprise = sql.select_service_setting(server_id, 'haproxy', 'haproxy_enterprise')
if haproxy_enterprise == '1':
haproxy_service_name = "hapee-2.0-lb"
else:
@@ -1940,6 +1962,7 @@ if form.getvalue('updatepassowrd') is not None:
if form.getvalue('newserver') is not None:
hostname = form.getvalue('servername')
ip = form.getvalue('newip')
+ ip = funct.is_ip_or_dns(ip)
group = form.getvalue('newservergroup')
scan_server = form.getvalue('scan_server')
typeip = form.getvalue('typeip')
@@ -1954,6 +1977,10 @@ if form.getvalue('newserver') is not None:
port = form.getvalue('newport')
desc = form.getvalue('desc')
+ if ip == '':
+ print('error: IP or DNS name is not valid')
+ sys.exit()
+
if sql.add_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, firewall):
try:
@@ -2027,18 +2054,19 @@ if form.getvalue('updateserver') is not None:
funct.logging('the server ' + name, ' has been updated ', haproxywi=1, login=1)
if form.getvalue('serverdel') is not None:
- serverdel = form.getvalue('serverdel')
- server = sql.select_servers(id=serverdel)
+ server_id = form.getvalue('serverdel')
+ server = sql.select_servers(id=server_id)
for s in server:
hostname = s[1]
ip = s[2]
if sql.check_exists_backup(ip):
print('warning: Delete the backup first ')
sys.exit()
- if sql.delete_server(serverdel):
- sql.delete_waf_server(serverdel)
- sql.delete_port_scanner_settings(serverdel)
+ if sql.delete_server(server_id):
+ sql.delete_waf_server(server_id)
+ sql.delete_port_scanner_settings(server_id)
sql.delete_waf_rules(ip)
+ sql.delete_action_history(server_id)
print("Ok")
funct.logging(hostname, ' has been deleted server with ', haproxywi=1, login=1)
@@ -3705,3 +3733,43 @@ if form.getvalue('updatesavedserver') is not None:
if form.getvalue('savedserverdel') is not None:
if sql.delete_savedserver(form.getvalue('savedserverdel')):
print("Ok")
+
+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')
+
+ if service == 'haproxy':
+ if sql.insert_or_update_service_setting(server_id, service, 'haproxy_enterprise', haproxy_enterprise):
+ print('Ok')
diff --git a/app/overview.py b/app/overview.py
index 6acacbe1..5d5bfa94 100644
--- a/app/overview.py
+++ b/app/overview.py
@@ -19,7 +19,6 @@ try:
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)
servers_for_grep = ''
i = 1
servers_len = len(servers)
@@ -49,7 +48,6 @@ try:
prometheus = ''
host = ''
else:
- users = sql.select_users()
cmd = "ps ax |grep 'metrics_worker\|metrics_waf_worker.py\|metrics_nginx_worker.py' |grep -v grep |wc -l"
metrics_worker, stderr = funct.subprocess_execute(cmd)
cmd = "ps ax |grep 'checker_worker\|checker_nginx' |grep -v grep |wc -l"
@@ -109,9 +107,7 @@ template = template.render(h2=1,
title="Overview",
role=role,
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/sql.py b/app/sql.py
index ea83bc66..847ca373 100644
--- a/app/sql.py
+++ b/app/sql.py
@@ -9,13 +9,14 @@ mysql_enable = funct.get_config_var('mysql', 'enable')
def out_error(error):
error = str(error)
print('error: ' + error)
- try:
- funct.logging('localhost', error, haproxywi=1, login=1)
- except Exception:
+ if 'database is locked' not in error:
try:
- funct.logging('localhost', error, haproxywi=1)
+ funct.logging('localhost', error, haproxywi=1, login=1)
except Exception:
- pass
+ try:
+ funct.logging('localhost', error, haproxywi=1)
+ except Exception:
+ pass
def add_user(user, email, password, role, activeuser, group):
@@ -62,8 +63,8 @@ def update_user_groups(groups, user_group_id):
def delete_user_groups(user_id):
+ group_for_delete = UserGroups.delete().where(UserGroups.user_id == user_id)
try:
- group_for_delete = UserGroups.delete().where(UserGroups.user_id == user_id)
group_for_delete.execute()
except Exception as e:
out_error(e)
@@ -158,9 +159,6 @@ def add_setting_for_new_group(group_id):
'desc': 'Path to the HAProxy sock file', 'group': group_id},
{'param': 'haproxy_sock_port', 'value': '1999', 'section': 'haproxy', 'desc': 'Socket port for HAProxy',
'group': group_id},
- {'param': 'haproxy_enterprise', 'value': '0', 'section': 'haproxy',
- 'desc': 'If you use enterprise HAProxy, set the value of this parameter to 1. The name of the service will be changed as it is required for the commercial version',
- 'group': group_id},
{'param': 'nginx_path_error_logs', 'value': '/var/log/nginx/error.log', 'section': 'nginx',
'desc': 'Nginx error log', 'group': group_id},
{'param': 'nginx_stats_user', 'value': 'admin', 'section': 'nginx', 'desc': 'Username for accessing Nginx stats page',
@@ -453,12 +451,21 @@ def select_server_by_name(name):
return ip.ip
+def select_server_id_by_ip(server_ip):
+ try:
+ server_id = Server.get(Server.ip == server_ip).server_id
+ except Exception as e:
+ return out_error(e)
+ else:
+ return server_id
+
+
def select_servers(**kwargs):
cursor = conn.cursor()
sql = """select * from servers where enable = '1' ORDER BY groups """
if kwargs.get("server") is not None:
- sql = """select * from servers where ip='{}' """.format(kwargs.get("server"))
+ sql = """select * from servers where ip = '{}' """.format(kwargs.get("server"))
if kwargs.get("full") is not None:
sql = """select * from servers ORDER BY hostname """
if kwargs.get("get_master_servers") is not None:
@@ -488,25 +495,17 @@ def select_servers(**kwargs):
def write_user_uuid(login, user_uuid):
session_ttl = get_setting('session_ttl')
session_ttl = int(session_ttl)
+ user_id = get_user_id_by_username(login)
- try:
- user_id = User.get(User.username == login)
- except Exception as e:
- out_error(e)
try:
UUID.insert(user_id=user_id, uuid=user_uuid, exp=funct.get_data('regular', timedelta=session_ttl)).execute()
except Exception as e:
out_error(e)
-
def write_user_token(login, user_token):
token_ttl = int(get_setting('token_ttl'))
-
- try:
- user_id = User.get(User.username == login)
- except Exception as e:
- out_error(e)
+ user_id = get_user_id_by_username(login)
try:
Token.insert(user_id=user_id, token=user_token, exp=funct.get_data('regular', timedelta=token_ttl)).execute()
@@ -549,6 +548,7 @@ def get_user_id_by_api_token(token):
for i in query_res:
return i.user_id
+
def get_username_groupid_from_api_token(token):
try:
user_name = ApiToken.get(ApiToken.token == token)
@@ -635,6 +635,15 @@ def get_user_id_by_uuid(uuid):
return user.user_id
+def get_user_id_by_username(username: str):
+ try:
+ query = User.get(User.username == username).user_id
+ except Exception as e:
+ out_error(e)
+ else:
+ return query
+
+
def get_user_role_by_uuid(uuid):
query = (Role.select(Role.role_id)
.join(User, on=(Role.name == User.role))
@@ -1747,7 +1756,7 @@ def get_setting(param, **kwargs):
param == 'syslog_server_enable' or param == 'smon_check_interval' or
param == 'checker_check_interval' or param == 'port_scan_interval' or
param == 'smon_keep_history_range' or param == 'checker_keep_history_range' or
- param == 'portscanner_keep_history_range' or param == 'haproxy_enterprise'
+ param == 'portscanner_keep_history_range'
):
return int(setting.value)
else:
@@ -1942,18 +1951,18 @@ def check_token_exists(token):
if get_token(user_id.value) == token:
return True
else:
- try:
- funct.logging('localhost', ' Tried do action with wrong token', haproxywi=1, login=1)
- except:
- funct.logging('localhost', ' An action with wrong token', haproxywi=1)
- return False
- except:
- try:
- funct.logging('localhost', ' Cannot check token', haproxywi=1, login=1)
- except:
- funct.logging('localhost', ' Cannot check token', haproxywi=1)
- finally:
+ # try:
+ # funct.logging('localhost', ' Tried do action with wrong token', haproxywi=1, login=1)
+ # except:
+ # funct.logging('localhost', ' An action with wrong token', haproxywi=1)
return False
+ except:
+ # try:
+ # funct.logging('localhost', ' Cannot check token', haproxywi=1, login=1)
+ # except:
+ # funct.logging('localhost', ' Cannot check token', haproxywi=1)
+ # finally:
+ return False
def insert_smon(server, port, enable, proto, uri, body, group, desc, telegram, user_group):
@@ -2765,3 +2774,57 @@ def update_user_services(services, user_id):
out_error(e)
return False
+
+def insert_or_update_service_setting(server_id, service, setting, value):
+ try:
+ ServiceSetting.insert(server_id=server_id, service=service, setting=setting, value=value).on_conflict('replace').execute()
+ except Exception as e:
+ out_error(e)
+ return False
+ else:
+ return True
+
+
+def select_service_settings(server_id: int, service: str) -> str:
+ query = ServiceSetting.select().where((ServiceSetting.server_id == server_id) & (ServiceSetting.service == service))
+ try:
+ query_res = query.execute()
+ except Exception as e:
+ out_error(e)
+ else:
+ return query_res
+
+
+def select_service_setting(server_id: int, service: str, setting: str) -> str:
+ try:
+ result = ServiceSetting.get(
+ (ServiceSetting.server_id == server_id) &
+ (ServiceSetting.service == service) &
+ (ServiceSetting.setting == setting)).value
+ except Exception:
+ pass
+ else:
+ return result
+
+
+def insert_action_history(service: str, action: str, server_id: int, user_id: int, user_ip: str):
+ try:
+ ActionHistory.insert(service=service,
+ action=action,
+ server_id=server_id,
+ user_id=user_id,
+ ip=user_ip,
+ date=funct.get_data('regular')).execute()
+ except Exception as e:
+ out_error(e)
+
+
+def delete_action_history(server_id: int):
+ query = ActionHistory.delete().where(ActionHistory.server_id == server_id)
+ try:
+ query.execute()
+ except Exception as e:
+ out_error(e)
+ return False
+ else:
+ return True
diff --git a/app/templates/ajax/show_compare_configs.html b/app/templates/ajax/show_compare_configs.html
index dbfd3806..95f84ed6 100644
--- a/app/templates/ajax/show_compare_configs.html
+++ b/app/templates/ajax/show_compare_configs.html
@@ -22,7 +22,7 @@
{{ input('serv', type='hidden', value=serv) }}
{{ input('open', type='hidden', value='open') }}
- Show
+ Compare
\ No newline at end of file
diff --git a/app/templates/ajax/show_service_settings.html b/app/templates/ajax/show_service_settings.html
new file mode 100644
index 00000000..bfd7ad8b
--- /dev/null
+++ b/app/templates/ajax/show_service_settings.html
@@ -0,0 +1,30 @@
+{% from 'include/input_macros.html' import checkbox %}
+
+ {% if service == 'haproxy' %}
+ {% if settings %}
+ {% for s in settings %}
+ {% if s.haproxy_enterprise != '' %}
+
+
HAProxy Enterprise
+
+ {% if s.value == '1' and s.setting == 'haproxy_enterprise' %}
+ {{ checkbox('haproxy_enterprise', checked='checked', title='This server uses HAProxy enterprise') }}
+ {% else %}
+ {{ checkbox('haproxy_enterprise', title='This server uses HAProxy community') }}
+ {% endif %}
+
+
+ {% endif %}
+ {% endfor %}
+ {% else %}
+
+
HAProxy Enterprise
+
+ {{ checkbox('haproxy_enterprise', title='This server uses HAProxy community') }}
+
+
+ {% endif %}
+ {% endif %}
+
\ No newline at end of file
diff --git a/app/templates/ajax/show_users_ovw.html b/app/templates/ajax/show_users_ovw.html
new file mode 100644
index 00000000..58238b51
--- /dev/null
+++ b/app/templates/ajax/show_users_ovw.html
@@ -0,0 +1,57 @@
+{% set counter = 0 %}
+{% for USER in users %}
+ {% set counter = counter + loop.index0 %}
+ {% if counter <= 2 %}
+