From e935edd497817a4084239fb944cc1c1cd08f0780 Mon Sep 17 00:00:00 2001 From: Aidaho Date: Sun, 17 Sep 2023 17:34:56 +0300 Subject: [PATCH] v7.0.0.0 Changelog: https://roxy-wi.org/changelog#7.0.0 --- app/ajax_views.py | 3 +- app/modules/common/common.py | 3 -- app/modules/config/add.py | 9 +--- app/modules/config/runtime.py | 2 +- app/modules/roxywi/auth.py | 5 +-- app/modules/roxywi/common.py | 43 +------------------- app/modules/roxywi/logs.py | 1 - app/modules/roxywi/nettools.py | 1 + app/modules/roxywi/overview.py | 2 +- app/modules/roxywi/user.py | 4 +- app/modules/roxywi/waf.py | 2 - app/modules/server/server.py | 4 +- app/modules/server/ssh.py | 1 - app/modules/service/backup.py | 6 +-- app/modules/service/common.py | 2 - app/modules/service/exporter_installation.py | 6 +-- app/modules/service/haproxy.py | 5 +-- app/modules/tools/alerting.py | 1 - app/modules/tools/checker.py | 6 +-- app/modules/tools/smon.py | 2 +- app/routes/add/routes.py | 4 +- app/routes/admin/routes.py | 3 +- app/routes/checker/routes.py | 3 +- app/routes/config/routes.py | 7 ++-- app/routes/install/routes.py | 7 +--- app/routes/metric/routes.py | 3 +- app/routes/runtime/routes.py | 10 ++--- app/routes/server/routes.py | 7 ++-- app/routes/service/routes.py | 7 ++-- app/routes/smon/routes.py | 9 ++-- app/routes/user/routes.py | 1 - app/routes/waf/routes.py | 18 ++++---- app/views.py | 2 +- config_other/httpd/roxy-wi.conf | 4 +- config_other/httpd/roxy-wi_deb.conf | 4 +- config_other/requirements_el7.txt | 1 + config_other/requirements_el8.txt | 1 + config_other/requirements_el9.txt | 1 + requirements.txt | 1 + 39 files changed, 62 insertions(+), 139 deletions(-) diff --git a/app/ajax_views.py b/app/ajax_views.py index 8fbea176..a029112a 100644 --- a/app/ajax_views.py +++ b/app/ajax_views.py @@ -21,7 +21,6 @@ import modules.roxywi.common as roxywi_common import modules.roxywi.overview as roxy_overview - @app.route('/overview/services') @login_required def show_services_overview(): @@ -105,7 +104,7 @@ def show_roxywi_version(): @app.route('/stats/view//') def show_stats(service, server_ip): server_ip = common.is_ip_or_dns(server_ip) - + if service in ('nginx', 'apache'): return service_common.get_stat_page(server_ip, service) else: diff --git a/app/modules/common/common.py b/app/modules/common/common.py index 5e2de6eb..4b13850f 100644 --- a/app/modules/common/common.py +++ b/app/modules/common/common.py @@ -1,8 +1,5 @@ import re -import cgi -import cgitb -form = cgi.FieldStorage() error_mess = 'error: All fields must be completed' diff --git a/app/modules/config/add.py b/app/modules/config/add.py index 508c4a4b..e51d9f8a 100644 --- a/app/modules/config/add.py +++ b/app/modules/config/add.py @@ -15,7 +15,7 @@ get_date = roxy_wi_tools.GetDate(time_zone) get_config = roxy_wi_tools.GetConfigVar() -def save_to_haproxy_config(config: str, server_ip) -> str: +def save_to_haproxy_config(config: str, server_ip: str, name: str) -> str: roxywi_common.check_is_server_in_group(server_ip) hap_configs_dir = get_config.get_config_var('configs', 'haproxy_save_configs_dir') cfg = hap_configs_dir + server_ip + "-" + get_date.return_date('config') + ".cfg" @@ -45,11 +45,6 @@ def save_to_haproxy_config(config: str, server_ip) -> str: def save_nginx_config(config_add: str, server_ip: str, config_name: str) -> str: - try: - server_name = sql.get_hostname_by_server_ip(server_ip) - except Exception: - server_name = server_ip - roxywi_common.check_is_server_in_group(server_ip) sub_folder = 'conf.d' if 'upstream' in config_name else 'sites-enabled' @@ -150,7 +145,7 @@ def add_userlist() -> str: return config_add else: try: - return save_to_haproxy_config(config_add, server_ip) + return save_to_haproxy_config(config_add, server_ip, name) except Exception as e: return str(e) diff --git a/app/modules/config/runtime.py b/app/modules/config/runtime.py index 2b7df89a..fa87b564 100644 --- a/app/modules/config/runtime.py +++ b/app/modules/config/runtime.py @@ -168,7 +168,6 @@ def change_maxconn_global(serv: str, maxconn: int) -> str: if maxconn is None: return 'error: Maxconn must be integer and not 0' - haproxy_sock_port = sql.get_setting('haproxy_sock_port') masters = sql.is_master(serv) @@ -361,6 +360,7 @@ def delete_ip_from_list(serv, ip_id, ip, list_id, list_name) -> str: def add_ip_to_list(serv, ip, list_id, list_name) -> str: haproxy_sock_port = sql.get_setting('haproxy_sock_port') + lib_path = get_config_var.get_config_var('main', 'lib_path') user_group = roxywi_common.get_user_group(id=1) cmd = f'echo "add acl #{list_id} {ip}" |nc {serv} {haproxy_sock_port}' output, stderr = server_mod.subprocess_execute(cmd) diff --git a/app/modules/roxywi/auth.py b/app/modules/roxywi/auth.py index e04a410d..3f4f6e1e 100644 --- a/app/modules/roxywi/auth.py +++ b/app/modules/roxywi/auth.py @@ -1,7 +1,4 @@ -import os -import http.cookies - -from flask import request, redirect, make_response, url_for +from flask import request, redirect, url_for import modules.db.sql as sql diff --git a/app/modules/roxywi/common.py b/app/modules/roxywi/common.py index a71f41e4..e1904521 100644 --- a/app/modules/roxywi/common.py +++ b/app/modules/roxywi/common.py @@ -1,20 +1,16 @@ import os import cgi import glob -import http.cookies import distro from flask import request, redirect, make_response, url_for import modules.db.sql as sql -import modules.common.common as common import modules.roxy_wi_tools as roxy_wi_tools time_zone = sql.get_setting('time_zone') get_date = roxy_wi_tools.GetDate(time_zone) get_config_var = roxy_wi_tools.GetConfigVar() -form = common.form -serv = common.is_ip_or_dns(form.getvalue('serv')) def return_error_message(): @@ -39,28 +35,6 @@ def get_user_group(**kwargs) -> str: return user_group -def check_user_group(**kwargs): - if kwargs.get('token') is not None: - return True - - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - - if kwargs.get('user_uuid'): - group_id = kwargs.get('user_group_id') - user_uuid = kwargs.get('user_uuid') - user_id = sql.get_user_id_by_uuid(user_uuid) - else: - user_uuid = cookie.get('uuid') - group_id = cookie.get('group') - user_id = sql.get_user_id_by_uuid(user_uuid) - - if sql.check_user_group(user_id, group_id): - return True - else: - logging('Roxy-WI server', ' has tried to actions in not his group ', roxywi=1, login=1) - return False - - def check_user_group_for_flask(**kwargs): if kwargs.get('token') is not None: return True @@ -296,21 +270,6 @@ def get_users_params(**kwargs): return user_params -def get_user_lang() -> str: - cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) - - try: - user_lang = cookie.get('lang') - user_lang = user_lang.value - except Exception: - return 'en' - - if user_lang is None: - user_lang = 'en' - - return user_lang - - def get_user_lang_for_flask() -> str: try: user_lang = request.cookies.get('lang') @@ -342,6 +301,6 @@ def return_user_subscription(): user_subscription = return_user_status() except Exception as e: user_subscription = return_unsubscribed_user_status() - roxywi_common.logging('Roxy-WI server', f'Cannot get a user plan: {e}', roxywi=1) + logging('Roxy-WI server', f'Cannot get a user plan: {e}', roxywi=1) return user_subscription diff --git a/app/modules/roxywi/logs.py b/app/modules/roxywi/logs.py index d2e6aae9..d72c0b3d 100644 --- a/app/modules/roxywi/logs.py +++ b/app/modules/roxywi/logs.py @@ -3,7 +3,6 @@ import re import modules.db.sql as sql import modules.server.server as server_mod from modules.common.common import checkAjaxInput -from modules.common.common import form import modules.roxy_wi_tools as roxy_wi_tools import modules.roxywi.common as roxywi_common diff --git a/app/modules/roxywi/nettools.py b/app/modules/roxywi/nettools.py index 1889c751..90ee943d 100644 --- a/app/modules/roxywi/nettools.py +++ b/app/modules/roxywi/nettools.py @@ -72,6 +72,7 @@ def telnet_from_server(server_from: str, server_to: str, port_to: str) -> str: break return output1 + def nslookup_from_server(server_from: str, dns_name: str, record_type: str) -> str: count_string = 0 stderr = '' diff --git a/app/modules/roxywi/overview.py b/app/modules/roxywi/overview.py index ac25b718..27efa207 100644 --- a/app/modules/roxywi/overview.py +++ b/app/modules/roxywi/overview.py @@ -3,7 +3,6 @@ import os import psutil import requests from flask import render_template, request -from jinja2 import Environment, FileSystemLoader import modules.db.sql as sql import modules.common.common as common @@ -234,6 +233,7 @@ def show_services_overview(): socket_log_id=roxy_logs.roxy_wi_log(log_id=1, file="socket"), error=stderr, lang=lang ) + def keepalived_became_master(server_ip) -> None: commands = ["sudo kill -USR2 $(cat /var/run/keepalived.pid) && sudo grep 'Became master' /tmp/keepalived.stats |awk '{print $3}'"] became_master = server_mod.ssh_command(server_ip, commands) diff --git a/app/modules/roxywi/user.py b/app/modules/roxywi/user.py index af4fc29a..517d8e3e 100644 --- a/app/modules/roxywi/user.py +++ b/app/modules/roxywi/user.py @@ -1,6 +1,6 @@ import os -from flask import render_template, request +from flask import render_template import modules.db.sql as sql import modules.roxywi.common as roxywi_common @@ -122,8 +122,6 @@ def show_user_groups_and_roles(user_id: int, lang: str) -> None: def save_user_group_and_role(user: str, groups_and_roles: str) -> str: - import json - for k, v in groups_and_roles.items(): user_id = int(k) if not sql.delete_user_groups(user_id): diff --git a/app/modules/roxywi/waf.py b/app/modules/roxywi/waf.py index a0225da0..15e968d0 100644 --- a/app/modules/roxywi/waf.py +++ b/app/modules/roxywi/waf.py @@ -5,8 +5,6 @@ import modules.common.common as common import modules.server.server as server_mod import modules.roxywi.common as roxywi_common -form = common.form - def waf_overview(serv, waf_service) -> None: servers = sql.select_servers(server=serv) diff --git a/app/modules/server/server.py b/app/modules/server/server.py index 8df3b459..3cbb5184 100644 --- a/app/modules/server/server.py +++ b/app/modules/server/server.py @@ -1,6 +1,6 @@ import json -from flask import render_template, request +from flask import render_template import modules.db.sql as sql import modules.server.ssh as mod_ssh @@ -8,8 +8,6 @@ import modules.common.common as common import modules.roxywi.auth as roxywi_auth import modules.roxywi.common as roxywi_common -form = common.form - def ssh_command(server_ip: str, commands: list, **kwargs): if server_ip == '': diff --git a/app/modules/server/ssh.py b/app/modules/server/ssh.py index fa2469be..fb5d4e8a 100644 --- a/app/modules/server/ssh.py +++ b/app/modules/server/ssh.py @@ -9,7 +9,6 @@ from modules.server import ssh_connection import modules.roxywi.common as roxywi_common import modules.roxy_wi_tools as roxy_wi_tools -form = common.form error_mess = common.error_mess get_config = roxy_wi_tools.GetConfigVar() diff --git a/app/modules/service/backup.py b/app/modules/service/backup.py index 6b9328c1..4b8e0c23 100644 --- a/app/modules/service/backup.py +++ b/app/modules/service/backup.py @@ -51,7 +51,7 @@ def backup(serv, rpath, time, backup_type, rserver, cred, deljob, update, descri roxywi_common.logging('backup ', f' a new backup job for server {serv} has been created', roxywi=1, login=1) return render_template( - 'ajax/new_backup.html',backups=sql.select_backups(server=serv, rserver=rserver), sshs=sql.select_ssh() + 'ajax/new_backup.html', backups=sql.select_backups(server=serv, rserver=rserver), sshs=sql.select_ssh() ) else: @@ -111,7 +111,7 @@ def s3_backup(server, s3_server, bucket, secret_key, access_key, time, deljob, d return 'ok' -def git_backup(server_id, service_id, git_init, repo, branch, period, cred, deljob, description) -> str: +def git_backup(server_id, service_id, git_init, repo, branch, period, cred, deljob, description, backup_id) -> str: servers = roxywi_common.get_dick_permit() proxy = sql.get_setting('proxy') services = sql.select_services() @@ -168,5 +168,5 @@ def git_backup(server_id, service_id, git_init, repo, branch, period, cred, delj ) return render_template('ajax/new_git.html', gits=gits, sshs=sshs, servers=servers, services=services, new_add=1, lang=lang) else: - if sql.delete_git(form.getvalue('git_backup')): + if sql.delete_git(backup_id): return 'ok' diff --git a/app/modules/service/common.py b/app/modules/service/common.py index f574e31a..79b879dc 100644 --- a/app/modules/service/common.py +++ b/app/modules/service/common.py @@ -1,5 +1,3 @@ -import os - import requests from flask import render_template, request diff --git a/app/modules/service/exporter_installation.py b/app/modules/service/exporter_installation.py index 76fb1278..98b1cdcc 100644 --- a/app/modules/service/exporter_installation.py +++ b/app/modules/service/exporter_installation.py @@ -70,9 +70,9 @@ def nginx_apache_exp_installation(serv, service, ver, ext_prom): proxy_serv = proxy commands = [ - f"chmod +x {full_path}/{script} && {full_path}/{script} PROXY={proxy_serv} STAT_PORT={stats_port} SSH_PORT={ssh_settings['port']} STAT_PAGE={stats_page}" - f" STATS_USER={stats_user} STATS_PASS='{stats_password}' HOST={serv} VER={ver} EXP_PROM={ext_prom} USER={ssh_settings['user']} " - f" PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}" + f"chmod +x {full_path}/{script} && {full_path}/{script} PROXY={proxy_serv} STAT_PORT={stats_port} SSH_PORT={ssh_settings['port']} " + f"STAT_PAGE={stats_page} STATS_USER={stats_user} STATS_PASS='{stats_password}' HOST={serv} VER={ver} EXP_PROM={ext_prom} " + f"USER={ssh_settings['user']} PASS='{ssh_settings['password']}' KEY={ssh_settings['key']}" ] return_out = server_mod.subprocess_execute_with_rc(commands[0]) diff --git a/app/modules/service/haproxy.py b/app/modules/service/haproxy.py index 97988819..b488e800 100644 --- a/app/modules/service/haproxy.py +++ b/app/modules/service/haproxy.py @@ -4,7 +4,6 @@ import requests from flask import request import modules.db.sql as sql -import modules.common.common as common import modules.server.server as server_mod import modules.config.config as config_mod import modules.roxywi.common as roxywi_common @@ -240,12 +239,12 @@ def show_map(serv: str) -> str: nx.draw_networkx_edge_labels(G, pos, alpha=0.4, label_pos=0.5, font_color="#5d9ceb", edge_labels=edge_labels, font_size=8) - plt.savefig(f"/var/www/haproxy-wi/app/map.png") + plt.savefig("/var/www/haproxy-wi/app/map.png") plt.show() except Exception as e: return f'error: Cannot create a map: {e}' - output += f'map' + output += 'map' return output diff --git a/app/modules/tools/alerting.py b/app/modules/tools/alerting.py index 2b0fac13..4edaaed9 100644 --- a/app/modules/tools/alerting.py +++ b/app/modules/tools/alerting.py @@ -265,7 +265,6 @@ def check_rabbit_alert() -> str: except Exception as e: return f'error: Cannot send a message {e}' - try: json_for_sending = {"user_group": user_group_id1, "message": 'info: Test message'} send_message_to_rabbit(json.dumps(json_for_sending)) diff --git a/app/modules/tools/checker.py b/app/modules/tools/checker.py index e5573cba..e24d1a11 100644 --- a/app/modules/tools/checker.py +++ b/app/modules/tools/checker.py @@ -1,17 +1,13 @@ -from flask import render_template +from flask import render_template, redirect, url_for import modules.db.sql as sql -import modules.common.common as common import modules.roxywi.roxy as roxywi_mod import modules.roxywi.common as roxywi_common -form = common.form - def load_checker() -> None: groups = sql.select_groups() services = roxywi_mod.get_services_status() - lang = roxywi_common.get_user_lang() keepalived_settings = '' haproxy_settings = '' apache_settings = '' diff --git a/app/modules/tools/smon.py b/app/modules/tools/smon.py index 70664324..bb3c7e66 100644 --- a/app/modules/tools/smon.py +++ b/app/modules/tools/smon.py @@ -125,4 +125,4 @@ def return_smon_status(): cmd = "systemctl is-active roxy-wi-smon" smon_status, stderr = server_mod.subprocess_execute(cmd) - return smon_status, stderr \ No newline at end of file + return smon_status, stderr diff --git a/app/routes/add/routes.py b/app/routes/add/routes.py index 08ce9bd8..a0161c0c 100644 --- a/app/routes/add/routes.py +++ b/app/routes/add/routes.py @@ -1,11 +1,9 @@ import os import sys -from functools import wraps from flask import render_template, request, jsonify, redirect, url_for from flask_login import login_required -from app import app, login_manager from app.routes.add import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) @@ -16,7 +14,7 @@ import modules.common.common as common import modules.roxywi.auth as roxywi_auth import modules.roxywi.common as roxywi_common import modules.roxy_wi_tools as roxy_wi_tools -import app.modules.server.server as server_mod +import modules.server.server as server_mod get_config = roxy_wi_tools.GetConfigVar() time_zone = sql.get_setting('time_zone') diff --git a/app/routes/admin/routes.py b/app/routes/admin/routes.py index 83fa0bb9..bf77d14c 100644 --- a/app/routes/admin/routes.py +++ b/app/routes/admin/routes.py @@ -6,7 +6,6 @@ import distro from flask import render_template, request, redirect, url_for from flask_login import login_required -from app import app, login_manager from app.routes.admin import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) @@ -211,7 +210,7 @@ def action_openvpn(action, openvpn): return f'error: Cannot {action} OpenVPN: {e}' -@app.route('/setting//', methods=['POST']) +@bp.route('/setting//', methods=['POST']) def update_settings(param, val): user_group = roxywi_common.get_user_group(id=1) if sql.update_setting(param, val, user_group): diff --git a/app/routes/checker/routes.py b/app/routes/checker/routes.py index 9f724e88..3ab56fe8 100644 --- a/app/routes/checker/routes.py +++ b/app/routes/checker/routes.py @@ -4,7 +4,6 @@ import sys from flask import render_template, request, redirect, url_for from flask_login import login_required -from app import app, login_manager from app.routes.checker import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) @@ -14,6 +13,7 @@ import modules.common.common as common import modules.roxywi.common as roxywi_common import modules.tools.alerting as alerting import modules.tools.checker as checker_mod +import modules.tools.smon as smon_mod @bp.before_request @@ -127,4 +127,3 @@ def receiver(receiver_name): channel_id = common.checkAjaxInput(request.form.get('channel_id')) return alerting.delete_receiver_channel(channel_id, receiver_name) - diff --git a/app/routes/config/routes.py b/app/routes/config/routes.py index cca05ec2..e7ff93f0 100644 --- a/app/routes/config/routes.py +++ b/app/routes/config/routes.py @@ -1,10 +1,9 @@ import os import sys -from flask import render_template, request, redirect, url_for, abort +from flask import render_template, request, redirect, url_for from flask_login import login_required -from app import app, login_manager, cache from app.routes.config import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) @@ -37,7 +36,7 @@ def show_config(service): configver = request.form.get('configver') server_ip = request.form.get('serv') - return config_mod.show_config(server_ip, service, config_file_name, configver) + return config_mod.show_config(server_ip, service, config_file_name, configver) @bp.route('//show-files', methods=['POST']) @@ -286,7 +285,7 @@ def show_version(service, server_ip, configver, save): pass if service == 'keepalived': - stderr = config_mod.upload_and_restart(serv, configver, save_action, service) + stderr = config_mod.upload_and_restart(server_ip, configver, save_action, service) elif service in ('nginx', 'apache'): config_file_name = sql.select_remote_path_from_version(server_ip=server_ip, service=service, local_path=configver) diff --git a/app/routes/install/routes.py b/app/routes/install/routes.py index f3e17881..65413bdf 100644 --- a/app/routes/install/routes.py +++ b/app/routes/install/routes.py @@ -1,11 +1,9 @@ import os import sys -from functools import wraps from flask import render_template, request, redirect, url_for from flask_login import login_required -from app import app, login_manager from app.routes.install import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) @@ -14,7 +12,6 @@ import modules.db.sql as sql import modules.common.common as common import modules.roxywi.auth as roxywi_auth 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 @@ -138,7 +135,7 @@ def install_service(service, server_ip): docker = common.checkAjaxInput(request.form.get('docker')) syn_flood = request.form.get('syn_flood') hapver = request.form.get('hapver') - + if service in ('nginx', 'apache'): try: return service_mod.install_service(server_ip, service, docker, syn_flood) @@ -246,7 +243,7 @@ def install_waf(service, server_ip): @bp.post('/geoip') def install_geoip(): - server_ip = common.is_ip_or_dns(server_ip) + server_ip = common.is_ip_or_dns(request.form.get('server_ip')) geoip_update = common.checkAjaxInput(request.form.get('update')) service = request.form.get('service') diff --git a/app/routes/metric/routes.py b/app/routes/metric/routes.py index a02c7c79..7677f535 100644 --- a/app/routes/metric/routes.py +++ b/app/routes/metric/routes.py @@ -5,7 +5,6 @@ import distro from flask import render_template, request, jsonify, redirect, url_for from flask_login import login_required -from app import app, login_manager from app.routes.metric import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) @@ -91,7 +90,7 @@ def metrics_ram(): @bp.route('//table-metrics') def table_metrics(service): roxywi_common.check_user_group_for_flask() - lang = roxywi_common.get_user_lang() + lang = roxywi_common.get_user_lang_for_flask() group_id = roxywi_common.get_user_group(id=1) if service in ('nginx', 'apache'): diff --git a/app/routes/runtime/routes.py b/app/routes/runtime/routes.py index 9dae244e..f7f49f6c 100644 --- a/app/routes/runtime/routes.py +++ b/app/routes/runtime/routes.py @@ -4,12 +4,10 @@ import sys from flask import render_template, request, redirect, url_for from flask_login import login_required -from app import app, login_manager from app.routes.runtime import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) -import modules.db.sql as sql import modules.common.common as common import modules.roxywi.common as roxywi_common import modules.config.runtime as runtime @@ -108,7 +106,7 @@ def action(server_ip): enable = common.checkAjaxInput(request.form.get('servaction')) backend = common.checkAjaxInput(request.form.get('servbackend')) save = request.form.get('save') - + return service_haproxy.runtime_command(server_ip, enable, backend, save) @@ -170,7 +168,7 @@ def delete_session(server_ip, sess_id): @bp.route('/list/') def get_lists(server_ip): server_ip = common.is_ip_or_dns(server_ip) - + return runtime.list_of_lists(server_ip) @@ -178,7 +176,7 @@ def get_lists(server_ip): def get_list(server_ip, list_id, list_name): server_ip = common.is_ip_or_dns(server_ip) list_name = common.checkAjaxInput(list_name) - + return runtime.show_lists(server_ip, list_id, list_name) @@ -200,4 +198,4 @@ def add_ip_to_list(): list_id = common.checkAjaxInput(request.form.get('list_id_for_add')) list_name = common.checkAjaxInput(request.form.get('list_name')) - return runtime.add_ip_to_list(serv, ip, list_id, list_name) \ No newline at end of file + return runtime.add_ip_to_list(serv, ip, list_id, list_name) diff --git a/app/routes/server/routes.py b/app/routes/server/routes.py index 2ba2785c..d4142944 100644 --- a/app/routes/server/routes.py +++ b/app/routes/server/routes.py @@ -6,7 +6,6 @@ import distro from flask import render_template, request from flask_login import login_required -from app import app, login_manager from app.routes.server import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) @@ -110,7 +109,6 @@ def create_server(): return f'error: {e}' - @bp.route('/create/after', methods=['POST']) def after_add(): hostname = common.checkAjaxInput(request.form.get('servername')) @@ -444,7 +442,7 @@ def create_s3_backup(): return backup_mod.s3_backup(server, s3_server, bucket, secret_key, access_key, time, deljob, description) except Exception as e: return str(e) - + @bp.post('/git/create') @bp.post('/git/delete') @@ -458,5 +456,6 @@ def create_git_backup(): cred = request.form.get('cred') deljob = request.form.get('git_deljob') description = request.form.get('description') + backup_id = request.form.get('git_backup') - return backup_mod.git_backup(server_id, service_id, git_init, repo, branch, period, cred, deljob, description) + return backup_mod.git_backup(server_id, service_id, git_init, repo, branch, period, cred, deljob, description, backup_id) diff --git a/app/routes/service/routes.py b/app/routes/service/routes.py index 40296bff..d3389257 100644 --- a/app/routes/service/routes.py +++ b/app/routes/service/routes.py @@ -6,7 +6,7 @@ import distro from flask import render_template, request, redirect, url_for, abort from flask_login import login_required -from app import app, login_manager, cache +from app import cache from app.routes.service import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) @@ -262,8 +262,9 @@ def cpu_ram_metrics(server_ip, server_id, name, service): servers.append(server_status) servers_sorted = sorted(servers, key=common.get_key) - return render_template('ajax/overviewServers.html', service_status=servers_sorted, role=role, id=server_id, service_page=service, - lang=user_params['lang']) + return render_template( + 'ajax/overviewServers.html', service_status=servers_sorted, role=role, id=server_id, service_page=service, lang=user_params['lang'] + ) @bp.route('/haproxy/bytes', methods=['POST']) diff --git a/app/routes/smon/routes.py b/app/routes/smon/routes.py index adc18d85..61f2d34e 100644 --- a/app/routes/smon/routes.py +++ b/app/routes/smon/routes.py @@ -4,9 +4,8 @@ import sys from pytz import timezone from flask import render_template, request, redirect, url_for, jsonify from flask_login import login_required -from datetime import datetime, timedelta +from datetime import datetime -from app import app, login_manager from app.routes.smon import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) @@ -87,7 +86,7 @@ def smon_dashboard(dashboard_id, check_id): return render_template( 'include/smon/smon_history.html', h2=1, autorefresh=1, role=user_params['role'], user=user, smon=smon, - lang=user_params['lang'],user_status=user_subscription['user_status'], check_interval=check_interval, + lang=user_params['lang'], user_status=user_subscription['user_status'], check_interval=check_interval, user_plan=user_subscription['user_plan'], token=user_params['token'], uptime=uptime, avg_res_time=avg_res_time, user_services=user_params['user_services'], smon_name=smon_name, cert_day_diff=cert_day_diff, check_id=check_id, dashboard_id=dashboard_id, last_resp_time=last_resp_time @@ -202,12 +201,12 @@ def smon_add(): record_type = common.checkAjaxInput(request.form.get('newsmondns_record_type')) packet_size = common.checkAjaxInput(request.form.get('newsmonpacket_size')) http_method = common.checkAjaxInput(request.form.get('newsmon_http_method')) - lang = roxywi_common.get_user_lang() + lang = roxywi_common.get_user_lang_for_flask() try: last_id = smon_mod.create_smon( name, hostname, port, enable, url, body, group, desc, telegram, slack, pd, packet_size, check_type, - resolver, record_type, user_group, http_method + resolver, record_type, user_group, http_method ) except Exception as e: return str(e), 200 diff --git a/app/routes/user/routes.py b/app/routes/user/routes.py index 8ac43fb3..20b229a4 100644 --- a/app/routes/user/routes.py +++ b/app/routes/user/routes.py @@ -5,7 +5,6 @@ import json from flask import render_template, request from flask_login import login_required -from app import app, login_manager from app.routes.user import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) diff --git a/app/routes/waf/routes.py b/app/routes/waf/routes.py index 43f186ee..ff329c08 100644 --- a/app/routes/waf/routes.py +++ b/app/routes/waf/routes.py @@ -4,13 +4,11 @@ import sys from flask import render_template, request from flask_login import login_required -from app import app, login_manager from app.routes.waf import bp sys.path.append(os.path.join(sys.path[0], '/var/www/haproxy-wi/app')) import modules.db.sql as sql -from modules.db.db_model import * import modules.common.common as common import modules.roxy_wi_tools as roxy_wi_tools import modules.roxywi.waf as roxy_waf @@ -23,8 +21,14 @@ time_zone = sql.get_setting('time_zone') get_date = roxy_wi_tools.GetDate(time_zone) -@bp.route('/') +@bp.before_request @login_required +def before_request(): + """ Protect all of the admin endpoints. """ + pass + + +@bp.route('/') def waf(service): roxywi_auth.page_for_admin(level=2) @@ -60,7 +64,6 @@ def waf(service): @bp.route('///rules') -@login_required def waf_rules(service, server_ip): roxywi_auth.page_for_admin(level=2) roxywi_common.check_is_server_in_group(server_ip) @@ -93,7 +96,6 @@ def waf_rules(service, server_ip): @bp.route('///rule/') -@login_required def waf_rule_edit(service, server_ip, rule_id): roxywi_auth.page_for_admin(level=2) roxywi_common.check_is_server_in_group(server_ip) @@ -137,7 +139,6 @@ def waf_rule_edit(service, server_ip, rule_id): @bp.route('///rule//save', methods=['POST']) -@login_required def waf_save_config(service, server_ip, rule_id): roxywi_auth.page_for_admin(level=2) roxywi_common.check_is_server_in_group(server_ip) @@ -171,7 +172,6 @@ def waf_save_config(service, server_ip, rule_id): @bp.route('//rule//') -@login_required def enable_rule(server_ip, rule_id, enable): server_ip = common.is_ip_or_dns(server_ip) @@ -179,7 +179,6 @@ def enable_rule(server_ip, rule_id, enable): @bp.route('///rule/create', methods=['POST']) -@login_required def create_rule(service, server_ip): if service not in ('haproxy', 'nginx'): return 'error: Wrong service' @@ -190,7 +189,6 @@ def create_rule(service, server_ip): @bp.route('//mode//') -@login_required def change_waf_mode(service, server_name, waf_mode): if service not in ('haproxy', 'nginx'): return 'error: Wrong service' @@ -202,7 +200,6 @@ def change_waf_mode(service, server_name, waf_mode): @bp.route('/overview//') -@login_required def overview_waf(service, server_ip): server_ip = common.is_ip_or_dns(server_ip) @@ -213,7 +210,6 @@ def overview_waf(service, server_ip): @bp.route('/metric/enable//') -@login_required def enable_metric(enable, server_name): server_name = common.checkAjaxInput(server_name) return sql.update_waf_metrics_enable(server_name, enable) diff --git a/app/views.py b/app/views.py index 0f15c863..e3c7fe47 100644 --- a/app/views.py +++ b/app/views.py @@ -166,7 +166,7 @@ def login_page(): flash('Login or password is not correct', 'alert alert-danger wrong-login') try: - lang = roxywi_common.get_user_lang() + lang = roxywi_common.get_user_lang_for_flask() except Exception: lang = 'en' diff --git a/config_other/httpd/roxy-wi.conf b/config_other/httpd/roxy-wi.conf index cee5e805..06639882 100644 --- a/config_other/httpd/roxy-wi.conf +++ b/config_other/httpd/roxy-wi.conf @@ -17,10 +17,12 @@ RewriteRule /(.*) ws://localhost:8765/ [P,L] ProxyPassReverse / http://localhost:8765/ + DocumentRoot /var/www/haproxy-wi + WSGIDaemonProcess roxy-wi-api display-name=%{GROUP} user=apache group=apache processes=1 threads=5 WSGIScriptAlias /api /var/www/haproxy-wi/api/app.wsgi - WSGIDaemonProcess roxy-wi-app display-name=%{GROUP} user=apache group=apache threads=10 + WSGIDaemonProcess roxy-wi-app display-name=%{GROUP} user=apache group=apache processes=5 threads=10 WSGIScriptAlias /app /var/www/haproxy-wi/app/app.wsgi diff --git a/config_other/httpd/roxy-wi_deb.conf b/config_other/httpd/roxy-wi_deb.conf index beca71c0..f90dff9f 100644 --- a/config_other/httpd/roxy-wi_deb.conf +++ b/config_other/httpd/roxy-wi_deb.conf @@ -17,10 +17,12 @@ RewriteRule /(.*) ws://localhost:8765/ [P,L] ProxyPassReverse / http://localhost:8765/ + DocumentRoot /var/www/haproxy-wi + WSGIDaemonProcess roxy-wi-api display-name=%{GROUP} user=www-data group=www-data processes=1 threads=5 WSGIScriptAlias /api /var/www/haproxy-wi/api/app.wsgi - WSGIDaemonProcess roxy-wi-app display-name=%{GROUP} user=www-data group=www-data threads=10 + WSGIDaemonProcess roxy-wi-app display-name=%{GROUP} user=www-data group=www-data processes=5 threads=10 WSGIScriptAlias /app /var/www/haproxy-wi/app/app.wsgi diff --git a/config_other/requirements_el7.txt b/config_other/requirements_el7.txt index f86703a0..178e2f1c 100644 --- a/config_other/requirements_el7.txt +++ b/config_other/requirements_el7.txt @@ -8,4 +8,5 @@ PyMySQL>=1.0.2 retry>=0.9.2 pdpyras>=4.5.2 pika>=1.3.1 +Flask>=2.0.3 Flask-Caching>=1.10.1 diff --git a/config_other/requirements_el8.txt b/config_other/requirements_el8.txt index b5748ed8..6d932614 100644 --- a/config_other/requirements_el8.txt +++ b/config_other/requirements_el8.txt @@ -9,4 +9,5 @@ bottle>=0.12.18 retry>=0.9.2 pdpyras>=4.5.2 pika>=1.3.1 +Flask>=2.0.3 Flask-Caching>=1.10.1 diff --git a/config_other/requirements_el9.txt b/config_other/requirements_el9.txt index b71612e4..55f6c6ec 100644 --- a/config_other/requirements_el9.txt +++ b/config_other/requirements_el9.txt @@ -9,4 +9,5 @@ bottle>=0.12.18 retry>=0.9.2 pdpyras>=4.5.2 pika>=1.3.1 +Flask>=2.0.3 Flask-Caching>=1.10.1 diff --git a/requirements.txt b/requirements.txt index f7456895..99f935f2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,4 +15,5 @@ bottle>=0.12.20 psutil>=5.9.1 pdpyras>=4.5.2 pika>=1.3.1 +Flask>=2.0.3 Flask-Caching>=1.10.1