diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index 87186e25..3e0f3c16 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -9,4 +9,4 @@ community_bridge: # Replace with a single Community Bridge project-name e.g., cl
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
-custom: ['https://www.paypal.me/haproxywi']
+custom: ['https://paypal.me/loginovpavel']
diff --git a/app/add.py b/app/add.py
index 1b2ea36c..5c6a19de 100644
--- a/app/add.py
+++ b/app/add.py
@@ -27,6 +27,11 @@ try:
token = sql.get_token(user_id.value)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
template = template.render(title = "Add",
role = sql.get_user_role_by_uuid(user_id.value),
@@ -35,6 +40,7 @@ template = template.render(title = "Add",
add = form.getvalue('add'),
conf_add = form.getvalue('conf'),
group = user_group,
+ current_ver = current_ver,
token = token)
print(template)
diff --git a/app/blacklist.py b/app/blacklist.py
index 5e2543ab..3eb6bc98 100644
--- a/app/blacklist.py
+++ b/app/blacklist.py
@@ -27,6 +27,11 @@ try:
except:
pass
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
+
dir = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')
white_dir = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+user_group+"/white"
black_dir = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+user_group+"/black"
@@ -49,5 +54,6 @@ template = template.render(h2 = 1,
white_lists = white_lists,
black_lists = black_lists,
group = user_group,
+ current_ver = current_ver,
token = token)
print(template)
\ No newline at end of file
diff --git a/app/config.py b/app/config.py
index e9944247..b5aaa569 100644
--- a/app/config.py
+++ b/app/config.py
@@ -28,6 +28,11 @@ try:
role = sql.get_user_role_by_uuid(user_id.value)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
hap_configs_dir = funct.get_config_var('configs', 'haproxy_save_configs_dir')
@@ -98,5 +103,6 @@ template = template.render(h2 = 1, title = "Working with HAProxy configs",
stderr = stderr,
error = error,
note = 1,
+ current_ver = current_ver,
token = token)
print(template)
\ No newline at end of file
diff --git a/app/configver.py b/app/configver.py
index 24b48ddb..33f5a86d 100644
--- a/app/configver.py
+++ b/app/configver.py
@@ -27,6 +27,11 @@ try:
token = sql.get_token(user_id.value)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
if serv is not None and form.getvalue('config') is not None:
configver = form.getvalue('configver')
@@ -66,5 +71,6 @@ template = template.render(h2 = 1, title = "Old Versions HAProxy config",
onclick = "showUploadConfig()",
note = 1,
token = token,
+ current_ver = current_ver,
view = view)
print(template)
diff --git a/app/create_db.py b/app/create_db.py
index 70a55594..8f4d41fa 100644
--- a/app/create_db.py
+++ b/app/create_db.py
@@ -121,13 +121,14 @@ def create_table(**kwargs):
CREATE TABLE IF NOT EXISTS `telegram` (`id` integer primary key autoincrement, `token` VARCHAR ( 64 ), `chanel_name` INTEGER NOT NULL DEFAULT 1, `groups` INTEGER NOT NULL DEFAULT 1);
CREATE TABLE IF NOT EXISTS `metrics` (`serv` varchar(64), curr_con INTEGER, cur_ssl_con INTEGER, sess_rate INTEGER, max_sess_rate INTEGER,`date` timestamp default '0000-00-00 00:00:00');
CREATE TABLE IF NOT EXISTS `settings` (`param` varchar(64) UNIQUE, value varchar(64), section varchar(64), `desc` varchar(100));
+ CREATE TABLE IF NOT EXISTS `version` (`version` varchar(64));
"""
try:
cur.executescript(sql)
except sqltool.Error as e:
if kwargs.get('silent') != 1:
if e.args[0] == 'column email is not unique' or e == "1060 (42S21): column email is not unique' ":
- print('Updating... go to version 3.0
')
+ print('Updating... go to version 3.0')
else:
print("An error occurred:", e)
return False
@@ -172,14 +173,22 @@ def update_db_v_31(**kwargs):
"INSERT INTO settings (param, value, section, `desc`) values('cert_path', '/etc/ssl/certs/', 'haproxy', 'Path to SSL dir');",
"INSERT INTO settings (param, value, section, `desc`) values('firewall_enable', '0', 'haproxy', 'If enable this option Haproxy-wi will be configure firewalld based on config port');",
"INSERT INTO settings (param, value, section, `desc`) values('lists_path', 'lists', 'main', 'Path to black/white lists');",
- "INSERT INTO settings (param, value, section, `desc`) values('apache_log_path', '/var/log/httpd/', 'logs', 'Path to Apache logs');" ]
+ "INSERT INTO settings (param, value, section, `desc`) values('apache_log_path', '/var/log/httpd/', 'logs', 'Path to Apache logs');"
+ "INSERT INTO settings (param, value, section, `desc`) values('ldap_enable', '0', 'ldap', 'If 1 ldap enabled');",
+ "INSERT INTO settings (param, value, section, `desc`) values('ldap_server', '', 'ldap', 'IP address ldap server');",
+ "INSERT INTO settings (param, value, section, `desc`) values('ldap_port', '389', 'ldap', 'Default port is 389 or 636');",
+ "INSERT INTO settings (param, value, section, `desc`) values('ldap_user', '', 'ldap', 'Login for connect to LDAP server. Enter: user@domain.com');",
+ "INSERT INTO settings (param, value, section, `desc`) values('ldap_password', '', 'ldap', 'Password for connect to LDAP server');",
+ "INSERT INTO settings (param, value, section, `desc`) values('ldap_base', '', 'ldap', 'Base domain. Example: dc=domain, dc=com');",
+ "INSERT INTO settings (param, value, section, `desc`) values('ldap_domain', '', 'ldap', 'Domain for login, that after @, like user@domain.com, without user@');",
+ "INSERT INTO settings (param, value, section, `desc`) values('ldap_search_field', 'mail', 'ldap', 'Field where user e-mail saved'" ]
try:
for i in sql:
cur.execute(i)
con.commit()
except sqltool.Error as e:
if kwargs.get('silent') != 1:
- if e.args[0] == 'duplicate column name: desc' or e == "1060 (42S21): Duplicate column name 'desc' ":
+ if e.args[0] == 'column param is not unique' or e == "1060 (42S21): column param is not unique ":
print('Updating... go to version 3.2')
else:
print("An error occurred:", e)
@@ -199,7 +208,7 @@ def update_db_v_3_2(**kwargs):
except sqltool.Error as e:
if kwargs.get('silent') != 1:
if e.args[0] == 'duplicate column name: server_id' or e == "1060 (42S21): Duplicate column name 'server_id' ":
- print('DB was updated')
+ print('Updating... go to version 3.2')
else:
print("An error occurred:", e.args[0])
return False
@@ -258,44 +267,17 @@ def update_db_v_3_2_8(**kwargs):
except sqltool.Error as e:
if kwargs.get('silent') != 1:
if e.args[0] == 'duplicate column name: desc' or e == " 1060 (42S21): Duplicate column name 'desc' ":
- print('DB was update
')
+ print('Updating... go to version 3.3')
else:
print("An error occurred:", e)
return False
else:
- print("DB was update to 3.2.8
")
+ print("DB was update to 3.2.8")
return True
cur.close()
con.close()
-def update_db_v_3_3(**kwargs):
- con, cur = get_cur()
- sql = [ "INSERT INTO settings (param, value, section, `desc`) values('ldap_enable', '0', 'ldap', 'If 1 ldap enabled');",
- "INSERT INTO settings (param, value, section, `desc`) values('ldap_server', '', 'ldap', 'IP address ldap server');",
- "INSERT INTO settings (param, value, section, `desc`) values('ldap_port', '389', 'ldap', 'Default port is 389 or 636');",
- "INSERT INTO settings (param, value, section, `desc`) values('ldap_user', '', 'ldap', 'Login for connect to LDAP server. Enter: user@domain.com');",
- "INSERT INTO settings (param, value, section, `desc`) values('ldap_password', '', 'ldap', 'Password for connect to LDAP server');",
- "INSERT INTO settings (param, value, section, `desc`) values('ldap_base', '', 'ldap', 'Base domain. Example: dc=domain, dc=com');",
- "INSERT INTO settings (param, value, section, `desc`) values('ldap_domain', '', 'ldap', 'Domain for login, that after @, like user@domain.com, without user@');",
- "INSERT INTO settings (param, value, section, `desc`) values('ldap_search_field', 'mail', 'ldap', 'Field where user e-mail saved');"]
- try:
- for i in sql:
- cur.execute(i)
- con.commit()
- except sqltool.Error as e:
- if kwargs.get('silent') != 1:
- if e.args[0] == 'duplicate column name: desc' or e == "1060 (42S21): Duplicate column name 'desc' ":
- print('Updating... go to version 3.2')
- else:
- print("An error occurred:", e)
- return False
- else:
- pass
- return True
- cur.close()
- con.close()
-
def update_db_v_3_31(**kwargs):
con, cur = get_cur()
sql = """
@@ -312,7 +294,7 @@ def update_db_v_3_31(**kwargs):
print("An error occurred:", e)
return False
else:
- print("DB was update to 3.3
")
+ print("DB was update to 3.3")
return True
cur.close()
con.close()
@@ -334,7 +316,7 @@ def update_db_v_3_4(**kwargs):
print("An error occurred:", e)
return False
else:
- print("Updating... go to version 3.4.1
")
+ print("Updating... go to version 3.4.1")
return True
cur.close()
con.close()
@@ -350,17 +332,60 @@ def update_db_v_3_4_1(**kwargs):
con.commit()
except sqltool.Error as e:
if kwargs.get('silent') != 1:
- if e.args[0] == 'duplicate column name: active' or e == " 1060 (42S21): Duplicate column name 'active' ":
- print('Updating... go to version 3.4.1')
+ if e.args[0] == 'duplicate column name: activeuser' or e == " 1060 (42S21): Duplicate column name 'activeuser' ":
+ print('Updating... go to version 3.4.5.2')
else:
print("An error occurred:", e)
return False
else:
- print("DB was update to 3.4.1
")
+ print("Updating... go to version 3.4.5.2")
return True
cur.close()
con.close()
+
+def update_db_v_3_4_5_2(**kwargs):
+ con, cur = get_cur()
+ sql = """CREATE TABLE IF NOT EXISTS `version` (`version` varchar(64)); """
+ try:
+ cur.execute(sql)
+ con.commit()
+ except sqltool.Error as e:
+ if kwargs.get('silent') != 1:
+ if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ":
+ print('Updating... go to version 2.6')
+ else:
+ print("DB was update to 3.4.5.2")
+ return False
+ else:
+ return True
+ cur.close()
+ con.close()
+
+
+def update_db_v_3_4_5_22(**kwargs):
+ con, cur = get_cur()
+ sql = """insert into version ('version') values ('3.4.5.2'); """
+ try:
+ cur.execute(sql)
+ con.commit()
+ except sqltool.Error as e:
+ print('Cannot insert version')
+ cur.close()
+ con.close()
+
+
+def update_ver(**kwargs):
+ con, cur = get_cur()
+ sql = """update version set version = '3.4.5.2'; """
+ try:
+ cur.execute(sql)
+ con.commit()
+ except sqltool.Error as e:
+ print('Cannot update version')
+ cur.close()
+ con.close()
+
def update_all():
update_db_v_31()
@@ -368,10 +393,14 @@ def update_all():
update_db_v_3_21()
update_db_v_3_2_3()
update_db_v_3_2_8()
- update_db_v_3_3()
update_db_v_3_31()
update_db_v_3_4()
update_db_v_3_4_1()
+ update_db_v_3_4_5_2()
+ if funct.check_ver() is None:
+ update_db_v_3_4_5_22()
+ update_ver()
+
def update_all_silent():
update_db_v_31(silent=1)
@@ -379,10 +408,14 @@ def update_all_silent():
update_db_v_3_21(silent=1)
update_db_v_3_2_3(silent=1)
update_db_v_3_2_8(silent=1)
- update_db_v_3_3(silent=1)
update_db_v_3_31(silent=1)
update_db_v_3_4(silent=1)
update_db_v_3_4_1(silent=1)
+ update_db_v_3_4_5_2(silent=1)
+ if funct.check_ver() is None:
+ update_db_v_3_4_5_22()
+ update_ver()
+
if __name__ == "__main__":
create_table()
diff --git a/app/delver.py b/app/delver.py
index 3f0dfc9b..38e1c511 100644
--- a/app/delver.py
+++ b/app/delver.py
@@ -27,6 +27,11 @@ try:
token = sql.get_token(user_id.value)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
form = cgi.FieldStorage()
serv = form.getvalue('serv')
@@ -58,5 +63,6 @@ output_from_parsed_template = template.render(h2 = 1, title = "Delete old versio
open = form.getvalue('open'),
Select = form.getvalue('del'),
file = file,
+ current_ver = current_ver,
token = token)
print(output_from_parsed_template)
\ No newline at end of file
diff --git a/app/edit.py b/app/edit.py
index a29fd42a..6eccb56d 100644
--- a/app/edit.py
+++ b/app/edit.py
@@ -24,6 +24,11 @@ try:
servbackend = ""
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
output_from_parsed_template = template.render(h2 = 1,
title = "Runtime API",
@@ -34,5 +39,6 @@ output_from_parsed_template = template.render(h2 = 1,
selects = servers,
token = token,
serv = serv,
+ current_ver = current_ver,
servbackend = servbackend)
print(output_from_parsed_template)
\ No newline at end of file
diff --git a/app/funct.py b/app/funct.py
index ac6bbafa..afe570da 100644
--- a/app/funct.py
+++ b/app/funct.py
@@ -292,6 +292,14 @@ def waf_install(serv, **kwargs):
stderr = ssh_command(serv, commands, print_out="1")
if stderr is None:
sql.insert_waf_metrics_enable(serv, "0")
+
+
+def update_haproxy_wi():
+ cmd = 'sudo -S yum -y update haproxy-wi'
+ output, stderr = subprocess_execute(cmd)
+ print(output)
+ print(stderr)
+
def check_haproxy_version(serv):
import sql
@@ -497,4 +505,28 @@ def get_files(dir = get_config_var('configs', 'haproxy_save_configs_dir'), forma
return files
def get_key(item):
- return item[0]
\ No newline at end of file
+ return item[0]
+
+
+def check_ver():
+ import sql
+ return sql.get_ver()
+
+
+def check_new_version():
+ import urllib.request
+ import ssl
+ import sql
+
+ proxy = sql.get_setting('proxy')
+ context = ssl._create_unverified_context()
+
+ if proxy:
+ proxyDict = { "https" : proxy }
+ response = urllib.request.urlopen('https://haproxy-wi.org/update.py?last_ver=1', context=context, proxies=proxyDict)
+ else:
+ response = urllib.request.urlopen('https://haproxy-wi.org/update.py?last_ver=1', context=context)
+
+ res = response.read().decode(encoding='UTF-8')
+
+ return res
\ No newline at end of file
diff --git a/app/ha.py b/app/ha.py
index 782e017b..16a9ad95 100644
--- a/app/ha.py
+++ b/app/ha.py
@@ -22,11 +22,17 @@ try:
token = sql.get_token(user_id.value)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
output_from_parsed_template = template.render(h2 = 1, title = "Configure HA",
role = sql.get_user_role_by_uuid(user_id.value),
user = user,
serv = serv,
selects = servers,
+ current_ver = current_ver,
token = token)
print(output_from_parsed_template)
\ No newline at end of file
diff --git a/app/ihap.py b/app/ihap.py
index 57d4b7e8..a5326885 100644
--- a/app/ihap.py
+++ b/app/ihap.py
@@ -19,12 +19,18 @@ try:
token = sql.get_token(user_id.value)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
output_from_parsed_template = template.render(h2 = 1, title = "Installation HAProxy",
role = sql.get_user_role_by_uuid(user_id.value),
user = user,
select_id = "haproxyaddserv",
selects = servers,
+ current_ver = current_ver,
token = token)
print(output_from_parsed_template)
diff --git a/app/keepalivedconfig.py b/app/keepalivedconfig.py
index 6e0bc091..4b03b852 100644
--- a/app/keepalivedconfig.py
+++ b/app/keepalivedconfig.py
@@ -31,6 +31,11 @@ try:
token = sql.get_token(user_id.value)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
if serv is not None:
cfg = kp_save_configs_dir+ serv + '-' + funct.get_data('config') + '.conf'
@@ -87,5 +92,6 @@ output_from_parsed_template = template.render(h2 = 1, title = "Edit Runnig Keepa
stderr = stderr,
error = error,
keepalived = 1,
+ current_ver = current_ver,
token = token)
print(output_from_parsed_template)
\ No newline at end of file
diff --git a/app/lists.py b/app/lists.py
index 5e2543ab..3eb6bc98 100644
--- a/app/lists.py
+++ b/app/lists.py
@@ -27,6 +27,11 @@ try:
except:
pass
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
+
dir = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')
white_dir = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+user_group+"/white"
black_dir = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+user_group+"/black"
@@ -49,5 +54,6 @@ template = template.render(h2 = 1,
white_lists = white_lists,
black_lists = black_lists,
group = user_group,
+ current_ver = current_ver,
token = token)
print(template)
\ No newline at end of file
diff --git a/app/login.py b/app/login.py
index 62597f8c..4d77edfa 100644
--- a/app/login.py
+++ b/app/login.py
@@ -113,6 +113,11 @@ except:
user = ""
pass
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
+
if form.getvalue('logout'):
try:
sql.delete_uuid(user_id.value)
@@ -161,5 +166,6 @@ output_from_parsed_template = template.render(h2 = 1, title = "Login page. Enter
error_log = error_log,
error = error,
ref = ref,
+ current_ver = current_ver,
db_create = db_create)
print(output_from_parsed_template)
\ No newline at end of file
diff --git a/app/logs.py b/app/logs.py
index 7dc60e90..462d6075 100644
--- a/app/logs.py
+++ b/app/logs.py
@@ -30,6 +30,11 @@ try:
token = sql.get_token(user_id.value)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
output_from_parsed_template = template.render(h2 = 1,
autorefresh = 1,
@@ -42,6 +47,7 @@ output_from_parsed_template = template.render(h2 = 1,
serv = form.getvalue('serv'),
rows = rows,
grep = grep,
+ current_ver = current_ver,
token = token)
print(output_from_parsed_template)
diff --git a/app/metrics.py b/app/metrics.py
index da7ea194..42ffb4ed 100644
--- a/app/metrics.py
+++ b/app/metrics.py
@@ -18,6 +18,11 @@ try:
token = sql.get_token(user_id.value)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
template = template.render(h2 = 1, title = "Metrics",
autorefresh = 1,
@@ -25,5 +30,6 @@ template = template.render(h2 = 1, title = "Metrics",
user = user,
onclick = "metricsShow()",
table_stat = sql.select_table_metrics(user_id.value),
+ current_ver = current_ver,
token = token)
print(template)
\ No newline at end of file
diff --git a/app/options.py b/app/options.py
index 106b209b..b9e90166 100644
--- a/app/options.py
+++ b/app/options.py
@@ -402,6 +402,10 @@ if form.getvalue('haproxyaddserv'):
if form.getvalue('installwaf'):
funct.waf_install(form.getvalue('installwaf'))
+
+if form.getvalue('update_haproxy_wi'):
+ funct.update_haproxy_wi()
+
if form.getvalue('metrics_waf'):
sql.update_waf_metrics_enable(form.getvalue('metrics_waf'), form.getvalue('enable'))
diff --git a/app/overview.py b/app/overview.py
index f90805d1..d941f456 100644
--- a/app/overview.py
+++ b/app/overview.py
@@ -30,6 +30,11 @@ try:
metrics_worker, stderr = funct.subprocess_execute(cmd)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
template = template.render(h2 = 1,
autorefresh = 1,
@@ -43,5 +48,6 @@ template = template.render(h2 = 1,
checker_master = ''.join(checker_master),
checker_worker = ''.join(checker_worker),
error = stderr,
+ current_ver = current_ver,
token = token)
print(template)
diff --git a/app/servers.py b/app/servers.py
index 98c1d85f..831a1724 100644
--- a/app/servers.py
+++ b/app/servers.py
@@ -22,6 +22,11 @@ try:
ldap_enable = sql.get_setting('ldap_enable')
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
output_from_parsed_template = template.render(title = "Servers manage",
role = sql.get_user_role_by_uuid(user_id.value),
@@ -35,5 +40,6 @@ output_from_parsed_template = template.render(title = "Servers manage",
sshs = sql.select_ssh(),
telegrams = sql.get_user_telegram_by_uuid(user_id.value),
token = token,
+ current_ver = current_ver,
ldap_enable = ldap_enable)
print(output_from_parsed_template)
\ No newline at end of file
diff --git a/app/settings.py b/app/settings.py
index eb99e61b..20232399 100644
--- a/app/settings.py
+++ b/app/settings.py
@@ -21,10 +21,16 @@ try:
token = sql.get_token(user_id.value)
except:
pass
+
+try:
+ current_ver = funct.check_ver()
+except:
+ pass
template = template.render(h2 = 1, title = "Settings",
role = sql.get_user_role_by_uuid(user_id.value),
user = user,
settings = settings,
+ current_ver = current_ver,
token = token)
print(template)
\ No newline at end of file
diff --git a/app/sql.py b/app/sql.py
index aaaa5304..1ca24b0a 100644
--- a/app/sql.py
+++ b/app/sql.py
@@ -1088,6 +1088,20 @@ def update_setting(param, val):
cur.close()
con.close()
+
+def get_ver():
+ con, cur = create_db.get_cur()
+ sql = """ select * from version; """
+ try:
+ cur.execute(sql)
+ except sqltool.Error as e:
+ out_error(e)
+ else:
+ for ver in cur.fetchall():
+ return ver[0]
+ cur.close()
+ con.close()
+
def show_update_telegram(token, page):
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates/ajax'))
diff --git a/app/templates/base.html b/app/templates/base.html
index d4054acf..94c24f43 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -108,6 +108,7 @@