2022-11-17 07:34:58 +00:00
|
|
|
import os
|
|
|
|
import glob
|
|
|
|
|
2023-09-30 21:38:22 +00:00
|
|
|
from flask import request
|
2022-11-17 07:34:58 +00:00
|
|
|
|
|
|
|
import modules.db.sql as sql
|
|
|
|
import modules.roxy_wi_tools as roxy_wi_tools
|
|
|
|
|
|
|
|
time_zone = sql.get_setting('time_zone')
|
|
|
|
get_date = roxy_wi_tools.GetDate(time_zone)
|
|
|
|
get_config_var = roxy_wi_tools.GetConfigVar()
|
|
|
|
|
2022-11-17 09:49:30 +00:00
|
|
|
|
2023-03-08 13:15:15 +00:00
|
|
|
def return_error_message():
|
|
|
|
return 'error: All fields must be completed'
|
|
|
|
|
|
|
|
|
2022-11-17 07:34:58 +00:00
|
|
|
def get_user_group(**kwargs) -> str:
|
|
|
|
user_group = ''
|
|
|
|
|
|
|
|
try:
|
2023-09-17 09:42:39 +00:00
|
|
|
user_group_id = request.cookies.get('group')
|
|
|
|
groups = sql.select_groups(id=user_group_id)
|
2022-11-17 07:34:58 +00:00
|
|
|
for g in groups:
|
2023-09-17 09:42:39 +00:00
|
|
|
if g.group_id == int(user_group_id):
|
2022-11-17 07:34:58 +00:00
|
|
|
if kwargs.get('id'):
|
|
|
|
user_group = g.group_id
|
|
|
|
else:
|
|
|
|
user_group = g.name
|
2023-09-17 09:42:39 +00:00
|
|
|
except Exception as e:
|
|
|
|
raise Exception(f'error: {e}')
|
2022-11-17 07:34:58 +00:00
|
|
|
return user_group
|
|
|
|
|
|
|
|
|
2023-09-17 09:42:39 +00:00
|
|
|
def check_user_group_for_flask(**kwargs):
|
|
|
|
if kwargs.get('token') is not None:
|
|
|
|
return True
|
|
|
|
|
|
|
|
if kwargs.get('user_uuid'):
|
|
|
|
group_id = kwargs.get('user_group_id')
|
|
|
|
user_uuid = kwargs.get('user_uuid')
|
|
|
|
user_id = sql.get_user_id_by_uuid(user_uuid)
|
|
|
|
else:
|
|
|
|
user_uuid = request.cookies.get('uuid')
|
|
|
|
group_id = request.cookies.get('group')
|
|
|
|
user_id = sql.get_user_id_by_uuid(user_uuid)
|
2022-11-17 07:34:58 +00:00
|
|
|
|
|
|
|
if sql.check_user_group(user_id, group_id):
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
logging('Roxy-WI server', ' has tried to actions in not his group ', roxywi=1, login=1)
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
def get_user_id(**kwargs):
|
|
|
|
if kwargs.get('login'):
|
|
|
|
return sql.get_user_id_by_username(kwargs.get('login'))
|
|
|
|
|
2023-09-17 09:42:39 +00:00
|
|
|
user_uuid = request.cookies.get('uuid')
|
2022-11-17 07:34:58 +00:00
|
|
|
|
|
|
|
if user_uuid is not None:
|
2023-09-17 09:42:39 +00:00
|
|
|
user_id = sql.get_user_id_by_uuid(user_uuid)
|
2022-11-17 07:34:58 +00:00
|
|
|
|
|
|
|
return user_id
|
|
|
|
|
|
|
|
|
|
|
|
def check_is_server_in_group(server_ip: str) -> bool:
|
|
|
|
group_id = get_user_group(id=1)
|
|
|
|
servers = sql.select_servers(server=server_ip)
|
|
|
|
for s in servers:
|
|
|
|
if (s[2] == server_ip and int(s[3]) == int(group_id)) or group_id == 1:
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
logging('Roxy-WI server', ' has tried to actions in not his group server ', roxywi=1, login=1)
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
2023-09-17 09:42:39 +00:00
|
|
|
def get_files(folder, file_format, server_ip=None) -> list:
|
2022-11-17 07:34:58 +00:00
|
|
|
if file_format == 'log':
|
|
|
|
file = []
|
|
|
|
else:
|
|
|
|
file = set()
|
|
|
|
return_files = set()
|
|
|
|
i = 0
|
|
|
|
for files in sorted(glob.glob(os.path.join(folder, f'*.{file_format}*'))):
|
|
|
|
if file_format == 'log':
|
|
|
|
try:
|
|
|
|
file += [(i, files.split('/')[4])]
|
|
|
|
except Exception as e:
|
|
|
|
print(e)
|
|
|
|
else:
|
|
|
|
file.add(files.split('/')[-1])
|
|
|
|
i += 1
|
|
|
|
files = file
|
|
|
|
if file_format == 'cfg' or file_format == 'conf':
|
|
|
|
for file in files:
|
|
|
|
ip = file.split("-")
|
2023-09-17 09:42:39 +00:00
|
|
|
if server_ip == ip[0]:
|
2022-11-17 07:34:58 +00:00
|
|
|
return_files.add(file)
|
|
|
|
return sorted(return_files, reverse=True)
|
|
|
|
else:
|
|
|
|
return file
|
|
|
|
|
|
|
|
|
|
|
|
def logging(server_ip: str, action: str, **kwargs) -> None:
|
|
|
|
login = ''
|
|
|
|
cur_date = get_date.return_date('logs')
|
|
|
|
cur_date_in_log = get_date.return_date('date_in_log')
|
|
|
|
log_path = get_config_var.get_config_var('main', 'log_path')
|
|
|
|
|
|
|
|
if not os.path.exists(log_path):
|
|
|
|
os.makedirs(log_path)
|
|
|
|
|
|
|
|
try:
|
|
|
|
user_group = get_user_group()
|
|
|
|
except Exception:
|
|
|
|
user_group = ''
|
|
|
|
|
|
|
|
try:
|
2023-09-30 21:38:22 +00:00
|
|
|
ip = request.remote_addr
|
2022-11-17 07:34:58 +00:00
|
|
|
except Exception:
|
|
|
|
ip = ''
|
|
|
|
|
|
|
|
try:
|
2023-09-17 09:42:39 +00:00
|
|
|
user_uuid = request.cookies.get('uuid')
|
|
|
|
login = sql.get_user_name_by_uuid(user_uuid)
|
2022-11-17 07:34:58 +00:00
|
|
|
except Exception:
|
2023-10-01 11:35:01 +00:00
|
|
|
if kwargs.get('login'):
|
|
|
|
login = kwargs.get('login')
|
2022-11-17 07:34:58 +00:00
|
|
|
|
|
|
|
if kwargs.get('roxywi') == 1:
|
|
|
|
if kwargs.get('login'):
|
|
|
|
mess = f"{cur_date_in_log} from {ip} user: {login}, group: {user_group}, {action} on: {server_ip}\n"
|
|
|
|
if kwargs.get('keep_history'):
|
|
|
|
try:
|
|
|
|
keep_action_history(kwargs.get('service'), action, server_ip, login, ip)
|
|
|
|
except Exception as e:
|
|
|
|
print(str(e))
|
|
|
|
else:
|
|
|
|
mess = f"{cur_date_in_log} {action} from {ip}\n"
|
|
|
|
log_file = f"{log_path}/roxy-wi-{cur_date}.log"
|
|
|
|
elif kwargs.get('provisioning') == 1:
|
|
|
|
mess = f"{cur_date_in_log} from {ip} user: {login}, group: {user_group}, {action}\n"
|
|
|
|
log_file = f"{log_path}/provisioning-{cur_date}.log"
|
|
|
|
else:
|
|
|
|
mess = f"{cur_date_in_log} from {ip} user: {login}, group: {user_group}, {action} on: {server_ip}\n"
|
|
|
|
log_file = f"{log_path}/config_edit-{cur_date}.log"
|
|
|
|
|
|
|
|
if kwargs.get('keep_history'):
|
2022-12-09 12:14:05 +00:00
|
|
|
try:
|
|
|
|
keep_action_history(kwargs.get('service'), action, server_ip, login, ip)
|
|
|
|
except Exception:
|
|
|
|
pass
|
2022-11-17 07:34:58 +00:00
|
|
|
|
|
|
|
try:
|
|
|
|
with open(log_file, 'a') as log:
|
|
|
|
log.write(mess)
|
|
|
|
except IOError as e:
|
|
|
|
print(f'<center><div class="alert alert-danger">Cannot write log. Please check log_path in config {e}</div></center>')
|
|
|
|
|
|
|
|
|
|
|
|
def keep_action_history(service: str, action: str, server_ip: str, login: str, user_ip: str):
|
|
|
|
try:
|
|
|
|
server_id = sql.select_server_id_by_ip(server_ip=server_ip)
|
2023-01-24 07:34:14 +00:00
|
|
|
hostname = sql.get_hostname_by_server_ip(server_ip)
|
2022-11-17 07:34:58 +00:00
|
|
|
if login != '':
|
|
|
|
user_id = sql.get_user_id_by_username(login)
|
|
|
|
else:
|
|
|
|
user_id = 0
|
|
|
|
if user_ip == '':
|
|
|
|
user_ip = 'localhost'
|
|
|
|
|
2023-01-24 07:34:14 +00:00
|
|
|
sql.insert_action_history(service, action, server_id, user_id, user_ip, server_ip, hostname)
|
2022-11-17 07:34:58 +00:00
|
|
|
except Exception as e:
|
|
|
|
logging('Roxy-WI server', f'Cannot save a history: {e}', roxywi=1)
|
|
|
|
|
|
|
|
|
|
|
|
def get_dick_permit(**kwargs):
|
|
|
|
if kwargs.get('token'):
|
|
|
|
token = kwargs.get('token')
|
|
|
|
else:
|
|
|
|
token = ''
|
|
|
|
|
2023-09-17 09:42:39 +00:00
|
|
|
if not kwargs.get('group_id'):
|
|
|
|
try:
|
|
|
|
group_id = get_user_group(id=1)
|
|
|
|
except Exception as e:
|
|
|
|
return str(e)
|
|
|
|
else:
|
2023-09-18 11:13:37 +00:00
|
|
|
group_id = kwargs.pop('group_id')
|
2023-09-17 09:42:39 +00:00
|
|
|
|
|
|
|
if check_user_group_for_flask(token=token):
|
2023-04-16 13:43:05 +00:00
|
|
|
try:
|
2023-09-17 09:42:39 +00:00
|
|
|
servers = sql.get_dick_permit(group_id, **kwargs)
|
2023-04-16 13:43:05 +00:00
|
|
|
except Exception as e:
|
|
|
|
raise Exception(e)
|
|
|
|
else:
|
|
|
|
return servers
|
2022-11-17 07:34:58 +00:00
|
|
|
else:
|
|
|
|
print('Atata!')
|
|
|
|
|
|
|
|
|
|
|
|
def get_users_params(**kwargs):
|
|
|
|
try:
|
2023-09-17 09:42:39 +00:00
|
|
|
user_uuid = request.cookies.get('uuid')
|
|
|
|
user = sql.get_user_name_by_uuid(user_uuid)
|
2022-11-17 07:34:58 +00:00
|
|
|
except Exception:
|
2023-09-30 21:38:22 +00:00
|
|
|
raise Exception('error: Cannot get user UUID')
|
2023-03-03 20:03:41 +00:00
|
|
|
|
|
|
|
try:
|
2023-09-17 09:42:39 +00:00
|
|
|
group_id = int(request.cookies.get('group'))
|
2023-10-16 10:12:36 +00:00
|
|
|
except Exception as e:
|
|
|
|
raise Exception(f'error: Cannot get user group: {e}')
|
2023-03-03 20:03:41 +00:00
|
|
|
|
2022-11-17 07:34:58 +00:00
|
|
|
try:
|
2023-09-17 09:42:39 +00:00
|
|
|
role = sql.get_user_role_by_uuid(user_uuid, group_id)
|
2022-11-17 07:34:58 +00:00
|
|
|
except Exception:
|
2023-09-30 21:38:22 +00:00
|
|
|
raise Exception('error: Cannot get user role')
|
|
|
|
|
2022-11-17 07:34:58 +00:00
|
|
|
try:
|
2023-09-17 09:42:39 +00:00
|
|
|
user_id = sql.get_user_id_by_uuid(user_uuid)
|
2023-10-16 10:12:36 +00:00
|
|
|
except Exception as e:
|
|
|
|
raise Exception(f'error: Cannot get user id {e}')
|
|
|
|
|
|
|
|
try:
|
2022-11-17 07:34:58 +00:00
|
|
|
user_services = sql.select_user_services(user_id)
|
2023-10-16 10:12:36 +00:00
|
|
|
except Exception as e:
|
|
|
|
raise Exception(f'error: Cannot get user services {e}')
|
|
|
|
|
|
|
|
try:
|
2023-09-17 09:42:39 +00:00
|
|
|
token = sql.get_token(user_uuid)
|
2023-10-16 10:12:36 +00:00
|
|
|
except Exception as e:
|
|
|
|
raise Exception(f'error: Cannot get user token {e}')
|
2022-11-17 07:34:58 +00:00
|
|
|
|
2023-10-16 10:12:36 +00:00
|
|
|
if kwargs.get('virt') and kwargs.get('service') == 'haproxy':
|
2022-11-17 07:34:58 +00:00
|
|
|
servers = get_dick_permit(virt=1, haproxy=1)
|
|
|
|
elif kwargs.get('virt'):
|
|
|
|
servers = get_dick_permit(virt=1)
|
|
|
|
elif kwargs.get('disable'):
|
|
|
|
servers = get_dick_permit(disable=0)
|
|
|
|
elif kwargs.get('service'):
|
|
|
|
servers = get_dick_permit(service=kwargs.get('service'))
|
|
|
|
else:
|
|
|
|
servers = get_dick_permit()
|
|
|
|
|
2023-09-17 09:42:39 +00:00
|
|
|
user_lang = get_user_lang_for_flask()
|
2023-02-13 14:45:45 +00:00
|
|
|
|
2022-11-17 07:34:58 +00:00
|
|
|
user_params = {
|
|
|
|
'user': user,
|
|
|
|
'user_uuid': user_uuid,
|
|
|
|
'role': role,
|
|
|
|
'token': token,
|
|
|
|
'servers': servers,
|
2023-02-13 14:45:45 +00:00
|
|
|
'user_services': user_services,
|
2023-09-30 21:38:22 +00:00
|
|
|
'lang': user_lang,
|
|
|
|
'user_id': user_id
|
2022-11-17 07:34:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return user_params
|
|
|
|
|
|
|
|
|
2023-09-17 09:42:39 +00:00
|
|
|
def get_user_lang_for_flask() -> str:
|
|
|
|
try:
|
|
|
|
user_lang = request.cookies.get('lang')
|
|
|
|
except Exception:
|
|
|
|
return 'en'
|
|
|
|
|
|
|
|
if user_lang is None:
|
|
|
|
user_lang = 'en'
|
|
|
|
|
2023-02-13 14:45:45 +00:00
|
|
|
return user_lang
|
|
|
|
|
2023-02-14 07:49:18 +00:00
|
|
|
|
2022-11-17 07:34:58 +00:00
|
|
|
def return_user_status() -> dict:
|
|
|
|
user_subscription = {}
|
|
|
|
user_subscription.setdefault('user_status', sql.select_user_status())
|
|
|
|
user_subscription.setdefault('user_plan', sql.select_user_plan())
|
|
|
|
|
|
|
|
return user_subscription
|
|
|
|
|
|
|
|
|
|
|
|
def return_unsubscribed_user_status() -> dict:
|
|
|
|
user_subscription = {'user_status': 0, 'user_plan': 0}
|
|
|
|
|
|
|
|
return user_subscription
|
2023-09-17 09:42:39 +00:00
|
|
|
|
|
|
|
|
|
|
|
def return_user_subscription():
|
|
|
|
try:
|
|
|
|
user_subscription = return_user_status()
|
|
|
|
except Exception as e:
|
|
|
|
user_subscription = return_unsubscribed_user_status()
|
2023-09-17 14:34:56 +00:00
|
|
|
logging('Roxy-WI server', f'Cannot get a user plan: {e}', roxywi=1)
|
2023-09-17 09:42:39 +00:00
|
|
|
|
|
|
|
return user_subscription
|