mirror of https://github.com/Aidaho12/haproxy-wi
parent
da04261673
commit
82700a2ce3
|
@ -15,14 +15,14 @@ def get_token():
|
||||||
try:
|
try:
|
||||||
user_status, user_plan = funct.return_user_status()
|
user_status, user_plan = funct.return_user_status()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
funct.logging('API', 'Cannot get a user plan: ' + str(e), haproxywi=1)
|
funct.logging('API', f'Cannot get a user plan: {e}', roxywi=1)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if user_status == 0:
|
if user_status == 0:
|
||||||
funct.logging('API', 'You are not subscribed. Please subscribe to have access to this feature.', haproxywi=1)
|
funct.logging('API', 'You are not subscribed. Please subscribe to have access to this feature.', roxywi=1)
|
||||||
return False
|
return False
|
||||||
elif user_plan == 'user':
|
elif user_plan == 'user':
|
||||||
funct.logging('API', 'This feature is not available for your plan.', haproxywi=1)
|
funct.logging('API', 'This feature is not available for your plan.', roxywi=1)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -31,17 +31,17 @@ def get_token():
|
||||||
login = login_pass['login']
|
login = login_pass['login']
|
||||||
password_from_user = login_pass['password']
|
password_from_user = login_pass['password']
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return 'error getting credentials: ' + str(e)
|
return f'error getting credentials: {e}'
|
||||||
try:
|
try:
|
||||||
group_name = login_pass['group']
|
group_name = login_pass['group']
|
||||||
group_id = sql.get_group_id_by_name(group_name)
|
group_id = sql.get_group_id_by_name(group_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return 'error getting group: ' + str(e)
|
return f'error getting group: {e}'
|
||||||
try:
|
try:
|
||||||
users = sql.select_users(user=login)
|
users = sql.select_users(user=login)
|
||||||
password = funct.get_hash(password_from_user)
|
password = roxy_wi_tools.Tools.get_hash(password_from_user)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return 'error one more: ' + str(e)
|
return f'error one more: {e}'
|
||||||
|
|
||||||
for user in users:
|
for user in users:
|
||||||
if user.activeuser == 0:
|
if user.activeuser == 0:
|
||||||
|
@ -59,14 +59,14 @@ def check_login(required_service=0) -> bool:
|
||||||
try:
|
try:
|
||||||
user_status, user_plan = funct.return_user_status()
|
user_status, user_plan = funct.return_user_status()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
funct.logging('API', 'Cannot get a user plan: ' + str(e), haproxywi=1)
|
funct.logging('API', f'Cannot get a user plan: {e}', roxywi=1)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if user_status == 0:
|
if user_status == 0:
|
||||||
funct.logging('API', 'You are not subscribed. Please subscribe to have access to this feature.', haproxywi=1)
|
funct.logging('API', 'You are not subscribed. Please subscribe to have access to this feature.', roxywi=1)
|
||||||
return False
|
return False
|
||||||
elif user_plan == 'user':
|
elif user_plan == 'user':
|
||||||
funct.logging('API', 'This feature is not available for your plan.', haproxywi=1)
|
funct.logging('API', 'This feature is not available for your plan.', roxywi=1)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
token = request.headers.get('token')
|
token = request.headers.get('token')
|
||||||
|
@ -349,25 +349,27 @@ def edit_section(server_id):
|
||||||
|
|
||||||
for s in servers:
|
for s in servers:
|
||||||
ip = s[2]
|
ip = s[2]
|
||||||
cfg = '/tmp/' + ip + '.cfg'
|
cfg = f'/tmp/{ip}.cfg'
|
||||||
|
|
||||||
out = funct.get_config(ip, cfg)
|
out = funct.get_config(ip, cfg)
|
||||||
start_line, end_line, config_read = funct.get_section_from_config(cfg, section_name)
|
start_line, end_line, config_read = funct.get_section_from_config(cfg, section_name)
|
||||||
|
|
||||||
returned_config = funct.rewrite_section(start_line, end_line, cfg, body)
|
returned_config = funct.rewrite_section(start_line, end_line, cfg, body)
|
||||||
|
time_zone = sql.get_setting('time_zone')
|
||||||
|
get_date = roxy_wi_tools.GetDate(time_zone)
|
||||||
|
cur_date = get_date.return_date('config')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cfg_for_save = hap_configs_dir + ip + "-" + funct.get_data('config') + ".cfg"
|
cfg_for_save = f'{hap_configs_dir}{ip}-{cur_date}.cfg'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(cfg, "w") as conf:
|
with open(cfg, "w") as conf:
|
||||||
conf.write(returned_config)
|
conf.write(returned_config)
|
||||||
return_mess = 'section has been updated'
|
return_mess = 'section has been updated'
|
||||||
os.system("/bin/cp %s %s" % (cfg, cfg_for_save))
|
os.system(f"/bin/cp {cfg} {cfg_for_save}")
|
||||||
out = funct.master_slave_upload_and_restart(ip, cfg, save, login=login)
|
out = funct.master_slave_upload_and_restart(ip, cfg, save, login=login)
|
||||||
funct.logging('localhost', " section " + section_name + " has been edited via API", login=login)
|
funct.logging('localhost', f" section {section_name} has been edited via API", login=login)
|
||||||
funct.logging(
|
funct.logging(
|
||||||
ip, 'Section ' + section_name + ' has been edited via API', haproxywi=1,
|
ip, f'Section {section_name} has been edited via API', roxywi=1,
|
||||||
login=login, keep_history=1, service='haproxy'
|
login=login, keep_history=1, service='haproxy'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -420,8 +422,11 @@ def upload_config(server_id, **kwargs):
|
||||||
|
|
||||||
for s in servers:
|
for s in servers:
|
||||||
ip = s[2]
|
ip = s[2]
|
||||||
cfg = '/tmp/' + ip + '.cfg'
|
cfg = f'/tmp/{ip}.cfg'
|
||||||
cfg_for_save = configs_dir + ip + "-" + funct.get_data('config') + ".cfg"
|
time_zone = sql.get_setting('time_zone')
|
||||||
|
get_date = roxy_wi_tools.GetDate(time_zone)
|
||||||
|
cur_date = get_date.return_date('config')
|
||||||
|
cfg_for_save = f'{configs_dir}{ip}-{cur_date}.cfg'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(cfg, "w") as conf:
|
with open(cfg, "w") as conf:
|
||||||
|
@ -438,13 +443,13 @@ def upload_config(server_id, **kwargs):
|
||||||
|
|
||||||
funct.logging('localhost', " config has been uploaded via API", login=login)
|
funct.logging('localhost', " config has been uploaded via API", login=login)
|
||||||
funct.logging(
|
funct.logging(
|
||||||
ip, 'Config has been uploaded via API', haproxywi=1, login=login, keep_history=1, service=service_name
|
ip, 'Config has been uploaded via API', roxywi=1, login=login, keep_history=1, service=service_name
|
||||||
)
|
)
|
||||||
|
|
||||||
if out:
|
if out:
|
||||||
return_mess = out
|
return_mess = out
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
return_mess = "cannot upload config" + str(e)
|
return_mess = f"cannot upload config {e}"
|
||||||
|
|
||||||
data = {server_id: return_mess}
|
data = {server_id: return_mess}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -461,6 +466,8 @@ def add_to_config(server_id):
|
||||||
hap_configs_dir = get_config_var.get_config_var('configs', 'haproxy_save_configs_dir')
|
hap_configs_dir = get_config_var.get_config_var('configs', 'haproxy_save_configs_dir')
|
||||||
token = request.headers.get('token')
|
token = request.headers.get('token')
|
||||||
login, group_id = sql.get_username_groupid_from_api_token(token)
|
login, group_id = sql.get_username_groupid_from_api_token(token)
|
||||||
|
time_zone = sql.get_setting('time_zone')
|
||||||
|
get_date = roxy_wi_tools.GetDate(time_zone)
|
||||||
|
|
||||||
if save == '':
|
if save == '':
|
||||||
save = 'save'
|
save = 'save'
|
||||||
|
@ -472,15 +479,16 @@ def add_to_config(server_id):
|
||||||
|
|
||||||
for s in servers:
|
for s in servers:
|
||||||
ip = s[2]
|
ip = s[2]
|
||||||
cfg = '/tmp/' + ip + '.cfg'
|
cfg = f'/tmp/{ip}.cfg'
|
||||||
cfg_for_save = hap_configs_dir + ip + "-" + funct.get_data('config') + ".cfg"
|
cur_date = get_date.return_date('config')
|
||||||
|
cfg_for_save = f'{hap_configs_dir}{ip}-{cur_date}.cfg'
|
||||||
out = funct.get_config(ip, cfg)
|
out = funct.get_config(ip, cfg)
|
||||||
try:
|
try:
|
||||||
with open(cfg, "a") as conf:
|
with open(cfg, "a") as conf:
|
||||||
conf.write('\n' + body + '\n')
|
conf.write('\n' + body + '\n')
|
||||||
|
|
||||||
return_mess = 'section has been added to the config'
|
return_mess = 'section has been added to the config'
|
||||||
os.system("/bin/cp %s %s" % (cfg, cfg_for_save))
|
os.system(f"/bin/cp {cfg} {cfg_for_save}")
|
||||||
funct.logging('localhost', " section has been added via REST API", login=login)
|
funct.logging('localhost', " section has been added via REST API", login=login)
|
||||||
out = funct.upload_and_restart(ip, cfg, just_save=save)
|
out = funct.upload_and_restart(ip, cfg, just_save=save)
|
||||||
|
|
||||||
|
|
14
app/funct.py
14
app/funct.py
|
@ -14,6 +14,7 @@ time_zone = sql.get_setting('time_zone')
|
||||||
get_date = roxy_wi_tools.GetDate(time_zone)
|
get_date = roxy_wi_tools.GetDate(time_zone)
|
||||||
get_config_var = roxy_wi_tools.GetConfigVar()
|
get_config_var = roxy_wi_tools.GetConfigVar()
|
||||||
|
|
||||||
|
|
||||||
def is_ip_or_dns(server_from_request: str) -> str:
|
def is_ip_or_dns(server_from_request: str) -> str:
|
||||||
ip_regex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
|
ip_regex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
|
||||||
dns_regex = "^(?!-)[A-Za-z0-9-]+([\\-\\.]{1}[a-z0-9]+)*\\.[A-Za-z]{2,6}$"
|
dns_regex = "^(?!-)[A-Za-z0-9-]+([\\-\\.]{1}[a-z0-9]+)*\\.[A-Za-z]{2,6}$"
|
||||||
|
@ -112,7 +113,7 @@ def logging(server_ip: str, action: str, **kwargs) -> None:
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if kwargs.get('haproxywi') == 1 or kwargs.get('roxywi') == 1:
|
if kwargs.get('roxywi') == 1:
|
||||||
if kwargs.get('login'):
|
if kwargs.get('login'):
|
||||||
mess = f"{cur_date_in_log} from {ip} user: {login}, group: {user_group}, {action} on: {server_ip}\n"
|
mess = f"{cur_date_in_log} from {ip} user: {login}, group: {user_group}, {action} on: {server_ip}\n"
|
||||||
if kwargs.get('keep_history'):
|
if kwargs.get('keep_history'):
|
||||||
|
@ -1425,20 +1426,11 @@ def versions():
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
new_ver = "Cannot get a new version"
|
new_ver = "Cannot get a new version"
|
||||||
new_ver_without_dots = 0
|
new_ver_without_dots = 0
|
||||||
logging('Roxy-WI server', ' ' + str(e), roxywi=1)
|
logging('Roxy-WI server', f' {e}', roxywi=1)
|
||||||
|
|
||||||
return current_ver, new_ver, current_ver_without_dots, new_ver_without_dots
|
return current_ver, new_ver, current_ver_without_dots, new_ver_without_dots
|
||||||
|
|
||||||
|
|
||||||
def get_hash(value):
|
|
||||||
if value is None:
|
|
||||||
return value
|
|
||||||
import hashlib
|
|
||||||
h = hashlib.md5(value.encode('utf-8'))
|
|
||||||
p = h.hexdigest()
|
|
||||||
return p
|
|
||||||
|
|
||||||
|
|
||||||
def get_users_params(**kwargs):
|
def get_users_params(**kwargs):
|
||||||
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
|
||||||
|
|
||||||
|
|
11
app/login.py
11
app/login.py
|
@ -10,6 +10,7 @@ import distro
|
||||||
|
|
||||||
import sql
|
import sql
|
||||||
import funct
|
import funct
|
||||||
|
import modules.roxy_wi_tools as roxy_wi_tools
|
||||||
|
|
||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
|
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
|
||||||
|
@ -182,7 +183,6 @@ try:
|
||||||
session_ttl = sql.get_setting('session_ttl')
|
session_ttl = sql.get_setting('session_ttl')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
error = f'error: {e}'
|
error = f'error: {e}'
|
||||||
pass
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
role = sql.get_user_role_by_uuid(user_id.value)
|
role = sql.get_user_role_by_uuid(user_id.value)
|
||||||
|
@ -214,7 +214,7 @@ if login is not None and password is not None:
|
||||||
if login in users.username:
|
if login in users.username:
|
||||||
check_in_ldap(login, password)
|
check_in_ldap(login, password)
|
||||||
else:
|
else:
|
||||||
passwordHashed = funct.get_hash(password)
|
passwordHashed = roxy_wi_tools.Tools.get_hash(password)
|
||||||
if login in users.username and passwordHashed == users.password:
|
if login in users.username and passwordHashed == users.password:
|
||||||
send_cookie(login)
|
send_cookie(login)
|
||||||
break
|
break
|
||||||
|
@ -227,8 +227,7 @@ if login is not None and password is not None:
|
||||||
if login is None:
|
if login is None:
|
||||||
print("Content-type: text/html\n")
|
print("Content-type: text/html\n")
|
||||||
|
|
||||||
output_from_parsed_template = template.render(
|
parsed_template = template.render(
|
||||||
h2=0, title="Login page", role=role, user=user, error_log=error_log, error=error, ref=ref,
|
h2=0, title="Login page", role=role, user=user, error_log=error_log, error=error, ref=ref
|
||||||
versions=funct.versions()
|
|
||||||
)
|
)
|
||||||
print(output_from_parsed_template)
|
print(parsed_template)
|
||||||
|
|
|
@ -27,34 +27,21 @@ class GetDate:
|
||||||
self.fmt = "%Y-%m-%d.%H:%M:%S"
|
self.fmt = "%Y-%m-%d.%H:%M:%S"
|
||||||
|
|
||||||
def return_date(self, log_type, **kwargs):
|
def return_date(self, log_type, **kwargs):
|
||||||
|
try:
|
||||||
|
cur_time_zone = timezone(self.time_zone)
|
||||||
|
except Exception:
|
||||||
|
cur_time_zone = timezone('UTC')
|
||||||
|
|
||||||
if kwargs.get('timedelta'):
|
if kwargs.get('timedelta'):
|
||||||
try:
|
now_utc = datetime.now(cur_time_zone) + timedelta(days=kwargs.get('timedelta'))
|
||||||
now_utc = datetime.now(timezone(self.time_zone)) + timedelta(days=kwargs.get('timedelta'))
|
|
||||||
except Exception:
|
|
||||||
now_utc = datetime.now(timezone('UTC')) + timedelta(days=kwargs.get('timedelta'))
|
|
||||||
elif kwargs.get('timedelta_minus'):
|
elif kwargs.get('timedelta_minus'):
|
||||||
try:
|
now_utc = datetime.now(cur_time_zone) - timedelta(days=kwargs.get('timedelta_minus'))
|
||||||
now_utc = datetime.now(timezone(self.time_zone)) - timedelta(
|
|
||||||
days=kwargs.get('timedelta_minus'))
|
|
||||||
except Exception:
|
|
||||||
now_utc = datetime.now(timezone('UTC')) - timedelta(days=kwargs.get('timedelta_minus'))
|
|
||||||
elif kwargs.get('timedelta_minutes'):
|
elif kwargs.get('timedelta_minutes'):
|
||||||
try:
|
now_utc = datetime.now(cur_time_zone) + timedelta(minutes=kwargs.get('timedelta_minutes'))
|
||||||
now_utc = datetime.now(timezone(self.time_zone)) + timedelta(
|
|
||||||
minutes=kwargs.get('timedelta_minutes'))
|
|
||||||
except Exception:
|
|
||||||
now_utc = datetime.now(timezone('UTC')) + timedelta(minutes=kwargs.get('timedelta_minutes'))
|
|
||||||
elif kwargs.get('timedelta_minutes_minus'):
|
elif kwargs.get('timedelta_minutes_minus'):
|
||||||
try:
|
now_utc = datetime.now(cur_time_zone) - timedelta(minutes=kwargs.get('timedelta_minutes_minus'))
|
||||||
now_utc = datetime.now(timezone(self.time_zone)) - timedelta(
|
|
||||||
minutes=kwargs.get('timedelta_minutes_minus'))
|
|
||||||
except Exception:
|
|
||||||
now_utc = datetime.now(timezone('UTC')) - timedelta(minutes=kwargs.get('timedelta_minutes_minus'))
|
|
||||||
else:
|
else:
|
||||||
try:
|
now_utc = datetime.now(cur_time_zone)
|
||||||
now_utc = datetime.now(timezone(self.time_zone))
|
|
||||||
except Exception:
|
|
||||||
now_utc = datetime.now(timezone('UTC'))
|
|
||||||
|
|
||||||
if log_type == 'config':
|
if log_type == 'config':
|
||||||
self.fmt = "%Y-%m-%d.%H:%M:%S"
|
self.fmt = "%Y-%m-%d.%H:%M:%S"
|
||||||
|
@ -66,3 +53,14 @@ class GetDate:
|
||||||
self.fmt = "%Y-%m-%d %H:%M:%S"
|
self.fmt = "%Y-%m-%d %H:%M:%S"
|
||||||
|
|
||||||
return now_utc.strftime(self.fmt)
|
return now_utc.strftime(self.fmt)
|
||||||
|
|
||||||
|
|
||||||
|
class Tools:
|
||||||
|
@staticmethod
|
||||||
|
def get_hash(need_hashed):
|
||||||
|
if need_hashed is None:
|
||||||
|
return need_hashed
|
||||||
|
import hashlib
|
||||||
|
h = hashlib.md5(need_hashed.encode('utf-8'))
|
||||||
|
p = h.hexdigest()
|
||||||
|
return p
|
17
app/sql.py
17
app/sql.py
|
@ -7,6 +7,7 @@ import os
|
||||||
from modules.db_model import *
|
from modules.db_model import *
|
||||||
import modules.roxy_wi_tools as roxy_wi_tools
|
import modules.roxy_wi_tools as roxy_wi_tools
|
||||||
|
|
||||||
|
|
||||||
def get_setting(param, **kwargs):
|
def get_setting(param, **kwargs):
|
||||||
import funct
|
import funct
|
||||||
try:
|
try:
|
||||||
|
@ -45,6 +46,7 @@ def get_setting(param, **kwargs):
|
||||||
time_zone = get_setting('time_zone')
|
time_zone = get_setting('time_zone')
|
||||||
get_date = roxy_wi_tools.GetDate(time_zone)
|
get_date = roxy_wi_tools.GetDate(time_zone)
|
||||||
|
|
||||||
|
|
||||||
def out_error(error):
|
def out_error(error):
|
||||||
error = str(error)
|
error = str(error)
|
||||||
exc_type, exc_obj, exc_tb = sys.exc_info()
|
exc_type, exc_obj, exc_tb = sys.exc_info()
|
||||||
|
@ -56,12 +58,11 @@ def out_error(error):
|
||||||
|
|
||||||
|
|
||||||
def add_user(user, email, password, role, activeuser, group):
|
def add_user(user, email, password, role, activeuser, group):
|
||||||
import funct
|
|
||||||
if password != 'aduser':
|
if password != 'aduser':
|
||||||
try:
|
try:
|
||||||
|
hashed_pass = roxy_wi_tools.Tools.get_hash(password)
|
||||||
User.insert(
|
User.insert(
|
||||||
username=user, email=email, password=funct.get_hash(password), role=role, activeuser=activeuser,
|
username=user, email=email, password=hashed_pass, role=role, activeuser=activeuser, groups=group
|
||||||
groups=group
|
|
||||||
).execute()
|
).execute()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
out_error(e)
|
out_error(e)
|
||||||
|
@ -120,9 +121,9 @@ def update_user_current_groups(groups, user_uuid):
|
||||||
|
|
||||||
|
|
||||||
def update_user_password(password, user_id):
|
def update_user_password(password, user_id):
|
||||||
import funct
|
|
||||||
try:
|
try:
|
||||||
user_update = User.update(password=funct.get_hash(password)).where(User.user_id == user_id)
|
hashed_pass = roxy_wi_tools.Tools.get_hash(password)
|
||||||
|
user_update = User.update(password=hashed_pass).where(User.user_id == user_id)
|
||||||
user_update.execute()
|
user_update.execute()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
out_error(e)
|
out_error(e)
|
||||||
|
@ -1999,7 +2000,7 @@ def select_service_table_metrics(service):
|
||||||
group_id = funct.get_user_group(id=1)
|
group_id = funct.get_user_group(id=1)
|
||||||
|
|
||||||
if service in ('nginx', 'apache'):
|
if service in ('nginx', 'apache'):
|
||||||
metrics_table = '{}_metrics'.format(service)
|
metrics_table = f'{service}_metrics'
|
||||||
|
|
||||||
if funct.check_user_group():
|
if funct.check_user_group():
|
||||||
if group_id == 1:
|
if group_id == 1:
|
||||||
|
@ -2424,9 +2425,9 @@ def select_smon(user_group, **kwargs):
|
||||||
user_group = ''
|
user_group = ''
|
||||||
else:
|
else:
|
||||||
if kwargs.get('ip'):
|
if kwargs.get('ip'):
|
||||||
user_group = "and user_group = '%s'" % user_group
|
user_group = f"and user_group = '{user_group}'"
|
||||||
else:
|
else:
|
||||||
user_group = "where user_group='%s'" % user_group
|
user_group = f"where user_group = '{user_group}'"
|
||||||
|
|
||||||
if kwargs.get('ip'):
|
if kwargs.get('ip'):
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue