import os import datetime from flask import render_template, request, redirect, url_for from flask_login import login_required from app.routes.logs import bp import app.modules.db.sql as sql import app.modules.common.common as common import app.modules.roxywi.auth as roxywi_auth import app.modules.roxywi.logs as roxy_logs import app.modules.roxywi.common as roxywi_common import app.modules.server.server as server_mod import app.modules.roxy_wi_tools as roxy_wi_tools get_config = roxy_wi_tools.GetConfigVar() @bp.before_request @login_required def before_request(): """ Protect all of the admin endpoints. """ pass @bp.route('/internal') def logs_internal(): log_type = request.args.get('type') if log_type == '2': roxywi_auth.page_for_admin(level=2) else: roxywi_auth.page_for_admin() try: user_params = roxywi_common.get_users_params(virt=1, haproxy=1) user = user_params['user'] except Exception: return redirect(url_for('login_page')) time_storage = sql.get_setting('log_time_storage') log_path = get_config.get_config_var('main', 'log_path') try: time_storage_hours = time_storage * 24 for dirpath, dirnames, filenames in os.walk(log_path): for file in filenames: curpath = os.path.join(dirpath, file) file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath)) if datetime.datetime.now() - file_modified > datetime.timedelta(hours=time_storage_hours): os.remove(curpath) except Exception as e: print(f'error: cannot delete old log files: {e}') selects = roxywi_common.get_files(log_path, file_format="log") if log_type is None: selects.append(['fail2ban.log', 'fail2ban.log']) selects.append(['roxy-wi.error.log', 'error.log']) selects.append(['roxy-wi.access.log', 'access.log']) return render_template( 'logs_internal.html', autorefresh=1, role=user_params['role'], user=user, user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang'], selects=selects, serv='viewlogs' ) @bp.route('/', defaults={'waf': None}) @bp.route('//') def logs(service, waf): serv = request.args.get('serv') rows = request.args.get('rows') grep = request.args.get('grep') exgrep = request.args.get('exgrep') hour = request.args.get('hour') minute = request.args.get('minute') hour1 = request.args.get('hour1') minute1 = request.args.get('minute1') log_file = request.args.get('file') if rows is None: rows = 10 if grep is None: grep = '' try: user_params = roxywi_common.get_users_params(virt=1, haproxy=1) user = user_params['user'] except Exception: return redirect(url_for('login_page')) if service in ('haproxy', 'nginx', 'keepalived', 'apache') and not waf: service_desc = sql.select_service(service) service_name = service_desc.service is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=service_desc.service_id) if is_redirect != 'ok': return redirect(url_for(f'{is_redirect}')) servers = roxywi_common.get_dick_permit(service=service_desc.slug) elif waf: service_name = 'WAF' is_redirect = roxywi_auth.check_login(user_params['user_uuid'], user_params['token'], service=1) if is_redirect != 'ok': return redirect(url_for(f'{is_redirect}')) servers = roxywi_common.get_dick_permit(haproxy=1) else: return redirect(url_for('index')) return render_template( 'logs.html', autorefresh=1, role=user_params['role'], user=user, select_id='serv', rows=rows, remote_file=log_file, selects=servers, waf=waf, service=service, user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang'], service_name=service_name, grep=grep, serv=serv ) @bp.route('//', methods=['GET', 'POST']) def show_remote_log_files(service, serv): service = common.checkAjaxInput(service) serv = common.checkAjaxInput(serv) 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: return return_files lang = roxywi_common.get_user_lang_for_flask() return render_template( 'ajax/show_log_files.html', serv=serv, return_files=return_files, path_dir=log_path, lang=lang ) @bp.route('///', defaults={'waf': '0'}, methods=['GET', 'POST']) @bp.route('//waf//', defaults={'waf': '1'}, methods=['GET', 'POST']) def show_logs(service, serv, rows, waf): if request.method == 'GET': grep = request.args.get('grep') exgrep = request.args.get('exgrep') hour = request.args.get('hour') minute = request.args.get('minute') hour1 = request.args.get('hour1') minute1 = request.args.get('minute1') log_file = request.args.get('file') else: grep = request.form.get('grep') exgrep = request.form.get('exgrep') hour = request.form.get('hour') minute = request.form.get('minute') hour1 = request.form.get('hour1') minute1 = request.form.get('minute1') log_file = request.form.get('file') if roxywi_common.check_user_group_for_flask(): try: out = roxy_logs.show_roxy_log( serv=serv, rows=rows, waf=waf, grep=grep, exgrep=exgrep, hour=hour, minute=minute, hour1=hour1, minute1=minute1, service=service, log_file=log_file ) except Exception as e: return str(e) else: return out