haproxy-wi/app/options.py

2722 lines
109 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import json
import http.cookies
from uuid import UUID
from jinja2 import Environment, FileSystemLoader
import modules.db.sql as sql
import modules.server.ssh as ssh_mod
import modules.common.common as common
import modules.config.config as config_mod
import modules.roxywi.common as roxywi_common
import modules.roxy_wi_tools as roxy_wi_tools
import modules.server.server as server_mod
import modules.service.common as service_common
import modules.service.installation as service_mod
get_config = roxy_wi_tools.GetConfigVar()
time_zone = sql.get_setting('time_zone')
get_date = roxy_wi_tools.GetDate(time_zone)
form = common.form
serv = common.is_ip_or_dns(form.getvalue('serv'))
act = form.getvalue("act")
token = form.getvalue("token")
if (
form.getvalue('new_metrics')
or form.getvalue('new_http_metrics')
or form.getvalue('new_waf_metrics')
or form.getvalue('new_nginx_metrics')
or form.getvalue('new_apache_metrics')
or form.getvalue('metrics_hapwi_ram')
or form.getvalue('metrics_hapwi_cpu')
or form.getvalue('getoption')
or form.getvalue('getsavedserver')
):
print('Content-type: application/json\n')
else:
print('Content-type: text/html\n')
if act == "checkrestart":
servers = roxywi_common.get_dick_permit(ip=serv)
for server in servers:
if server != "":
print("ok")
sys.exit()
sys.exit()
try:
uuid_obj = UUID(token, version=4)
except ValueError:
print('error: Your token is not valid')
sys.exit()
except Exception:
print('error: There is no token')
sys.exit()
if not sql.check_token_exists(token):
print('error: Your token has been expired')
sys.exit()
if form.getvalue('getcerts') is not None and serv is not None:
config_mod.get_ssl_certs(serv)
if form.getvalue('checkSshConnect') is not None and serv is not None:
try:
print(server_mod.ssh_command(serv, ["ls -1t"]))
except Exception as e:
print(e)
if form.getvalue('getcert') is not None and serv is not None:
config_mod.get_ssl_cert(serv)
if form.getvalue('delcert') is not None and serv is not None:
config_mod.del_ssl_cert(serv)
if serv and form.getvalue('ssl_cert'):
config_mod.upload_ssl_cert(serv)
if form.getvalue('backend') is not None:
import modules.config.runtime as runtime
runtime.show_backends(serv)
if form.getvalue('ip_select') is not None:
import modules.config.runtime as runtime
runtime.show_backends(serv)
if form.getvalue('ipbackend') is not None and form.getvalue('backend_server') is None:
import modules.config.runtime as runtime
runtime.show_frontend_backend()
if form.getvalue('ipbackend') is not None and form.getvalue('backend_server') is not None:
import modules.config.runtime as runtime
runtime.show_server()
if form.getvalue('backend_ip') is not None:
import modules.config.runtime as runtime
runtime.change_ip_and_port()
if form.getvalue('maxconn_select') is not None:
import modules.config.runtime as runtime
serv = common.checkAjaxInput(form.getvalue('maxconn_select'))
runtime.get_backends_from_config(serv, backends='frontend')
if form.getvalue('maxconn_frontend') is not None:
import modules.config.runtime as runtime
runtime.change_maxconn()
if form.getvalue('table_serv_select') is not None:
import modules.config.runtime as runtime
print(runtime.get_all_stick_table())
if form.getvalue('table_select') is not None:
import modules.config.runtime as runtime
runtime.table_select()
if form.getvalue('ip_for_delete') is not None:
import modules.config.runtime as runtime
runtime.delete_ip_from_stick_table()
if form.getvalue('table_for_clear') is not None:
import modules.config.runtime as runtime
runtime.clear_stick_table()
if form.getvalue('list_serv_select') is not None:
import modules.config.runtime as runtime
runtime.list_of_lists()
if form.getvalue('list_select_id') is not None:
import modules.config.runtime as runtime
runtime.show_lists()
if form.getvalue('list_id_for_delete') is not None:
import modules.config.runtime as runtime
runtime.delete_ip_from_list()
if form.getvalue('list_ip_for_add') is not None:
import modules.config.runtime as runtime
runtime.add_ip_to_list()
if form.getvalue('sessions_select') is not None:
import modules.config.runtime as runtime
runtime.select_session()
if form.getvalue('sessions_select_show') is not None:
import modules.config.runtime as runtime
runtime.show_session()
if form.getvalue('session_delete_id') is not None:
import modules.config.runtime as runtime
runtime.delete_session()
if form.getvalue("change_pos") is not None:
pos = common.checkAjaxInput(form.getvalue('change_pos'))
server_id = common.checkAjaxInput(form.getvalue('pos_server_id'))
sql.update_server_pos(pos, server_id)
if form.getvalue('show_ip') is not None and serv is not None:
commands = ['sudo hostname -i | tr " " "\n"|grep -v "%"']
server_mod.ssh_command(serv, commands, ip="1")
if form.getvalue('showif'):
commands = ["sudo ip link|grep 'UP' |grep -v 'lo'| awk '{print $2}' |awk -F':' '{print $1}'"]
server_mod.ssh_command(serv, commands, ip="1")
if form.getvalue('action_hap') is not None and serv is not None:
import modules.service.action as service_action
action = form.getvalue('action_hap')
service_action.action_haproxy(serv, action)
if form.getvalue('action_nginx') is not None and serv is not None:
import modules.service.action as service_action
action = form.getvalue('action_nginx')
service_action.action_nginx(serv, action)
if form.getvalue('action_keepalived') is not None and serv is not None:
import modules.service.action as service_action
action = form.getvalue('action_keepalived')
service_action.action_keepalived(serv, action)
if form.getvalue('action_waf') is not None and serv is not None:
import modules.service.action as service_action
action = form.getvalue('action_waf')
service_action.action_haproxy_waf(serv, action)
if form.getvalue('action_waf_nginx') is not None and serv is not None:
import modules.service.action as service_action
action = form.getvalue('action_waf_nginx')
service_action.action_nginx_waf(serv, action)
if form.getvalue('action_apache') is not None and serv is not None:
import modules.service.action as service_action
action = form.getvalue('action_apache')
service_action.action_apache(serv, action)
if form.getvalue('action_service') is not None:
import modules.roxywi.roxy as roxy
action = common.checkAjaxInput(form.getvalue('action_service'))
roxy.action_service(action, serv)
if act == "overviewHapserverBackends":
service = common.checkAjaxInput(form.getvalue('service'))
service_common.overview_backends(serv, service)
if form.getvalue('show_userlists'):
configs_dir = get_config.get_config_var('configs', 'haproxy_save_configs_dir')
format_file = 'cfg'
try:
sections = config_mod.get_userlists(configs_dir + roxywi_common.get_files(configs_dir, format_file)[0])
except Exception as e:
roxywi_common.logging('Roxy-WI server', str(e), roxywi=1)
try:
cfg = f'{configs_dir}{serv}-{get_date.return_date("config")}.{format_file}'
except Exception as e:
roxywi_common.logging('Roxy-WI server', f' Cannot generate a cfg path {e}', roxywi=1)
try:
error = config_mod.get_config(serv, cfg)
except Exception as e:
roxywi_common.logging('Roxy-WI server', f' Cannot download a config {e}', roxywi=1)
try:
sections = config_mod.get_userlists(cfg)
except Exception as e:
roxywi_common.logging('Roxy-WI server', f' Cannot get Userlists from the config file {e}', roxywi=1)
sections = 'error: Cannot get Userlists'
print(sections)
if act == "overviewHapservers":
service = common.checkAjaxInput(form.getvalue('service'))
service_common.get_overview_last_edit(serv, service)
if act == "overview":
import modules.roxywi.overview as roxy_overview
roxy_overview.show_overview(serv)
if act == "overviewwaf":
import modules.roxywi.waf as roxy_waf
waf_service = common.checkAjaxInput(form.getvalue('service'))
serv = common.checkAjaxInput(serv)
roxy_waf.waf_overview(serv, waf_service)
if act == "overviewServers":
server_id = common.checkAjaxInput(form.getvalue('id'))
name = common.checkAjaxInput(form.getvalue('name'))
service = common.checkAjaxInput(form.getvalue('service'))
service_common.overview_service(serv, server_id, name, service)
if act == "overviewServices":
import modules.roxywi.overview as roxy_overview
roxy_overview.show_services_overview()
if form.getvalue('action'):
import modules.service.haproxy as service_haproxy
service_haproxy.stat_page_action(serv)
if serv is not None and act == "stats":
service = common.checkAjaxInput(form.getvalue('service'))
service_common.get_stat_page(serv, service)
if serv is not None and form.getvalue('show_log') is not None:
import modules.roxywi.logs as roxywi_logs
rows = form.getvalue('show_log')
waf = form.getvalue('waf')
grep = form.getvalue('grep')
hour = form.getvalue('hour')
minut = form.getvalue('minut')
hour1 = form.getvalue('hour1')
minut1 = form.getvalue('minut1')
service = form.getvalue('service')
out = roxywi_logs.show_roxy_log(serv, rows=rows, waf=waf, grep=grep, hour=hour, minut=minut, hour1=hour1,
minut1=minut1, service=service)
print(out)
if serv is not None and form.getvalue('rows1') is not None:
import modules.roxywi.logs as roxywi_logs
rows = form.getvalue('rows1')
grep = form.getvalue('grep')
hour = form.getvalue('hour')
minut = form.getvalue('minut')
hour1 = form.getvalue('hour1')
minut1 = form.getvalue('minut1')
out = roxywi_logs.show_roxy_log(serv, rows=rows, waf='0', grep=grep, hour=hour, minut=minut, hour1=hour1,
minut1=minut1, service='apache_internal')
print(out)
if form.getvalue('viewlogs') is not None:
import modules.roxywi.logs as roxywi_logs
viewlog = form.getvalue('viewlogs')
rows = form.getvalue('rows')
grep = form.getvalue('grep')
hour = form.getvalue('hour')
minut = form.getvalue('minut')
hour1 = form.getvalue('hour1')
minut1 = form.getvalue('minut1')
if roxywi_common.check_user_group():
out = roxywi_logs.show_roxy_log(serv=viewlog, rows=rows, waf='0', grep=grep, hour=hour, minut=minut, hour1=hour1,
minut1=minut1, service='internal')
print(out)
if serv is not None and act == "showMap":
import modules.service.haproxy as service_haproxy
service_haproxy.show_map(serv)
if form.getvalue('servaction') is not None:
import modules.service.haproxy as service_haproxy
service_haproxy.runtime_command(serv)
if act == "showCompareConfigs":
config_mod.show_compare_config(serv)
if serv is not None and form.getvalue('right') is not None:
config_mod.compare_config()
if serv is not None and act == "configShow":
config_mod.show_config(serv)
if act == 'configShowFiles':
config_mod.show_config_files(serv)
if act == 'showRemoteLogFiles':
service = form.getvalue('service')
log_path = sql.get_setting(f'{service}_path_logs')
return_files = server_mod.get_remote_files(serv, log_path, 'log')
if 'error: ' in return_files:
print(return_files)
sys.exit()
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/show_log_files.html')
template = template.render(serv=serv, return_files=return_files, path_dir=log_path)
print(template)
if form.getvalue('master'):
service_mod.keepalived_master_install()
if form.getvalue('master_slave'):
service_mod.keepalived_slave_install()
if form.getvalue('masteradd'):
service_mod.keepalived_masteradd()
if form.getvalue('masteradd_slave'):
service_mod.keepalived_slaveadd()
if form.getvalue('master_slave_hap'):
master = form.getvalue('master_slave_hap')
slave = form.getvalue('slave')
server = form.getvalue('server')
docker = form.getvalue('docker')
if server == 'master':
service_mod.install_haproxy(master, server=server, docker=docker)
elif server == 'slave':
service_mod.install_haproxy(slave, server=server, docker=docker)
if form.getvalue('master_slave_nginx'):
master = form.getvalue('master_slave_nginx')
slave = form.getvalue('slave')
server = form.getvalue('server')
docker = form.getvalue('docker')
if server == 'master':
service_mod.install_service(master, 'nginx', docker, server=server)
elif server == 'slave':
service_mod.install_service(slave, 'nginx', docker, server=server)
if form.getvalue('install_grafana'):
service_mod.grafana_install()
if form.getvalue('haproxy_exp_install'):
import modules.service.exporter_installation as exp_installation
exp_installation.haproxy_exp_installation()
if form.getvalue('nginx_exp_install') or form.getvalue('apache_exp_install'):
import modules.service.exporter_installation as exp_installation
exp_installation.nginx_apache_exp_installation()
if form.getvalue('node_exp_install'):
import modules.service.exporter_installation as exp_installation
service = 'node'
exp_installation.node_keepalived_exp_installation(service)
if form.getvalue('keepalived_exp_install'):
import modules.service.exporter_installation as exp_installation
service = 'keepalived'
exp_installation.node_keepalived_exp_installation(service)
if form.getvalue('backup') or form.getvalue('deljob') or form.getvalue('backupupdate'):
import modules.service.backup as backup_mod
serv = common.is_ip_or_dns(form.getvalue('server'))
rpath = common.checkAjaxInput(form.getvalue('rpath'))
time = common.checkAjaxInput(form.getvalue('time'))
backup_type = common.checkAjaxInput(form.getvalue('type'))
rserver = common.checkAjaxInput(form.getvalue('rserver'))
cred = int(form.getvalue('cred'))
deljob = common.checkAjaxInput(form.getvalue('deljob'))
update = common.checkAjaxInput(form.getvalue('backupupdate'))
description = common.checkAjaxInput(form.getvalue('description'))
backup_mod.backup(serv, rpath, time, backup_type, rserver, cred, deljob, update, description)
if form.getvalue('git_backup'):
server_id = form.getvalue('server')
service_id = form.getvalue('git_service')
git_init = form.getvalue('git_init')
repo = form.getvalue('git_repo')
branch = form.getvalue('git_branch')
period = form.getvalue('time')
cred = form.getvalue('cred')
deljob = form.getvalue('git_deljob')
description = form.getvalue('description')
servers = roxywi_common.get_dick_permit()
proxy = sql.get_setting('proxy')
services = sql.select_services()
server_ip = sql.select_server_ip_by_id(server_id)
service_name = sql.select_service_name_by_id(service_id).lower()
service_config_dir = sql.get_setting(service_name + '_dir')
script = 'git_backup.sh'
proxy_serv = ''
ssh_settings = ssh_mod.return_ssh_keys_path('localhost', id=int(cred))
os.system(f"cp scripts/{script} .")
if proxy is not None and proxy != '' and proxy != 'None':
proxy_serv = proxy
if repo is None or git_init == '0':
repo = ''
if branch is None or branch == '0':
branch = 'main'
commands = [
f"chmod +x {script} && ./{script} HOST={server_ip} DELJOB={deljob} SERVICE={service_name} INIT={git_init} "
f"SSH_PORT={ssh_settings['port']} PERIOD={period} REPO={repo} BRANCH={branch} CONFIG_DIR={service_config_dir} "
f"PROXY={proxy_serv} USER={ssh_settings['user']} KEY={ssh_settings['key']}"
]
output, error = server_mod.subprocess_execute(commands[0])
for line in output:
if any(s in line for s in ("Traceback", "FAILED")):
try:
print('error: ' + line)
break
except Exception:
print('error: ' + output)
break
else:
if deljob == '0':
if sql.insert_new_git(
server_id=server_id, service_id=service_id, repo=repo, branch=branch,
period=period, cred=cred, description=description
):
gits = sql.select_gits(server_id=server_id, service_id=service_id)
sshs = sql.select_ssh()
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('new_git.html')
template = template.render(gits=gits, sshs=sshs, servers=servers, services=services, new_add=1)
print(template)
print('success: Git job has been created')
roxywi_common.logging(
server_ip, ' A new git job has been created', roxywi=1, login=1,
keep_history=1, service=service_name
)
else:
if sql.delete_git(form.getvalue('git_backup')):
print('Ok')
os.remove(script)
if form.getvalue('install_service'):
server_ip = common.is_ip_or_dns(form.getvalue('install_service'))
service = common.checkAjaxInput(form.getvalue('service'))
docker = common.checkAjaxInput(form.getvalue('docker'))
if service in ('nginx', 'apache'):
service_mod.install_service(server_ip, service, docker)
else:
print('warning: wrong service')
if form.getvalue('haproxyaddserv'):
service_mod.install_haproxy(form.getvalue('haproxyaddserv'), syn_flood=form.getvalue('syn_flood'),
hapver=form.getvalue('hapver'), docker=form.getvalue('docker'))
if form.getvalue('installwaf'):
service = form.getvalue('service')
if service == 'haproxy':
service_mod.waf_install(common.checkAjaxInput(form.getvalue('installwaf')))
else:
service_mod.waf_nginx_install(common.checkAjaxInput(form.getvalue('installwaf')))
if form.getvalue('geoip_install'):
service_mod.geoip_installation()
if form.getvalue('update_roxy_wi'):
import modules.roxywi.roxy as roxy
service = form.getvalue('service')
services = ['roxy-wi-checker',
'roxy-wi',
'roxy-wi-keep_alive',
'roxy-wi-smon',
'roxy-wi-metrics',
'roxy-wi-portscanner',
'roxy-wi-socket',
'roxy-wi-prometheus-exporter']
if service not in services:
print(f'error: {service} is not part of Roxy-WI')
sys.exit()
roxy.update_roxy_wi(service)
if form.getvalue('metrics_waf'):
metrics_waf = common.checkAjaxInput(form.getvalue('metrics_waf'))
sql.update_waf_metrics_enable(metrics_waf, form.getvalue('enable'))
if form.getvalue('table_metrics'):
service = form.getvalue('service')
roxywi_common.check_user_group()
group_id = roxywi_common.get_user_group(id=1)
if service in ('nginx', 'apache'):
metrics = sql.select_service_table_metrics(service, group_id)
else:
metrics = sql.select_table_metrics(group_id)
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('table_metrics.html')
template = template.render(table_stat=metrics, service=service)
print(template)
if form.getvalue('metrics_hapwi_ram'):
import modules.roxywi.metrics as metric
metrics_type = common.checkAjaxInput(form.getvalue('ip'))
metric.show_ram_metrics(metrics_type)
if form.getvalue('metrics_hapwi_cpu'):
import modules.roxywi.metrics as metric
metrics_type = common.checkAjaxInput(form.getvalue('ip'))
metric.show_cpu_metrics(metrics_type)
if form.getvalue('new_metrics'):
import modules.roxywi.metrics as metric
server_ip = common.is_ip_or_dns(form.getvalue('server'))
hostname = sql.get_hostname_by_server_ip(server_ip)
time_range = common.checkAjaxInput(form.getvalue('time_range'))
metric.haproxy_metrics(server_ip, hostname, time_range)
if form.getvalue('new_http_metrics'):
import modules.roxywi.metrics as metric
server_ip = common.is_ip_or_dns(form.getvalue('server'))
hostname = sql.get_hostname_by_server_ip(server_ip)
time_range = common.checkAjaxInput(form.getvalue('time_range'))
metric.haproxy_http_metrics(server_ip, hostname, time_range)
if any((form.getvalue('new_nginx_metrics'), form.getvalue('new_apache_metrics'), form.getvalue('new_waf_metrics'))):
import modules.roxywi.metrics as metric
server_ip = common.is_ip_or_dns(form.getvalue('server'))
hostname = sql.get_hostname_by_server_ip(server_ip)
time_range = common.checkAjaxInput(form.getvalue('time_range'))
service = ''
if form.getvalue('new_nginx_metrics'):
service = 'nginx'
elif form.getvalue('new_apache_metrics'):
service = 'apache'
elif form.getvalue('new_waf_metrics'):
service = 'waf'
metric.service_metrics(server_ip, hostname, service, time_range)
if form.getvalue('get_hap_v'):
print(service_common.check_haproxy_version(serv))
if form.getvalue('get_service_v'):
service = common.checkAjaxInput(form.getvalue('get_service_v'))
server_ip = common.is_ip_or_dns(serv)
service_common.show_service_version(server_ip, service)
if form.getvalue('get_keepalived_v'):
cmd = ["sudo /usr/sbin/keepalived -v 2>&1|head -1|awk '{print $2}'"]
print(server_mod.ssh_command(serv, cmd))
if form.getvalue('get_exporter_v'):
print(service_common.get_exp_version(serv, form.getvalue('get_exporter_v')))
if form.getvalue('bwlists'):
lib_path = get_config.get_config_var('main', 'lib_path')
color = common.checkAjaxInput(form.getvalue('color'))
group = common.checkAjaxInput(form.getvalue('group'))
bwlists = common.checkAjaxInput(form.getvalue('bwlists'))
list_path = f"{lib_path}/{sql.get_setting('lists_path')}/{group}/{color}/{bwlists}"
try:
file = open(list_path, "r")
file_read = file.read()
file.close()
print(file_read)
except IOError:
print(f"error: Cannot read {color} list")
if form.getvalue('bwlists_create'):
color = common.checkAjaxInput(form.getvalue('color'))
lib_path = get_config.get_config_var('main', 'lib_path')
list_name = f"{form.getvalue('bwlists_create').split('.')[0]}.lst"
list_path = f"{lib_path}/{sql.get_setting('lists_path')}/{form.getvalue('group')}/{color}/{list_name}"
try:
open(list_path, 'a').close()
print('success: ')
try:
roxywi_common.logging(serv, f'A new list {color} {list_name} has been created', roxywi=1, login=1)
except Exception:
pass
except IOError as e:
print(f'error: Cannot create a new {color} list. {e}, ')
if form.getvalue('bwlists_save'):
color = common.checkAjaxInput(form.getvalue('color'))
group = common.checkAjaxInput(form.getvalue('group'))
bwlists_save = common.checkAjaxInput(form.getvalue('bwlists_save'))
lib_path = get_config.get_config_var('main', 'lib_path')
list_path = f"{lib_path}/{sql.get_setting('lists_path')}/{group}/{color}/{bwlists_save}"
try:
with open(list_path, "w") as file:
file.write(form.getvalue('bwlists_content'))
except IOError as e:
print(f'error: Cannot save {color} list. {e}')
path = sql.get_setting('haproxy_dir') + "/" + color
servers = []
if serv != 'all':
servers.append(serv)
MASTERS = sql.is_master(serv)
for master in MASTERS:
if master[0] is not None:
servers.append(master[0])
else:
server = roxywi_common.get_dick_permit()
for s in server:
servers.append(s[2])
for serv in servers:
server_mod.ssh_command(serv, [f"sudo mkdir {path}"])
server_mod.ssh_command(serv, [f"sudo chown $(whoami) {path}"])
error = config_mod.upload(serv, path + "/" + bwlists_save, list_path, dir='fullpath')
if error:
print('error: Upload fail: %s , ' % error)
else:
print('success: Edited ' + color + ' list was uploaded to ' + serv + ' , ')
try:
roxywi_common.logging(serv, f'Has been edited the {color} list {bwlists_save}', roxywi=1, login=1)
except Exception:
pass
server_id = sql.select_server_id_by_ip(server_ip=serv)
haproxy_enterprise = sql.select_service_setting(server_id, 'haproxy', 'haproxy_enterprise')
if haproxy_enterprise == '1':
haproxy_service_name = "hapee-2.0-lb"
else:
haproxy_service_name = "haproxy"
if form.getvalue('bwlists_restart') == 'restart':
server_mod.ssh_command(serv, [f"sudo systemctl restart {haproxy_service_name}"])
elif form.getvalue('bwlists_restart') == 'reload':
server_mod.ssh_command(serv, [f"sudo systemctl reload {haproxy_service_name}"])
if form.getvalue('bwlists_delete'):
color = common.checkAjaxInput(form.getvalue('color'))
bwlists_delete = common.checkAjaxInput(form.getvalue('bwlists_delete'))
lib_path = get_config.get_config_var('main', 'lib_path')
group = common.checkAjaxInput( form.getvalue('group'))
list_path = f"{lib_path}/{sql.get_setting('lists_path')}/{group}/{color}/{bwlists_delete}"
try:
os.remove(list_path)
except IOError as e:
print(f'error: Cannot delete {color} list. {e} , ')
path = sql.get_setting('haproxy_dir') + "/" + color
servers = []
if serv != 'all':
servers.append(serv)
MASTERS = sql.is_master(serv)
for master in MASTERS:
if master[0] is not None:
servers.append(master[0])
else:
server = roxywi_common.get_dick_permit()
for s in server:
servers.append(s[2])
for serv in servers:
error = server_mod.ssh_command(serv, [f"sudo rm {path}/{bwlists_delete}"], return_err=1)
if error:
print(f'error: Deleting fail: {error} , ')
else:
print(f'success: the {color} list has been deleted on {serv} , ')
try:
roxywi_common.logging(serv, f'has been deleted the {color} list {bwlists_delete}', roxywi=1, login=1)
except Exception:
pass
if form.getvalue('get_lists'):
lib_path = get_config.get_config_var('main', 'lib_path')
group = common.checkAjaxInput(form.getvalue('group'))
color = common.checkAjaxInput(form.getvalue('color'))
list_path = f"{lib_path}/{sql.get_setting('lists_path')}/{group}/{color}"
lists = roxywi_common.get_files(list_path, "lst")
for line in lists:
print(line)
if form.getvalue('get_ldap_email'):
username = form.getvalue('get_ldap_email')
import ldap
server = sql.get_setting('ldap_server')
port = sql.get_setting('ldap_port')
user = sql.get_setting('ldap_user')
password = sql.get_setting('ldap_password')
ldap_base = sql.get_setting('ldap_base')
domain = sql.get_setting('ldap_domain')
ldap_search_field = sql.get_setting('ldap_search_field')
ldap_class_search = sql.get_setting('ldap_class_search')
ldap_user_attribute = sql.get_setting('ldap_user_attribute')
ldap_type = sql.get_setting('ldap_type')
ldap_proto = 'ldap' if ldap_type == "0" else 'ldaps'
ldap_bind = ldap.initialize('{}://{}:{}/'.format(ldap_proto, server, port))
try:
ldap_bind.protocol_version = ldap.VERSION3
ldap_bind.set_option(ldap.OPT_REFERRALS, 0)
bind = ldap_bind.simple_bind_s(user, password)
criteria = "(&(objectClass=" + ldap_class_search + ")(" + ldap_user_attribute + "=" + username + "))"
attributes = [ldap_search_field]
result = ldap_bind.search_s(ldap_base, ldap.SCOPE_SUBTREE, criteria, attributes)
results = [entry for dn, entry in result if isinstance(entry, dict)]
try:
print('["' + results[0][ldap_search_field][0].decode("utf-8") + '","' + domain + '"]')
except Exception:
print('error: user not found')
finally:
ldap_bind.unbind()
if form.getvalue('change_waf_mode'):
import modules.roxywi.waf as roxy_waf
roxy_waf. change_waf_mode()
error_mess = 'error: All fields must be completed'
if form.getvalue('newuser') is not None:
import modules.roxywi.user as roxywi_user
email = common.checkAjaxInput(form.getvalue('newemail'))
password = common.checkAjaxInput(form.getvalue('newpassword'))
role = common.checkAjaxInput(form.getvalue('newrole'))
new_user = common.checkAjaxInput(form.getvalue('newusername'))
page = common.checkAjaxInput(form.getvalue('page'))
activeuser = common.checkAjaxInput(form.getvalue('activeuser'))
group = common.checkAjaxInput(form.getvalue('newgroupuser'))
if roxywi_user.create_user(new_user, email, password, role, activeuser, group):
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/new_user.html')
template = template.render(users=sql.select_users(user=new_user),
groups=sql.select_groups(),
page=page,
roles=sql.select_roles(),
adding=1)
print(template)
if form.getvalue('userdel') is not None:
import modules.roxywi.user as roxywi_user
roxywi_user.delete_user()
if form.getvalue('updateuser') is not None:
import modules.roxywi.user as roxywi_user
roxywi_user.update_user()
if form.getvalue('updatepassowrd') is not None:
import modules.roxywi.user as roxywi_user
roxywi_user.update_user_password()
if form.getvalue('newserver') is not None:
hostname = common.checkAjaxInput(form.getvalue('servername'))
ip = common.is_ip_or_dns(form.getvalue('newip'))
group = common.checkAjaxInput(form.getvalue('newservergroup'))
scan_server = common.checkAjaxInput(form.getvalue('scan_server'))
typeip = common.checkAjaxInput(form.getvalue('typeip'))
haproxy = common.checkAjaxInput(form.getvalue('haproxy'))
nginx = common.checkAjaxInput(form.getvalue('nginx'))
apache = common.checkAjaxInput(form.getvalue('apache'))
firewall = common.checkAjaxInput(form.getvalue('firewall'))
enable = common.checkAjaxInput(form.getvalue('enable'))
master = common.checkAjaxInput(form.getvalue('slave'))
cred = common.checkAjaxInput(form.getvalue('cred'))
page = common.checkAjaxInput(form.getvalue('page'))
page = page.split("#")[0]
port = common.checkAjaxInput(form.getvalue('newport'))
desc = common.checkAjaxInput(form.getvalue('desc'))
if ip == '':
print('error: IP or DNS name is not valid')
sys.exit()
try:
if server_mod.create_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, apache, firewall, scan_server):
try:
user_subscription = roxywi_common.return_user_status()
except Exception as e:
user_subscription = roxywi_common.return_unsubscribed_user_status()
roxywi_common.logging('Roxy-WI server', f'Cannot get a user plan: {e}', roxywi=1)
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True)
template = env.get_template('ajax/new_server.html')
template = template.render(groups=sql.select_groups(),
servers=sql.select_servers(server=ip),
masters=sql.select_servers(get_master_servers=1),
sshs=sql.select_ssh(group=group),
page=page,
user_status=user_subscription['user_status'],
user_plan=user_subscription['user_plan'],
adding=1)
print(template)
roxywi_common.logging(ip, f'A new server {hostname} has been created', roxywi=1, login=1,
keep_history=1, service='server')
except Exception as e:
print(e)
if form.getvalue('updatehapwiserver') is not None:
hapwi_id = form.getvalue('updatehapwiserver')
active = form.getvalue('active')
name = form.getvalue('name')
alert = form.getvalue('alert_en')
metrics = form.getvalue('metrics')
service = form.getvalue('service_name')
sql.update_hapwi_server(hapwi_id, alert, metrics, active, service)
server_ip = sql.select_server_ip_by_id(hapwi_id)
roxywi_common.logging(server_ip, f'The server {name} has been updated ', roxywi=1, login=1, keep_history=1,
service=service)
if form.getvalue('updateserver') is not None:
name = form.getvalue('updateserver')
group = form.getvalue('servergroup')
typeip = form.getvalue('typeip')
haproxy = form.getvalue('haproxy')
nginx = form.getvalue('nginx')
apache = form.getvalue('apache')
firewall = form.getvalue('firewall')
enable = form.getvalue('enable')
master = form.getvalue('slave')
serv_id = form.getvalue('id')
cred = form.getvalue('cred')
port = form.getvalue('port')
protected = form.getvalue('protected')
desc = form.getvalue('desc')
if name is None or port is None:
print(error_mess)
else:
sql.update_server(name, group, typeip, enable, master, serv_id, cred, port, desc, haproxy, nginx, apache,
firewall, protected)
roxywi_common.logging(f'the server {name}', ' has been updated ', roxywi=1, login=1)
server_ip = sql.select_server_ip_by_id(serv_id)
roxywi_common.logging(server_ip, f'The server {name} has been update', roxywi=1, login=1,
keep_history=1, service='server')
if form.getvalue('serverdel') is not None:
server_id = common.checkAjaxInput(form.getvalue('serverdel'))
server = sql.select_servers(id=server_id)
server_ip = ''
for s in server:
hostname = s[1]
server_ip = s[2]
if sql.check_exists_backup(server_ip):
print('warning: Delete the backup first ')
sys.exit()
if sql.check_exists_s3_backup(server_id):
print('warning: Delete the S3 backup first ')
sys.exit()
if sql.delete_server(server_id):
sql.delete_waf_server(server_id)
sql.delete_port_scanner_settings(server_id)
sql.delete_waf_rules(server_ip)
sql.delete_action_history(server_id)
sql.delete_system_info(server_id)
sql.delete_service_settings(server_id)
print("Ok")
roxywi_common.logging(server_ip, f'The server {hostname} has been deleted', roxywi=1, login=1)
if form.getvalue('newgroup') is not None:
newgroup = common.checkAjaxInput(form.getvalue('groupname'))
desc = common.checkAjaxInput(form.getvalue('newdesc'))
if newgroup is None:
print(error_mess)
else:
if sql.add_group(newgroup, desc):
env = Environment(loader=FileSystemLoader('templates/ajax/'), autoescape=True)
template = env.get_template('/new_group.html')
output_from_parsed_template = template.render(groups=sql.select_groups(group=newgroup))
print(output_from_parsed_template)
roxywi_common.logging('Roxy-WI server', f'A new group {newgroup} has been created', roxywi=1, login=1)
if form.getvalue('groupdel') is not None:
groupdel = common.checkAjaxInput(form.getvalue('groupdel'))
group = sql.select_groups(id=groupdel)
for g in group:
groupname = g.name
if sql.delete_group(groupdel):
print("Ok")
roxywi_common.logging('Roxy-WI server', f'The {groupname} has been deleted', roxywi=1, login=1)
if form.getvalue('updategroup') is not None:
name = common.checkAjaxInput(form.getvalue('updategroup'))
descript = common.checkAjaxInput(form.getvalue('descript'))
group_id = common.checkAjaxInput(form.getvalue('id'))
if name is None:
print(error_mess)
else:
try:
sql.update_group(name, descript, group_id)
roxywi_common.logging('Roxy-WI server', f'The {name} has been updated', roxywi=1, login=1)
except Exception as e:
print('error: ' + str(e))
if form.getvalue('new_ssh'):
ssh_mod.create_ssh_cred()
if form.getvalue('sshdel') is not None:
ssh_mod.delete_ssh_key()
if form.getvalue('updatessh'):
ssh_mod.update_ssh_key()
if form.getvalue('ssh_cert'):
user_group = roxywi_common.get_user_group()
name = common.checkAjaxInput(form.getvalue('name'))
key = form.getvalue('ssh_cert')
ssh_mod.upload_ssh_key(name, user_group, key)
if form.getvalue('newtelegram'):
import modules.alerting.alerting as alerting
token = common.checkAjaxInput(form.getvalue('newtelegram'))
channel = common.checkAjaxInput(form.getvalue('chanel'))
group = common.checkAjaxInput(form.getvalue('telegramgroup'))
page = common.checkAjaxInput(form.getvalue('page'))
page = page.split("#")[0]
alerting.add_telegram_channel(token, channel, group, page)
if form.getvalue('newslack'):
import modules.alerting.alerting as alerting
token = common.checkAjaxInput(form.getvalue('newslack'))
channel = common.checkAjaxInput(form.getvalue('chanel'))
group = common.checkAjaxInput(form.getvalue('slackgroup'))
page = common.checkAjaxInput(form.getvalue('page'))
page = page.split("#")[0]
alerting.add_slack_channel(token, channel, group, page)
if form.getvalue('telegramdel') is not None:
import modules.alerting.alerting as alerting
channel_id = common.checkAjaxInput(form.getvalue('telegramdel'))
alerting.delete_telegram_channel(channel_id)
if form.getvalue('slackdel') is not None:
import modules.alerting.alerting as alerting
channel_id = common.checkAjaxInput(form.getvalue('slackdel'))
alerting.delete_slack_channel(channel_id)
if form.getvalue('updatetoken') is not None:
import modules.alerting.alerting as alerting
token = common.checkAjaxInput(form.getvalue('updatetoken'))
channel = common.checkAjaxInput(form.getvalue('updategchanel'))
group = common.checkAjaxInput(form.getvalue('updatetelegramgroup'))
user_id = common.checkAjaxInput(form.getvalue('id'))
alerting.update_telegram(token, channel, group, user_id)
if form.getvalue('update_slack_token') is not None:
import modules.alerting.alerting as alerting
token = common.checkAjaxInput(form.getvalue('update_slack_token'))
channel = common.checkAjaxInput(form.getvalue('updategchanel'))
group = common.checkAjaxInput(form.getvalue('updateslackgroup'))
user_id = common.checkAjaxInput(form.getvalue('id'))
alerting.update_slack()
if form.getvalue('updatesettings') is not None:
settings = common.checkAjaxInput(form.getvalue('updatesettings'))
val = common.checkAjaxInput(form.getvalue('val'))
user_group = roxywi_common.get_user_group(id=1)
if sql.update_setting(settings, val, user_group):
roxywi_common.logging('Roxy-WI server', f'The {settings} setting has been changed to: {val}', roxywi=1,
login=1)
print("Ok")
if form.getvalue('getuserservices'):
import modules.roxywi.user as roxy_user
roxy_user.get_user_services()
if form.getvalue('getusergroups'):
import modules.roxywi.user as roxy_user
roxy_user.get_user_groups()
if form.getvalue('changeUserGroupId') is not None:
import modules.roxywi.user as roxy_user
roxy_user.change_user_group()
if form.getvalue('changeUserServicesId') is not None:
import modules.roxywi.user as roxy_user
roxy_user.change_user_services()
if form.getvalue('changeUserCurrentGroupId') is not None:
import modules.roxywi.user as roxy_user
roxy_user.change_user_active_group()
if form.getvalue('getcurrentusergroup') is not None:
import modules.roxywi.user as roxy_user
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_id = cookie.get('uuid')
group = cookie.get('group')
roxy_user.get_user_active_group(user_id, group)
if form.getvalue('newsmon') is not None:
user_group = roxywi_common.get_user_group(id=1)
server = common.checkAjaxInput(form.getvalue('newsmon'))
port = common.checkAjaxInput(form.getvalue('newsmonport'))
enable = common.checkAjaxInput(form.getvalue('newsmonenable'))
http = common.checkAjaxInput(form.getvalue('newsmonproto'))
uri = common.checkAjaxInput(form.getvalue('newsmonuri'))
body = common.checkAjaxInput(form.getvalue('newsmonbody'))
group = common.checkAjaxInput(form.getvalue('newsmongroup'))
desc = common.checkAjaxInput(form.getvalue('newsmondescription'))
telegram = common.checkAjaxInput(form.getvalue('newsmontelegram'))
slack = common.checkAjaxInput(form.getvalue('newsmonslack'))
try:
port = int(port)
except Exception:
print('SMON error: port must number')
sys.exit()
if port > 65535 or port < 0:
print('SMON error: port must be 0-65535')
sys.exit()
if port == 80 and http == 'https':
print('SMON error: Cannot be HTTPS with 80 port')
sys.exit()
if port == 443 and http == 'http':
print('SMON error: Cannot be HTTP with 443 port')
sys.exit()
last_id = sql.insert_smon(server, port, enable, http, uri, body, group, desc, telegram, slack, user_group)
if last_id:
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/show_new_smon.html')
template = template.render(
smon=sql.select_smon_by_id(last_id),
telegrams=sql.get_user_telegram_by_group(user_group),
slacks=sql.get_user_slack_by_group(user_group))
print(template)
roxywi_common.logging('SMON', ' Has been add a new server ' + server + ' to SMON ', roxywi=1, login=1)
if form.getvalue('smondel') is not None:
user_group = roxywi_common.get_user_group(id=1)
smon_id = common.checkAjaxInput(form.getvalue('smondel'))
if roxywi_common.check_user_group():
try:
if sql.delete_smon(smon_id, user_group):
print('Ok')
roxywi_common.logging('SMON', ' Has been delete server from SMON ', roxywi=1, login=1)
except Exception as e:
print(e)
if form.getvalue('showsmon') is not None:
user_group = roxywi_common.get_user_group(id=1)
sort = common.checkAjaxInput(form.getvalue('sort'))
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/smon_dashboard.html')
template = template.render(smon=sql.smon_list(user_group), sort=sort)
print(template)
if form.getvalue('updateSmonIp') is not None:
smon_id = common.checkAjaxInput(form.getvalue('id'))
ip = common.checkAjaxInput(form.getvalue('updateSmonIp'))
port = common.checkAjaxInput(form.getvalue('updateSmonPort'))
en = common.checkAjaxInput(form.getvalue('updateSmonEn'))
http = common.checkAjaxInput(form.getvalue('updateSmonHttp'))
body = common.checkAjaxInput(form.getvalue('updateSmonBody'))
telegram = common.checkAjaxInput(form.getvalue('updateSmonTelegram'))
slack = common.checkAjaxInput(form.getvalue('updateSmonSlack'))
group = common.checkAjaxInput(form.getvalue('updateSmonGroup'))
desc = common.checkAjaxInput(form.getvalue('updateSmonDesc'))
try:
port = int(port)
except Exception:
print('SMON error: port must number')
sys.exit()
if port > 65535 or port < 0:
print('SMON error: port must be 0-65535')
sys.exit()
if port == 80 and http == 'https':
print('SMON error: Cannot be https with 80 port')
sys.exit()
if port == 443 and http == 'http':
print('SMON error: Cannot be HTTP with 443 port')
sys.exit()
roxywi_common.check_user_group()
try:
if sql.update_smon(smon_id, ip, port, body, telegram, slack, group, desc, en):
print("Ok")
roxywi_common.logging('SMON', ' Has been update the server ' + ip + ' to SMON ', roxywi=1, login=1)
except Exception as e:
print(e)
if form.getvalue('showBytes') is not None:
import modules.roxywi.overview as roxywi_overview
server_ip = common.is_ip_or_dns(form.getvalue('showBytes'))
roxywi_overview.show_haproxy_binout(server_ip)
if form.getvalue('nginxConnections'):
import modules.roxywi.overview as roxywi_overview
server_ip = common.is_ip_or_dns(form.getvalue('nginxConnections'))
roxywi_overview.show_nginx_connections(server_ip)
if form.getvalue('apachekBytes'):
import modules.roxywi.overview as roxywi_overview
server_ip = common.is_ip_or_dns(form.getvalue('apachekBytes'))
roxywi_overview.show_apache_bytes(server_ip)
if form.getvalue('keepalivedBecameMaster'):
import modules.roxywi.overview as roxywi_overview
server_ip = common.is_ip_or_dns(form.getvalue('keepalivedBecameMaster'))
roxywi_overview.keepalived_became_master(server_ip)
if form.getvalue('waf_rule_id'):
import modules.roxywi.waf as roxy_waf
roxy_waf.switch_waf_rule(serv)
if form.getvalue('new_waf_rule'):
import modules.roxywi.waf as roxy_waf
roxy_waf.create_waf_rule(serv)
if form.getvalue('lets_domain'):
serv = common.checkAjaxInput(form.getvalue('serv'))
lets_domain = common.checkAjaxInput(form.getvalue('lets_domain'))
lets_email = common.checkAjaxInput(form.getvalue('lets_email'))
proxy = sql.get_setting('proxy')
ssl_path = common.return_nice_path(sql.get_setting('cert_path'))
haproxy_dir = sql.get_setting('haproxy_dir')
script = "letsencrypt.sh"
proxy_serv = ''
ssh_settings = ssh_mod.return_ssh_keys_path(serv)
os.system(f"cp scripts/{script} .")
if proxy is not None and proxy != '' and proxy != 'None':
proxy_serv = proxy
commands = [
f"chmod +x {script} && ./{script} PROXY={proxy_serv} haproxy_dir={haproxy_dir} DOMAIN={lets_domain} "
f"EMAIL={lets_email} SSH_PORT={ssh_settings['port']} SSL_PATH={ssl_path} HOST={serv} USER={ ssh_settings['user']} "
f"PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}"
]
output, error = server_mod.subprocess_execute(commands[0])
if error:
roxywi_common.logging('Roxy-WI server', error, roxywi=1)
print(error)
else:
for line in output:
if any(s in line for s in ("msg", "FAILED")):
try:
line = line.split(':')[1]
line = line.split('"')[1]
print(line + "<br>")
break
except Exception:
print(output)
break
else:
print('success: Certificate has been created')
os.remove(script)
if form.getvalue('uploadovpn'):
name = common.checkAjaxInput(form.getvalue('ovpnname'))
ovpn_file = f"{os.path.dirname('/tmp/')}/{name}.ovpn"
try:
with open(ovpn_file, "w") as conf:
conf.write(form.getvalue('uploadovpn'))
except IOError as e:
print(str(e))
print('error: Can\'t save ovpn file')
else:
print('success: ovpn file has been saved </div>')
try:
cmd = 'sudo openvpn3 config-import --config %s --persistent' % ovpn_file
server_mod.subprocess_execute(cmd)
except IOError as e:
roxywi_common.logging('Roxy-WI server', e.args[0], roxywi=1)
try:
cmd = 'sudo cp %s /etc/openvpn3/%s.conf' % (ovpn_file, name)
server_mod.subprocess_execute(cmd)
except IOError as e:
roxywi_common.logging('Roxy-WI server', e.args[0], roxywi=1)
roxywi_common.logging("Roxy-WI server", " has been uploaded a new ovpn file %s" % ovpn_file, roxywi=1, login=1)
if form.getvalue('openvpndel') is not None:
openvpndel = common.checkAjaxInput(form.getvalue('openvpndel'))
cmd = f'sudo openvpn3 config-remove --config /tmp/{openvpndel}.ovpn --force'
try:
server_mod.subprocess_execute(cmd)
print("Ok")
roxywi_common.logging(openvpndel, ' has deleted the ovpn file ', roxywi=1, login=1)
except IOError as e:
print(e.args[0])
roxywi_common.logging('Roxy-WI server', e.args[0], roxywi=1)
if form.getvalue('actionvpn') is not None:
openvpn = common.checkAjaxInput(form.getvalue('openvpnprofile'))
action = common.checkAjaxInput(form.getvalue('actionvpn'))
if action == 'start':
cmd = 'sudo openvpn3 session-start --config /tmp/%s.ovpn' % openvpn
elif action == 'restart':
cmd = 'sudo openvpn3 session-manage --config /tmp/%s.ovpn --restart' % openvpn
elif action == 'disconnect':
cmd = 'sudo openvpn3 session-manage --config /tmp/%s.ovpn --disconnect' % openvpn
try:
server_mod.subprocess_execute(cmd)
print("success: The " + openvpn + " has been " + action + "ed")
roxywi_common.logging(openvpn, ' has ' + action + ' the ovpn session ', roxywi=1, login=1)
except IOError as e:
print(e.args[0])
roxywi_common.logging('Roxy-WI server', e.args[0], roxywi=1)
if form.getvalue('scan_ports') is not None:
serv_id = common.checkAjaxInput(form.getvalue('scan_ports'))
server = sql.select_servers(id=serv_id)
ip = ''
for s in server:
ip = s[2]
cmd = "sudo nmap -sS %s |grep -E '^[[:digit:]]'|sed 's/ */ /g'" % ip
cmd1 = "sudo nmap -sS %s |head -5|tail -2" % ip
stdout, stderr = server_mod.subprocess_execute(cmd)
stdout1, stderr1 = server_mod.subprocess_execute(cmd1)
if stderr != '':
print(stderr)
else:
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/scan_ports.html')
template = template.render(ports=stdout, info=stdout1)
print(template)
if form.getvalue('viewFirewallRules') is not None:
server_mod.show_firewalld_rules()
if form.getvalue('geoipserv') is not None:
serv = common.checkAjaxInput(form.getvalue('geoipserv'))
service = common.checkAjaxInput(form.getvalue('geoip_service'))
if service in ('haproxy', 'nginx'):
service_dir = common.return_nice_path(sql.get_setting(f'{service}_dir'))
cmd = [f"ls {service_dir}geoip/"]
print(server_mod.ssh_command(serv, cmd))
else:
print('warning: select a server and service first')
if form.getvalue('nettools_icmp_server_from'):
server_from = common.checkAjaxInput(form.getvalue('nettools_icmp_server_from'))
server_to = common.checkAjaxInput(form.getvalue('nettools_icmp_server_to'))
server_to = common.is_ip_or_dns(server_to)
action = common.checkAjaxInput(form.getvalue('nettools_action'))
stderr = ''
action_for_sending = ''
if server_to == '':
print('warning: enter a correct IP or DNS name')
sys.exit()
if action == 'nettools_ping':
action_for_sending = 'ping -c 4 -W 1 -s 56 -O '
elif action == 'nettools_trace':
action_for_sending = 'tracepath -m 10 '
action_for_sending = action_for_sending + server_to
if server_from == 'localhost':
output, stderr = server_mod.subprocess_execute(action_for_sending)
else:
action_for_sending = [action_for_sending]
output = server_mod.ssh_command(server_from, action_for_sending, raw=1, timeout=15)
if stderr != '':
print(f'error: {stderr}')
sys.exit()
for i in output:
if i == ' ' or i == '':
continue
i = i.strip()
if 'PING' in i:
print('<span style="color: var(--link-dark-blue); display: block; margin-top: -20px;">')
elif 'no reply' in i or 'no answer yet' in i or 'Too many hops' in i or '100% packet loss' in i:
print('<span style="color: var(--red-color);">')
elif 'ms' in i and '100% packet loss' not in i:
print('<span style="color: var(--green-color);">')
else:
print('<span>')
print(i + '</span><br />')
if form.getvalue('nettools_telnet_server_from'):
server_from = common.checkAjaxInput(form.getvalue('nettools_telnet_server_from'))
server_to = common.checkAjaxInput(form.getvalue('nettools_telnet_server_to'))
server_to = common.is_ip_or_dns(server_to)
port_to = common.checkAjaxInput(form.getvalue('nettools_telnet_port_to'))
stderr = ''
if server_to == '':
print('warning: enter a correct IP or DNS name')
sys.exit()
if server_from == 'localhost':
action_for_sending = f'echo "exit"|nc {server_to} {port_to} -t -w 1s'
output, stderr = server_mod.subprocess_execute(action_for_sending)
else:
action_for_sending = [f'echo "exit"|nc {server_to} {port_to} -t -w 1s']
output = server_mod.ssh_command(server_from, action_for_sending, raw=1)
if stderr != '':
print(f'error: <b>{stderr[5:]}</b>')
sys.exit()
count_string = 0
for i in output:
if i == ' ':
continue
i = i.strip()
if i == 'Ncat: Connection timed out.':
print(f'error: <b>{i[5:]}</b>')
break
print(i + '<br>')
count_string += 1
if count_string > 1:
break
if form.getvalue('nettools_nslookup_server_from'):
server_from = common.checkAjaxInput(form.getvalue('nettools_nslookup_server_from'))
dns_name = common.checkAjaxInput(form.getvalue('nettools_nslookup_name'))
dns_name = common.is_ip_or_dns(dns_name)
record_type = common.checkAjaxInput(form.getvalue('nettools_nslookup_record_type'))
stderr = ''
if dns_name == '':
print('warning: enter a correct DNS name')
sys.exit()
action_for_sending = f'dig {dns_name} {record_type} |grep -e "SERVER\|{dns_name}"'
if server_from == 'localhost':
output, stderr = server_mod.subprocess_execute(action_for_sending)
else:
action_for_sending = [action_for_sending]
output = server_mod.ssh_command(server_from, action_for_sending, raw=1)
if stderr != '':
print('error: ' + stderr[5:-1])
sys.exit()
count_string = 0
print(
f'<b style="display: block; margin-top:10px;">The <i style="color: var(--blue-color)">{dns_name}</i> domain has the following records:</b>')
for i in output:
if 'dig: command not found.' in i:
print('error: Install bind-utils before using NSLookup')
break
if ';' in i and ';; SERVER:' not in i:
continue
if 'SOA' in i and record_type != 'SOA':
print('<b style="color: red">There are not any records for this type')
break
if ';; SERVER:' in i:
i = i[10:]
print('<br><b>From NS server:</b><br>')
i = i.strip()
print('<i>' + i + '</i><br>')
count_string += 1
if form.getvalue('portscanner_history_server_id'):
server_id = common.checkAjaxInput(form.getvalue('portscanner_history_server_id'))
enabled = common.checkAjaxInput(form.getvalue('portscanner_enabled'))
notify = common.checkAjaxInput(form.getvalue('portscanner_notify'))
history = common.checkAjaxInput(form.getvalue('portscanner_history'))
user_group_id = [server[3] for server in sql.select_servers(id=server_id)]
try:
if sql.insert_port_scanner_settings(server_id, user_group_id[0], enabled, notify, history):
print('ok')
else:
if sql.update_port_scanner_settings(server_id, user_group_id[0], enabled, notify, history):
print('ok')
except Exception as e:
print(e)
if form.getvalue('show_versions'):
import modules.roxywi.roxy as roxy
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('ajax/check_version.html')
template = template.render(versions=roxy.versions())
print(template)
if form.getvalue('get_group_name_by_id'):
print(sql.get_group_name_by_id(form.getvalue('get_group_name_by_id')))
if any((form.getvalue('do_new_name'), form.getvalue('aws_new_name'), form.getvalue('gcore_new_name'))):
roxywi_common.check_user_group()
is_add = False
if form.getvalue('do_new_name'):
provider_name = common.checkAjaxInput(form.getvalue('do_new_name'))
provider_group = common.checkAjaxInput(form.getvalue('do_new_group'))
provider_token = common.checkAjaxInput(form.getvalue('do_new_token'))
if sql.add_provider_do(provider_name, provider_group, provider_token):
is_add = True
elif form.getvalue('aws_new_name'):
provider_name = common.checkAjaxInput(form.getvalue('aws_new_name'))
provider_group = common.checkAjaxInput(form.getvalue('aws_new_group'))
provider_token = common.checkAjaxInput(form.getvalue('aws_new_key'))
provider_secret = common.checkAjaxInput(form.getvalue('aws_new_secret'))
if sql.add_provider_aws(provider_name, provider_group, provider_token, provider_secret):
is_add = True
elif form.getvalue('gcore_new_name'):
provider_name = common.checkAjaxInput(form.getvalue('gcore_new_name'))
provider_group = common.checkAjaxInput(form.getvalue('gcore_new_group'))
provider_token = common.checkAjaxInput(form.getvalue('gcore_new_user'))
provider_pass = common.checkAjaxInput(form.getvalue('gcore_new_pass'))
if sql.add_provider_gcore(provider_name, provider_group, provider_token, provider_pass):
is_add = True
if is_add:
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_uuid = cookie.get('uuid')
role_id = sql.get_user_role_by_uuid(user_uuid.value)
params = sql.select_provisioning_params()
providers = sql.select_providers(provider_group, key=provider_token)
if role_id == 1:
groups = sql.select_groups()
else:
groups = ''
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/provisioning/providers.html')
template = template.render(providers=providers, role=role_id, groups=groups, user_group=provider_group,
adding=1, params=params)
print(template)
if form.getvalue('providerdel'):
roxywi_common.check_user_group()
try:
if sql.delete_provider(common.checkAjaxInput(form.getvalue('providerdel'))):
print('Ok')
roxywi_common.logging('Roxy-WI server', 'Provider has been deleted', provisioning=1)
except Exception as e:
print(e)
if form.getvalue('awsinit') or form.getvalue('doinit') or form.getvalue('gcoreinitserver'):
roxywi_common.check_user_group()
cmd = 'cd scripts/terraform/ && sudo terraform init -upgrade -no-color'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print('error: ' + stderr)
else:
if "Terraform initialized in an empty directory" in output[0]:
print('error: There is not need modules')
elif "mkdir .terraform: permission denied" in output[0]:
print('error: Cannot init. Check permission to folder')
print(output[0])
if form.getvalue('awsvars') or form.getvalue('awseditvars'):
if form.getvalue('awsvars'):
awsvars = common.checkAjaxInput(form.getvalue('awsvars'))
group = common.checkAjaxInput(form.getvalue('aws_create_group'))
provider = common.checkAjaxInput(form.getvalue('aws_create_provider'))
region = common.checkAjaxInput(form.getvalue('aws_create_regions'))
size = common.checkAjaxInput(form.getvalue('aws_create_size'))
oss = common.checkAjaxInput(form.getvalue('aws_create_oss'))
ssh_name = common.checkAjaxInput(form.getvalue('aws_create_ssh_name'))
volume_size = common.checkAjaxInput(form.getvalue('aws_create_volume_size'))
volume_type = common.checkAjaxInput(form.getvalue('aws_create_volume_type'))
delete_on_termination = common.checkAjaxInput(form.getvalue('aws_create_delete_on_termination'))
floating_ip = common.checkAjaxInput(form.getvalue('aws_create_floating_net'))
firewall = common.checkAjaxInput(form.getvalue('aws_create_firewall'))
public_ip = common.checkAjaxInput(form.getvalue('aws_create_public_ip'))
elif form.getvalue('awseditvars'):
awsvars = common.checkAjaxInput(form.getvalue('awseditvars'))
group = common.checkAjaxInput(form.getvalue('aws_editing_group'))
provider = common.checkAjaxInput(form.getvalue('aws_editing_provider'))
region = common.checkAjaxInput(form.getvalue('aws_editing_regions'))
size = common.checkAjaxInput(form.getvalue('aws_editing_size'))
oss = common.checkAjaxInput(form.getvalue('aws_editing_oss'))
ssh_name = common.checkAjaxInput(form.getvalue('aws_editing_ssh_name'))
volume_size = common.checkAjaxInput(form.getvalue('aws_editing_volume_size'))
volume_type = common.checkAjaxInput(form.getvalue('aws_editing_volume_type'))
delete_on_termination = common.checkAjaxInput(form.getvalue('aws_editing_delete_on_termination'))
floating_ip = common.checkAjaxInput(form.getvalue('aws_editing_floating_net'))
firewall = common.checkAjaxInput(form.getvalue('aws_editing_firewall'))
public_ip = common.checkAjaxInput(form.getvalue('aws_editing_public_ip'))
aws_key, aws_secret = sql.select_aws_provider(provider)
cmd = f'cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e "region={region} ' \
f'group={group} size={size} os={oss} floating_ip={floating_ip} volume_size={volume_size} server_name={awsvars} ' \
f'AWS_ACCESS_KEY={aws_key} AWS_SECRET_KEY={aws_secret} firewall={firewall} public_ip={public_ip} ' \
f'ssh_name={ssh_name} delete_on_termination={delete_on_termination} volume_type={volume_type} cloud=aws"'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print('error: ' + stderr)
else:
print('ok')
if form.getvalue('dovars') or form.getvalue('doeditvars'):
if form.getvalue('dovars'):
dovars = form.getvalue('dovars')
group = form.getvalue('do_create_group')
provider = form.getvalue('do_create_provider')
region = form.getvalue('do_create_regions')
size = form.getvalue('do_create_size')
oss = form.getvalue('do_create_oss')
ssh_name = form.getvalue('do_create_ssh_name')
ssh_ids = form.getvalue('do_create_ssh_ids')
backup = form.getvalue('do_create_backup')
privet_net = form.getvalue('do_create_private_net')
floating_ip = form.getvalue('do_create_floating_net')
monitoring = form.getvalue('do_create_monitoring')
firewall = form.getvalue('do_create_firewall')
elif form.getvalue('doeditvars'):
dovars = form.getvalue('doeditvars')
group = form.getvalue('do_edit_group')
provider = form.getvalue('do_edit_provider')
region = form.getvalue('do_edit_regions')
size = form.getvalue('do_edit_size')
oss = form.getvalue('do_edit_oss')
ssh_name = form.getvalue('do_edit_ssh_name')
ssh_ids = form.getvalue('do_edit_ssh_ids')
backup = form.getvalue('do_edit_backup')
privet_net = form.getvalue('do_edit_private_net')
floating_ip = form.getvalue('do_edit_floating_net')
monitoring = form.getvalue('do_edit_monitoring')
firewall = form.getvalue('do_edit_firewall')
token = sql.select_do_provider(provider)
cmd = f'cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e "region={region} ' \
f'group={group} size={size} os={oss} floating_ip={floating_ip} ssh_ids={ssh_ids} server_name={dovars} ' \
f'token={token} backup={backup} monitoring={monitoring} privet_net={privet_net} firewall={firewall} ' \
f'floating_ip={floating_ip} ssh_name={ssh_name} cloud=do"'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
print(cmd)
print(output)
if form.getvalue('dovalidate') or form.getvalue('doeditvalidate'):
if form.getvalue('dovalidate'):
workspace = form.getvalue('dovalidate')
group = form.getvalue('do_create_group')
elif form.getvalue('doeditvalidate'):
workspace = form.getvalue('doeditvalidate')
group = form.getvalue('do_edit_group')
cmd = f'cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.do_module -var-file vars/{workspace}_{group}_do.tfvars'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
print('ok')
if form.getvalue('doworkspace'):
workspace = form.getvalue('doworkspace')
group = form.getvalue('do_create_group')
provider = form.getvalue('do_create_provider')
region = form.getvalue('do_create_regions')
size = form.getvalue('do_create_size')
oss = form.getvalue('do_create_oss')
ssh_name = form.getvalue('do_create_ssh_name')
ssh_ids = form.getvalue('do_create_ssh_ids')
backup = form.getvalue('do_create_backup')
privet_net = form.getvalue('do_create_private_net')
floating_ip = form.getvalue('do_create_floating_net')
monitoring = form.getvalue('do_create_monitoring')
firewall = form.getvalue('do_create_firewall')
cmd = 'cd scripts/terraform/ && sudo terraform workspace new ' + workspace + '_' + group + '_do'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
stderr = stderr.strip()
stderr = repr(stderr)
stderr = stderr.replace("'", "")
stderr = stderr.replace("\'", "")
sql.update_provisioning_server_status('Error', group, workspace, provider)
sql.update_provisioning_server_error(stderr, group, workspace, provider)
print('error: ' + stderr)
else:
if sql.add_server_do(
region, size, privet_net, floating_ip, ssh_ids, ssh_name, workspace, oss, firewall, monitoring,
backup, provider, group, 'Creating'
):
user_params = roxywi_common.get_users_params()
new_server = sql.select_provisioned_servers(new=workspace, group=group, type='do')
params = sql.select_provisioning_params()
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/provisioned_servers.html')
template = template.render(
servers=new_server, groups=sql.select_groups(), user_group=group,
providers=sql.select_providers(group), role=user_params['role'], adding=1, params=params
)
print(template)
if form.getvalue('doeditworkspace'):
workspace = form.getvalue('doeditworkspace')
group = form.getvalue('do_edit_group')
provider = form.getvalue('do_edit_provider')
region = form.getvalue('do_edit_regions')
size = form.getvalue('do_edit_size')
oss = form.getvalue('do_edit_oss')
ssh_name = form.getvalue('do_edit_ssh_name')
ssh_ids = form.getvalue('do_edit_ssh_ids')
backup = form.getvalue('do_edit_backup')
privet_net = form.getvalue('do_edit_private_net')
floating_ip = form.getvalue('do_edit_floating_net')
monitoring = form.getvalue('do_edit_monitoring')
firewall = form.getvalue('do_edit_firewall')
server_id = form.getvalue('server_id')
try:
if sql.update_server_do(
size, privet_net, floating_ip, ssh_ids, ssh_name, oss, firewall, monitoring, backup, provider,
group, 'Creating', server_id
):
cmd = 'cd scripts/terraform/ && sudo terraform workspace select ' + workspace + '_' + group + '_do'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
stderr = stderr.strip()
stderr = repr(stderr)
stderr = stderr.replace("'", "")
stderr = stderr.replace("\'", "")
sql.update_provisioning_server_status('Error', group, workspace, provider)
sql.update_provisioning_server_error(stderr, group, workspace, provider)
print('error: ' + stderr)
else:
print(cmd)
print(output)
except Exception as e:
print(e)
if form.getvalue('awsvalidate') or form.getvalue('awseditvalidate'):
if form.getvalue('awsvalidate'):
workspace = form.getvalue('awsvalidate')
group = form.getvalue('aws_create_group')
elif form.getvalue('awseditvalidate'):
workspace = form.getvalue('awseditvalidate')
group = form.getvalue('aws_edit_group')
cmd = f'cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.aws_module -var-file vars/{workspace}_{group}_aws.tfvars'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print('error: ' + stderr)
else:
print('ok')
if form.getvalue('awsworkspace'):
workspace = form.getvalue('awsworkspace')
group = form.getvalue('aws_create_group')
provider = form.getvalue('aws_create_provider')
region = form.getvalue('aws_create_regions')
size = form.getvalue('aws_create_size')
oss = form.getvalue('aws_create_oss')
ssh_name = form.getvalue('aws_create_ssh_name')
volume_size = form.getvalue('aws_create_volume_size')
volume_type = form.getvalue('aws_create_volume_type')
delete_on_termination = form.getvalue('aws_create_delete_on_termination')
floating_ip = form.getvalue('aws_create_floating_net')
firewall = form.getvalue('aws_create_firewall')
public_ip = form.getvalue('aws_create_public_ip')
cmd = f'cd scripts/terraform/ && sudo terraform workspace new {workspace}_{group}_aws'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
stderr = stderr.strip()
stderr = repr(stderr)
stderr = stderr.replace("'", "")
stderr = stderr.replace("\'", "")
sql.update_provisioning_server_status('Error', group, workspace, provider)
sql.update_provisioning_server_error(stderr, group, workspace, provider)
print('error: ' + stderr)
else:
try:
if sql.add_server_aws(
region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Creating', delete_on_termination, volume_type
):
user_params = roxywi_common.get_users_params()
new_server = sql.select_provisioned_servers(new=workspace, group=group, type='aws')
params = sql.select_provisioning_params()
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/provisioned_servers.html')
template = template.render(
servers=new_server, groups=sql.select_groups(), user_group=group,
providers=sql.select_providers(group), role=user_params['role'], adding=1, params=params
)
print(template)
except Exception as e:
print(e)
if form.getvalue('awseditworkspace'):
workspace = form.getvalue('awseditworkspace')
group = form.getvalue('aws_editing_group')
provider = form.getvalue('aws_editing_provider')
region = form.getvalue('aws_editing_regions')
size = form.getvalue('aws_editing_size')
oss = form.getvalue('aws_editing_oss')
ssh_name = form.getvalue('aws_editing_ssh_name')
volume_size = form.getvalue('aws_editing_volume_size')
volume_type = form.getvalue('aws_editing_volume_type')
delete_on_termination = form.getvalue('aws_editing_delete_on_termination')
floating_ip = form.getvalue('aws_editing_floating_net')
firewall = form.getvalue('aws_editing_firewall')
public_ip = form.getvalue('aws_editing_public_ip')
server_id = form.getvalue('server_id')
try:
if sql.update_server_aws(
region, size, public_ip, floating_ip, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Editing', server_id, delete_on_termination, volume_type
):
try:
cmd = f'cd scripts/terraform/ && sudo terraform workspace select {workspace}_{group}_aws'
output, stderr = server_mod.subprocess_execute(cmd)
except Exception as e:
print('error: ' + str(e))
if stderr != '':
stderr = stderr.strip()
stderr = repr(stderr)
stderr = stderr.replace("'", "")
stderr = stderr.replace("\'", "")
sql.update_provisioning_server_error(stderr, group, workspace, provider)
print('error: ' + stderr)
else:
print('ok')
except Exception as e:
print(e)
if (
form.getvalue('awsprovisining')
or form.getvalue('awseditingprovisining')
or form.getvalue('doprovisining')
or form.getvalue('doeditprovisining')
or form.getvalue('gcoreprovisining')
or form.getvalue('gcoreeditgprovisining')
):
roxywi_common.check_user_group()
if form.getvalue('awsprovisining'):
workspace = form.getvalue('awsprovisining')
group = form.getvalue('aws_create_group')
provider_id = form.getvalue('aws_create_provider')
action = 'created'
cloud = 'aws'
state_name = 'aws_instance'
elif form.getvalue('awseditingprovisining'):
workspace = form.getvalue('awseditingprovisining')
group = form.getvalue('aws_edit_group')
provider_id = form.getvalue('aws_edit_provider')
action = 'modified'
cloud = 'aws'
state_name = 'aws_instance'
elif form.getvalue('doprovisining'):
workspace = form.getvalue('doprovisining')
group = form.getvalue('do_create_group')
provider_id = form.getvalue('do_create_provider')
action = 'created'
cloud = 'do'
state_name = 'digitalocean_droplet'
elif form.getvalue('doeditprovisining'):
workspace = form.getvalue('doeditprovisining')
group = form.getvalue('do_edit_group')
provider_id = form.getvalue('do_edit_provider')
action = 'modified'
cloud = 'do'
state_name = 'digitalocean_droplet'
elif form.getvalue('gcoreprovisining'):
workspace = form.getvalue('gcoreprovisining')
group = form.getvalue('gcore_create_group')
provider_id = form.getvalue('gcore_create_provider')
action = 'created'
cloud = 'gcore'
state_name = 'gcore_instance'
elif form.getvalue('gcoreeditgprovisining'):
workspace = form.getvalue('gcoreeditgprovisining')
group = form.getvalue('gcore_edit_group')
provider_id = form.getvalue('gcore_edit_provider')
action = 'modified'
cloud = 'gcore'
state_name = 'gcore_instance'
tfvars = f'{workspace}_{group}_{cloud}.tfvars'
cmd = f'cd scripts/terraform/ && sudo terraform apply -auto-approve -no-color -input=false -target=module.{cloud}_module -var-file vars/{tfvars}'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
stderr = stderr.strip()
stderr = repr(stderr)
stderr = stderr.replace("'", "")
stderr = stderr.replace("\'", "")
sql.update_provisioning_server_status('Error', group, workspace, provider_id)
sql.update_provisioning_server_error(stderr, group, workspace, provider_id)
print('error: ' + stderr)
else:
if cloud == 'aws':
cmd = 'cd scripts/terraform/ && sudo terraform state show module.aws_module.aws_eip.floating_ip[0]|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
cmd = 'cd scripts/terraform/ && sudo terraform state show module.' + cloud + '_module.' + state_name + '.hapwi|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"'
else:
cmd = 'cd scripts/terraform/ && sudo terraform state show module.' + cloud + '_module.' + state_name + '.hapwi|grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"'
output, stderr = server_mod.subprocess_execute(cmd)
ips = ''
for ip in output:
ips += ip
ips += ' '
if cloud == 'gcore':
ips = ips.split(' ')[0]
print(ips)
try:
sql.update_provisioning_server_status('Created', group, workspace, provider_id, update_ip=ips)
except Exception as e:
print(e)
if cloud == 'gcore':
cmd = 'cd scripts/terraform/ && sudo terraform state show module.gcore_module.gcore_instance.hapwi|grep "name"|grep -v -e "_name\|name_" |head -1 |awk -F"\\\"" \'{print $2}\''
output, stderr = server_mod.subprocess_execute(cmd)
print(':' + output[0])
try:
sql.update_provisioning_server_gcore_name(workspace, output[0], group, provider_id)
except Exception as e:
print(e)
roxywi_common.logging('Roxy-WI server', f'Server {workspace} has been {action}', provisioning=1)
if form.getvalue('provisiningdestroyserver'):
roxywi_common.check_user_group()
server_id = form.getvalue('provisiningdestroyserver')
workspace = form.getvalue('servername')
group = form.getvalue('group')
cloud_type = form.getvalue('type')
provider_id = form.getvalue('provider_id')
tf_workspace = f'{workspace}_{group}_{cloud_type}'
cmd = f'cd scripts/terraform/ && sudo terraform init -upgrade -no-color && sudo terraform workspace select {tf_workspace}'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
stderr = stderr.strip()
stderr = repr(stderr)
stderr = stderr.replace("'", "")
stderr = stderr.replace("\'", "")
sql.update_provisioning_server_status('Error', group, workspace, provider_id)
sql.update_provisioning_server_error(stderr, group, workspace, provider_id)
print('error: ' + stderr)
else:
cmd = f'cd scripts/terraform/ && sudo terraform destroy -auto-approve -no-color -target=module.{cloud_type}_module -var-file vars/{tf_workspace}.tfvars'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
cmd = f'cd scripts/terraform/ && sudo terraform workspace select default && sudo terraform workspace delete -force {tf_workspace}'
output, stderr = server_mod.subprocess_execute(cmd)
print('ok')
roxywi_common.logging('Roxy-WI server', 'Server has been destroyed', provisioning=1)
try:
sql.delete_provisioned_servers(server_id)
except Exception as e:
print(e)
if form.getvalue('gcorevars') or form.getvalue('gcoreeditvars'):
if form.getvalue('gcorevars'):
gcorevars = form.getvalue('gcorevars')
group = form.getvalue('gcore_create_group')
provider = form.getvalue('gcore_create_provider')
region = form.getvalue('gcore_create_regions')
project = form.getvalue('gcore_create_project')
size = form.getvalue('gcore_create_size')
oss = form.getvalue('gcore_create_oss')
ssh_name = form.getvalue('gcore_create_ssh_name')
volume_size = form.getvalue('gcore_create_volume_size')
volume_type = form.getvalue('gcore_create_volume_type')
delete_on_termination = form.getvalue('gcore_create_delete_on_termination')
network_name = form.getvalue('gcore_create_network_name')
firewall = form.getvalue('gcore_create_firewall')
network_type = form.getvalue('gcore_create_network_type')
elif form.getvalue('gcoreeditvars'):
gcorevars = form.getvalue('gcoreeditvars')
group = form.getvalue('gcore_edit_group')
provider = form.getvalue('gcore_edit_provider')
region = form.getvalue('gcore_edit_regions')
project = form.getvalue('gcore_edit_project')
size = form.getvalue('gcore_edit_size')
oss = form.getvalue('gcore_edit_oss')
ssh_name = form.getvalue('gcore_edit_ssh_name')
volume_size = form.getvalue('gcore_edit_volume_size')
volume_type = form.getvalue('gcore_edit_volume_type')
delete_on_termination = form.getvalue('gcore_edit_delete_on_termination')
network_name = form.getvalue('gcore_edit_network_name')
firewall = form.getvalue('gcore_edit_firewall')
network_type = form.getvalue('gcore_edit_network_type')
try:
gcore_user, gcore_pass = sql.select_gcore_provider(provider)
except Exception as e:
print(e)
cmd = 'cd scripts/terraform/ && sudo ansible-playbook var_generator.yml -i inventory -e "region={} ' \
'group={} size={} os={} network_name={} volume_size={} server_name={} username={} ' \
'pass={} firewall={} network_type={} ssh_name={} delete_on_termination={} project={} volume_type={} ' \
'cloud=gcore"'.format(region, group, size, oss, network_name, volume_size, gcorevars, gcore_user, gcore_pass,
firewall, network_type, ssh_name, delete_on_termination, project, volume_type)
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
print('ok')
if form.getvalue('gcorevalidate') or form.getvalue('gcoreeditvalidate'):
if form.getvalue('gcorevalidate'):
workspace = form.getvalue('gcorevalidate')
group = form.getvalue('gcore_create_group')
elif form.getvalue('gcoreeditvalidate'):
workspace = form.getvalue('gcoreeditvalidate')
group = form.getvalue('gcore_edit_group')
cmd = f'cd scripts/terraform/ && sudo terraform plan -no-color -input=false -target=module.gcore_module -var-file vars/{workspace}_{group}_gcore.tfvars'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
print(f'error: {stderr}')
else:
print('ok')
if form.getvalue('gcoreworkspace'):
workspace = form.getvalue('gcoreworkspace')
group = form.getvalue('gcore_create_group')
provider = form.getvalue('gcore_create_provider')
region = form.getvalue('gcore_create_regions')
project = form.getvalue('gcore_create_project')
size = form.getvalue('gcore_create_size')
oss = form.getvalue('gcore_create_oss')
ssh_name = form.getvalue('gcore_create_ssh_name')
volume_size = form.getvalue('gcore_create_volume_size')
volume_type = form.getvalue('gcore_create_volume_type')
delete_on_termination = form.getvalue('gcore_create_delete_on_termination')
network_type = form.getvalue('gcore_create_network_type')
firewall = form.getvalue('gcore_create_firewall')
network_name = form.getvalue('gcore_create_network_name')
cmd = 'cd scripts/terraform/ && sudo terraform workspace new ' + workspace + '_' + group + '_gcore'
output, stderr = server_mod.subprocess_execute(cmd)
if stderr != '':
stderr = stderr.strip()
stderr = repr(stderr)
stderr = stderr.replace("'", "")
stderr = stderr.replace("\'", "")
sql.update_provisioning_server_status('Error', group, workspace, provider)
sql.update_provisioning_server_error(stderr, group, workspace, provider)
print('error: ' + stderr)
else:
try:
if sql.add_server_gcore(
project, region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Creating', delete_on_termination, volume_type
):
user_params = roxywi_common.get_users_params()
new_server = sql.select_provisioned_servers(new=workspace, group=group, type='gcore')
params = sql.select_provisioning_params()
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/provisioned_servers.html')
template = template.render(servers=new_server,
groups=sql.select_groups(),
user_group=group,
providers=sql.select_providers(group),
role=user_params['role'],
adding=1,
params=params)
print(template)
except Exception as e:
print(e)
if form.getvalue('gcoreeditworkspace'):
workspace = form.getvalue('gcoreeditworkspace')
group = form.getvalue('gcore_edit_group')
provider = form.getvalue('gcore_edit_provider')
region = form.getvalue('gcore_edit_regions')
project = form.getvalue('gcore_edit_project')
size = form.getvalue('gcore_edit_size')
oss = form.getvalue('gcore_edit_oss')
ssh_name = form.getvalue('gcore_edit_ssh_name')
volume_size = form.getvalue('gcore_edit_volume_size')
volume_type = form.getvalue('gcore_edit_volume_type')
delete_on_termination = form.getvalue('gcore_edit_delete_on_termination')
network_type = form.getvalue('gcore_edit_network_type')
firewall = form.getvalue('gcore_edit_firewall')
network_name = form.getvalue('gcore_edit_network_name')
server_id = form.getvalue('server_id')
try:
if sql.update_server_gcore(
region, size, network_type, network_name, volume_size, ssh_name, workspace, oss, firewall,
provider, group, 'Editing', server_id, delete_on_termination, volume_type, project
):
try:
cmd = 'cd scripts/terraform/ && sudo terraform workspace select ' + workspace + '_' + group + '_gcore'
output, stderr = server_mod.subprocess_execute(cmd)
except Exception as e:
print('error: ' + str(e))
if stderr != '':
stderr = stderr.strip()
stderr = repr(stderr)
stderr = stderr.replace("'", "")
stderr = stderr.replace("\'", "")
sql.update_provisioning_server_error(stderr, group, workspace, provider)
print('error: ' + stderr)
else:
print('ok')
except Exception as e:
print(e)
if form.getvalue('editAwsServer'):
roxywi_common.check_user_group()
server_id = form.getvalue('editAwsServer')
user_group = form.getvalue('editAwsGroup')
params = sql.select_provisioning_params()
providers = sql.select_providers(int(user_group))
server = sql.select_gcore_server(server_id=server_id)
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/aws_edit_dialog.html')
template = template.render(server=server, providers=providers, params=params)
print(template)
if form.getvalue('editGcoreServer'):
roxywi_common.check_user_group()
server_id = form.getvalue('editGcoreServer')
user_group = form.getvalue('editGcoreGroup')
params = sql.select_provisioning_params()
providers = sql.select_providers(int(user_group))
server = sql.select_gcore_server(server_id=server_id)
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/gcore_edit_dialog.html')
template = template.render(server=server, providers=providers, params=params)
print(template)
if form.getvalue('editDoServer'):
roxywi_common.check_user_group()
server_id = form.getvalue('editDoServer')
user_group = form.getvalue('editDoGroup')
params = sql.select_provisioning_params()
providers = sql.select_providers(int(user_group))
server = sql.select_do_server(server_id=server_id)
env = Environment(extensions=["jinja2.ext.do"], loader=FileSystemLoader('templates'))
template = env.get_template('ajax/provisioning/do_edit_dialog.html')
template = template.render(server=server, providers=providers, params=params)
print(template)
if form.getvalue('edit_do_provider'):
roxywi_common.check_user_group()
provider_id = form.getvalue('edit_do_provider')
new_name = form.getvalue('edit_do_provider_name')
new_token = form.getvalue('edit_do_provider_token')
try:
if sql.update_do_provider(new_name, new_token, provider_id):
print('ok')
roxywi_common.logging('Roxy-WI server', f'Provider has been renamed. New name is {new_name}', provisioning=1)
except Exception as e:
print(e)
if form.getvalue('edit_gcore_provider'):
roxywi_common.check_user_group()
provider_id = form.getvalue('edit_gcore_provider')
new_name = form.getvalue('edit_gcore_provider_name')
new_user = form.getvalue('edit_gcore_provider_user')
new_pass = form.getvalue('edit_gcore_provider_pass')
try:
if sql.update_gcore_provider(new_name, new_user, new_pass, provider_id):
print('ok')
roxywi_common.logging('Roxy-WI server', f'Provider has been renamed. New name is {new_name}', provisioning=1)
except Exception as e:
print(e)
if form.getvalue('edit_aws_provider'):
roxywi_common.check_user_group()
provider_id = form.getvalue('edit_aws_provider')
new_name = form.getvalue('edit_aws_provider_name')
new_key = form.getvalue('edit_aws_provider_key')
new_secret = form.getvalue('edit_aws_provider_secret')
try:
if sql.update_aws_provider(new_name, new_key, new_secret, provider_id):
print('ok')
roxywi_common.logging('Roxy-WI server', f'Provider has been renamed. New name is {new_name}', provisioning=1)
except Exception as e:
print(e)
if form.getvalue('loadservices'):
from modules.roxywi.roxy import get_services_status
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('ajax/load_services.html')
try:
services = get_services_status()
except Exception as e:
print(e)
template = template.render(services=services)
print(template)
if form.getvalue('loadchecker'):
from modules.roxywi.roxy import get_services_status
env = Environment(loader=FileSystemLoader('templates'), autoescape=True)
template = env.get_template('ajax/load_telegram.html')
services = get_services_status()
groups = sql.select_groups()
page = form.getvalue('page')
try:
user_subscription = roxywi_common.return_user_status()
except Exception as e:
user_subscription = roxywi_common.return_unsubscribed_user_status()
roxywi_common.logging('Roxy-WI server', f'Cannot get a user plan: {e}', roxywi=1)
if user_subscription['user_status']:
haproxy_settings = sql.select_checker_settings(1)
nginx_settings = sql.select_checker_settings(2)
keepalived_settings = sql.select_checker_settings(3)
apache_settings = sql.select_checker_settings(4)
if page == 'servers.py':
user_group = roxywi_common.get_user_group(id=1)
telegrams = sql.get_user_telegram_by_group(user_group)
slacks = sql.get_user_slack_by_group(user_group)
haproxy_servers = roxywi_common.get_dick_permit(haproxy=1, only_group=1)
nginx_servers = roxywi_common.get_dick_permit(nginx=1, only_group=1)
apache_servers = roxywi_common.get_dick_permit(apache=1, only_group=1)
keepalived_servers = roxywi_common.get_dick_permit(keepalived=1, only_group=1)
else:
telegrams = sql.select_telegram()
slacks = sql.select_slack()
haproxy_servers = roxywi_common.get_dick_permit(haproxy=1)
nginx_servers = roxywi_common.get_dick_permit(nginx=1)
apache_servers = roxywi_common.get_dick_permit(apache=1)
keepalived_servers = roxywi_common.get_dick_permit(keepalived=1)
else:
telegrams = ''
slacks = ''
template = template.render(services=services,
telegrams=telegrams,
groups=groups,
slacks=slacks,
user_status=user_subscription['user_status'],
user_plan=user_subscription['user_plan'],
haproxy_servers=haproxy_servers,
nginx_servers=nginx_servers,
apache_servers=apache_servers,
keepalived_servers=keepalived_servers,
haproxy_settings=haproxy_settings,
nginx_settings=nginx_settings,
keepalived_settings=keepalived_settings,
apache_settings=apache_settings,
page=page)
print(template)
if form.getvalue('load_update_hapwi'):
import modules.roxywi.roxy as roxy
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('ajax/load_updateroxywi.html')
versions = roxy.versions()
checker_ver = roxy.check_new_version('checker')
smon_ver = roxy.check_new_version('smon')
metrics_ver = roxy.check_new_version('metrics')
keep_ver = roxy.check_new_version('keep_alive')
portscanner_ver = roxy.check_new_version('portscanner')
socket_ver = roxy.check_new_version('socket')
prometheus_exp_ver = roxy.check_new_version('prometheus-exporter')
services = roxy.get_services_status()
template = template.render(services=services,
versions=versions,
checker_ver=checker_ver,
smon_ver=smon_ver,
metrics_ver=metrics_ver,
portscanner_ver=portscanner_ver,
socket_ver=socket_ver,
prometheus_exp_ver=prometheus_exp_ver,
keep_ver=keep_ver)
print(template)
if form.getvalue('loadopenvpn'):
import distro
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('ajax/load_openvpn.html')
openvpn_configs = ''
openvpn_sess = ''
openvpn = ''
if distro.id() == 'ubuntu':
stdout, stderr = server_mod.subprocess_execute("apt show openvpn3 2>&1|grep E:")
elif distro.id() == 'centos' or distro.id() == 'rhel':
stdout, stderr = server_mod.subprocess_execute("rpm --query openvpn3-client")
if (
(stdout[0] != 'package openvpn3-client is not installed' and stderr != '/bin/sh: rpm: command not found')
and stdout[0] != 'E: No packages found'
):
cmd = "sudo openvpn3 configs-list |grep -E 'ovpn|(^|[^0-9])[0-9]{4}($|[^0-9])' |grep -v net|awk -F\" \" '{print $1}'|awk 'ORS=NR%2?\" \":\"\\n\"'"
openvpn_configs, stderr = server_mod.subprocess_execute(cmd)
cmd = "sudo openvpn3 sessions-list|grep -E 'Config|Status'|awk -F\":\" '{print $2}'|awk 'ORS=NR%2?\" \":\"\\n\"'| sed 's/^ //g'"
openvpn_sess, stderr = server_mod.subprocess_execute(cmd)
openvpn = stdout[0]
template = template.render(openvpn=openvpn,
openvpn_sess=openvpn_sess,
openvpn_configs=openvpn_configs)
print(template)
if form.getvalue('check_telegram'):
import modules.alerting.alerting as alerting
telegram_id = form.getvalue('check_telegram')
mess = 'Test message from Roxy-WI'
alerting.telegram_send_mess(mess, telegram_channel_id=telegram_id)
if form.getvalue('check_slack'):
import modules.alerting.alerting as alerting
slack_id = form.getvalue('check_slack')
mess = 'Test message from Roxy-WI'
alerting.slack_send_mess(mess, slack_channel_id=slack_id)
if form.getvalue('check_rabbitmq_alert'):
import modules.alerting.alerting as alerting
alerting.check_rabbit_alert()
if form.getvalue('check_email_alert'):
import modules.alerting.alerting as alerting
alerting.check_email_alert()
if form.getvalue('getoption'):
group = form.getvalue('getoption')
term = form.getvalue('term')
options = sql.select_options(group=group, term=term)
a = {}
v = 0
for i in options:
a[v] = i.options
v = v + 1
print(json.dumps(a))
if form.getvalue('newtoption'):
option = form.getvalue('newtoption')
group = form.getvalue('newoptiongroup')
if option is None or group is None:
print(error_mess)
else:
if sql.insert_new_option(option, group):
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/new_option.html')
template = template.render(options=sql.select_options(option=option))
print(template)
if form.getvalue('updateoption') is not None:
option = form.getvalue('updateoption')
option_id = form.getvalue('id')
if option is None or option_id is None:
print(error_mess)
else:
sql.update_options(option, option_id)
if form.getvalue('optiondel') is not None:
if sql.delete_option(form.getvalue('optiondel')):
print("Ok")
if form.getvalue('getsavedserver'):
group = form.getvalue('getsavedserver')
term = form.getvalue('term')
servers = sql.select_saved_servers(group=group, term=term)
a = {}
v = 0
for i in servers:
a[v] = {}
a[v]['value'] = {}
a[v]['desc'] = {}
a[v]['value'] = i.server
a[v]['desc'] = i.description
v = v + 1
print(json.dumps(a))
if form.getvalue('newsavedserver'):
savedserver = form.getvalue('newsavedserver')
description = form.getvalue('newsavedserverdesc')
group = form.getvalue('newsavedservergroup')
if savedserver is None or group is None:
print(error_mess)
else:
if sql.insert_new_savedserver(savedserver, description, group):
env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True)
template = env.get_template('/new_saved_servers.html')
template = template.render(server=sql.select_saved_servers(server=savedserver))
print(template)
if form.getvalue('updatesavedserver') is not None:
savedserver = form.getvalue('updatesavedserver')
description = form.getvalue('description')
savedserver_id = form.getvalue('id')
if savedserver is None or savedserver_id is None:
print(error_mess)
else:
sql.update_savedserver(savedserver, description, savedserver_id)
if form.getvalue('savedserverdel') is not None:
if sql.delete_savedserver(common.checkAjaxInput(form.getvalue('savedserverdel'))):
print("Ok")
if form.getvalue('show_users_ovw') is not None:
import modules.roxywi.overview as roxywi_overview
roxywi_overview.user_ovw()
if form.getvalue('serverSettings') is not None:
server_id = common.checkAjaxInput(form.getvalue('serverSettings'))
service = common.checkAjaxInput(form.getvalue('serverSettingsService'))
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 = common.checkAjaxInput(form.getvalue('serverSettingsSave'))
service = common.checkAjaxInput(form.getvalue('serverSettingsService'))
haproxy_enterprise = common.checkAjaxInput(form.getvalue('serverSettingsEnterprise'))
haproxy_dockerized = common.checkAjaxInput(form.getvalue('serverSettingshaproxy_dockerized'))
nginx_dockerized = common.checkAjaxInput(form.getvalue('serverSettingsnginx_dockerized'))
apache_dockerized = common.checkAjaxInput(form.getvalue('serverSettingsapache_dockerized'))
haproxy_restart = common.checkAjaxInput(form.getvalue('serverSettingsHaproxyrestart'))
nginx_restart = common.checkAjaxInput(form.getvalue('serverSettingsNginxrestart'))
apache_restart = common.checkAjaxInput(form.getvalue('serverSettingsApache_restart'))
server_ip = sql.select_server_ip_by_id(server_id)
if service == 'haproxy':
if sql.insert_or_update_service_setting(server_id, service, 'haproxy_enterprise', haproxy_enterprise):
print('Ok')
if haproxy_enterprise == '1':
roxywi_common.logging(server_ip, 'Service has been flagged as an Enterprise version', roxywi=1, login=1,
keep_history=1, service=service)
else:
roxywi_common.logging(server_ip, 'Service has been flagged as a community version', roxywi=1, login=1,
keep_history=1, service=service)
if sql.insert_or_update_service_setting(server_id, service, 'dockerized', haproxy_dockerized):
print('Ok')
if haproxy_dockerized == '1':
roxywi_common.logging(server_ip, 'Service has been flagged as a dockerized', roxywi=1, login=1,
keep_history=1, service=service)
else:
roxywi_common.logging(server_ip, 'Service has been flagged as a system service', roxywi=1, login=1,
keep_history=1, service=service)
if sql.insert_or_update_service_setting(server_id, service, 'restart', haproxy_restart):
print('Ok')
if haproxy_restart == '1':
roxywi_common.logging(server_ip, 'Restart option is disabled for this service', roxywi=1, login=1,
keep_history=1, service=service)
else:
roxywi_common.logging(server_ip, 'Restart option is disabled for this service', roxywi=1, login=1,
keep_history=1, service=service)
if service == 'nginx':
if sql.insert_or_update_service_setting(server_id, service, 'dockerized', nginx_dockerized):
print('Ok')
if nginx_dockerized:
roxywi_common.logging(server_ip, 'Service has been flagged as a dockerized', roxywi=1, login=1,
keep_history=1, service=service)
else:
roxywi_common.logging(server_ip, 'Service has been flagged as a system service', roxywi=1, login=1,
keep_history=1, service=service)
if sql.insert_or_update_service_setting(server_id, service, 'restart', nginx_restart):
print('Ok')
if nginx_restart == '1':
roxywi_common.logging(server_ip, 'Restart option is disabled for this service', roxywi=1, login=1,
keep_history=1, service=service)
else:
roxywi_common.logging(server_ip, 'Restart option is disabled for this service', roxywi=1, login=1,
keep_history=1, service=service)
if service == 'apache':
if sql.insert_or_update_service_setting(server_id, service, 'dockerized', apache_dockerized):
print('Ok')
if apache_dockerized:
roxywi_common.logging(server_ip, 'Service has been flagged as a dockerized', roxywi=1, login=1,
keep_history=1, service=service)
else:
roxywi_common.logging(server_ip, 'Service has been flagged as a system service', roxywi=1, login=1,
keep_history=1, service=service)
if sql.insert_or_update_service_setting(server_id, service, 'restart', apache_restart):
print('Ok')
if apache_restart == '1':
roxywi_common.logging(server_ip, 'Restart option is disabled for this service', roxywi=1, login=1,
keep_history=1, service=service)
else:
roxywi_common.logging(server_ip, 'Restart option is disabled for this service', roxywi=1, login=1,
keep_history=1, service=service)
if act == 'showListOfVersion':
service = common.checkAjaxInput(form.getvalue('service'))
configver = common.checkAjaxInput(form.getvalue('configver'))
for_delver = common.checkAjaxInput(form.getvalue('for_delver'))
style = common.checkAjaxInput(form.getvalue('style'))
users = sql.select_users()
service_desc = sql.select_service(service)
if service in ('haproxy', 'nginx', 'keepalived', 'apache'):
configs = sql.select_config_version(serv, service_desc.slug)
action = f'versions.py?service={service_desc.slug}'
if service in ('haproxy', 'nginx', 'apache'):
configs_dir = get_config.get_config_var('configs', f'{service_desc.service}_save_configs_dir')
else:
configs_dir = get_config.get_config_var('configs', 'kp_save_configs_dir')
if service == 'haproxy':
files = roxywi_common.get_files()
else:
files = roxywi_common.get_files(configs_dir, 'conf')
env = Environment(loader=FileSystemLoader('templates/'), autoescape=True,
extensions=["jinja2.ext.loopcontrols", "jinja2.ext.do"])
template = env.get_template('ajax/show_list_version.html')
template = template.render(serv=serv,
service=service,
action=action,
return_files=files,
configver=configver,
for_delver=for_delver,
configs=configs,
users=users,
style=style)
print(template)
if act == 'getSystemInfo':
server_mod.show_system_info()
if act == 'updateSystemInfo':
server_mod.update_system_info()
if act == 'server_is_up':
server_ip = common.is_ip_or_dns(form.getvalue('server_is_up'))
server_mod.server_is_up(server_ip)
if act == 'findInConfigs':
server_ip = serv
server_ip = common.is_ip_or_dns(server_ip)
finding_words = form.getvalue('words')
service = form.getvalue('service')
log_path = sql.get_setting(service + '_dir')
log_path = common.return_nice_path(log_path)
commands = [f'sudo grep "{finding_words}" {log_path}*/*.conf -C 2 -Rn']
return_find = server_mod.ssh_command(server_ip, commands, raw=1)
return_find = config_mod.show_finding_in_config(return_find, grep=finding_words)
if 'error: ' in return_find:
print(return_find)
sys.exit()
print(return_find)
if act == 'check_service':
import socket
from contextlib import closing
cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE"))
user_uuid = cookie.get('uuid')
user_id = sql.get_user_id_by_uuid(user_uuid.value)
user_services = sql.select_user_services(user_id)
server_id = common.checkAjaxInput(form.getvalue('server_id'))
service = common.checkAjaxInput(form.getvalue('service'))
if '1' in user_services:
if service == 'haproxy':
haproxy_sock_port = sql.get_setting('haproxy_sock_port')
cmd = 'echo "show info" |nc %s %s -w 1 -v|grep Name' % (serv, haproxy_sock_port)
out = server_mod.subprocess_execute(cmd)
for k in out[0]:
if "Name" in k:
print('up')
break
else:
print('down')
if '2' in user_services:
if service == 'nginx':
nginx_stats_port = sql.get_setting('nginx_stats_port')
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
sock.settimeout(5)
try:
if sock.connect_ex((serv, nginx_stats_port)) == 0:
print('up')
else:
print('down')
except Exception:
print('down')
if '4' in user_services:
if service == 'apache':
apache_stats_port = sql.get_setting('apache_stats_port')
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as sock:
sock.settimeout(5)
try:
if sock.connect_ex((serv, apache_stats_port)) == 0:
print('up')
else:
print('down')
except Exception as e:
print('down' + str(e))
if form.getvalue('show_sub_ovw'):
import modules.roxywi.overview as roxywi_overview
roxywi_overview.show_sub_ovw()
if form.getvalue('updateHaproxyCheckerSettings'):
setting_id = form.getvalue('updateHaproxyCheckerSettings')
email = form.getvalue('email')
service_alert = form.getvalue('server')
backend_alert = form.getvalue('backend')
maxconn_alert = form.getvalue('maxconn')
telegram_id = form.getvalue('telegram_id')
slack_id = form.getvalue('slack_id')
if sql.update_haproxy_checker_settings(email, telegram_id, slack_id, service_alert, backend_alert,
maxconn_alert, setting_id):
print('ok')
else:
print('error: Cannot update Checker settings')
if form.getvalue('updateKeepalivedCheckerSettings'):
setting_id = form.getvalue('updateKeepalivedCheckerSettings')
email = form.getvalue('email')
service_alert = form.getvalue('server')
backend_alert = form.getvalue('backend')
telegram_id = form.getvalue('telegram_id')
slack_id = form.getvalue('slack_id')
if sql.update_keepalived_checker_settings(email, telegram_id, slack_id, service_alert, backend_alert, setting_id):
print('ok')
else:
print('error: Cannot update Checker settings')
if form.getvalue('updateServiceCheckerSettings'):
setting_id = form.getvalue('updateServiceCheckerSettings')
email = form.getvalue('email')
service_alert = form.getvalue('server')
telegram_id = form.getvalue('telegram_id')
slack_id = form.getvalue('slack_id')
if sql.update_service_checker_settings(email, telegram_id, slack_id, service_alert, setting_id):
print('ok')
else:
print('error: Cannot update Checker settings')