Changelog: https://roxy-wi.org/changelog#7.0.0
pull/364/head
Aidaho 2023-10-07 21:48:23 +03:00
parent 8648b3f344
commit 5e2fadc75e
12 changed files with 232 additions and 224 deletions

View File

@ -11,8 +11,9 @@ app.jinja_env.add_extension('jinja2.ext.loopcontrols')
cache = Cache(config={'CACHE_TYPE': 'SimpleCache', "CACHE_DEFAULT_TIMEOUT": 3000})
cache.init_app(app)
login_manager = LoginManager(app)
login_manager.login_view = 'app.login.login_page'
login_manager.login_view = 'login_page'
app.config['SITEMAP_INCLUDE_RULES_WITHOUT_PARAMS'] = True
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=3)

View File

@ -1,5 +1,5 @@
from flask import render_template, request, redirect, url_for, make_response
from flask_login import login_required, logout_user, current_user
from flask_login import login_required, logout_user, current_user, login_url
from app import app, login_manager, cache
import app.modules.db.sql as sql
@ -10,21 +10,20 @@ import app.modules.roxy_wi_tools as roxy_wi_tools
@app.before_request
@cache.memoize(2)
def check_login():
if request.endpoint not in ('login_page', 'static', 'main.show_roxywi_version'):
try:
user_params = roxywi_common.get_users_params()
except Exception:
return redirect(url_for('login_page'))
return redirect(login_url('login_page', next_url=request.url))
if not sql.is_user_active(user_params['user_id']):
return redirect(url_for('login_page'))
return redirect(login_url('login_page', next_url=request.url))
try:
roxywi_auth.check_login(user_params['user_uuid'], user_params['token'])
except Exception:
return redirect(url_for('login_page'))
return redirect(login_url('login_page', next_url=request.url))
@login_manager.user_loader
@ -43,7 +42,7 @@ def load_user(user_id):
@app.after_request
def redirect_to_login(response):
if response.status_code == 401:
return redirect(url_for('login_page') + '?next=' + request.url)
return redirect(login_url('login_page', next_url=request.url))
return response

View File

@ -117,12 +117,17 @@ def do_login(user_uuid: str, user_group: str, user: str, next_url: str):
except Exception:
session_ttl = 5
if next_url:
redirect_to = f'https://{request.host}{next_url}'
else:
redirect_to = f"https://{request.host}{url_for('overview.index')}"
expires = datetime.utcnow() + timedelta(days=session_ttl)
login_user(user)
resp = make_response(next_url or url_for('overview.index'))
resp.set_cookie('uuid', user_uuid, secure=True, expires=expires.strftime("%a, %d %b %Y %H:%M:%S GMT"))
resp.set_cookie('group', str(user_group), secure=True, expires=expires.strftime("%a, %d %b %Y %H:%M:%S GMT"))
resp = make_response(redirect_to)
resp.set_cookie('uuid', user_uuid, secure=True, expires=expires.strftime("%a, %d %b %Y %H:%M:%S GMT"), httponly=True, samesite='Strict')
resp.set_cookie('group', str(user_group), secure=True, expires=expires.strftime("%a, %d %b %Y %H:%M:%S GMT"), httponly=True, samesite='Strict')
try:
user_group_name = sql.get_group_name_by_id(user_group)

View File

@ -144,7 +144,7 @@ def show_nginx_connections(server_ip: str) -> str:
return 'error: cannot connect to NGINX stat page'
def show_apache_bytes(server_ip: str) -> None:
def show_apache_bytes(server_ip: str) -> str:
port = sql.get_setting('apache_stats_port')
user = sql.get_setting('apache_stats_user')
password = sql.get_setting('apache_stats_password')
@ -221,11 +221,10 @@ def show_services_overview():
socket, stderr = server_mod.subprocess_execute(cmd)
return render_template(
'ajax/show_services_ovw.html',
role=user_params['role'], metrics_master=''.join(metrics_master), metrics_worker=metrics_worker,
checker_master=''.join(checker_master), checker_worker=checker_worker, keep_alive=''.join(keep_alive),
smon=''.join(smon), port_scanner=''.join(port_scanner), grafana=grafana, socket=''.join(socket),
is_checker_worker=is_checker_worker, is_metrics_worker=is_metrics_worker, host=host,
'ajax/show_services_ovw.html', role=user_params['role'], metrics_master=''.join(metrics_master),
metrics_worker=metrics_worker, checker_master=''.join(checker_master), checker_worker=checker_worker,
keep_alive=''.join(keep_alive), smon=''.join(smon), port_scanner=''.join(port_scanner), grafana=grafana,
socket=''.join(socket), is_checker_worker=is_checker_worker, is_metrics_worker=is_metrics_worker, host=host,
roxy_wi_log_id=roxy_logs.roxy_wi_log(log_id=1, file="roxy-wi-"),
metrics_log_id=roxy_logs.roxy_wi_log(log_id=1, file="metrics"),
checker_log_id=roxy_logs.roxy_wi_log(log_id=1, file="checker"),

View File

@ -141,7 +141,7 @@ def config(service, serv, edit, config_file_name, new):
config_read = ' '
return render_template(
'config.html', h2=1, role=user_params['role'], user=user, select_id="serv", serv=serv, aftersave=aftersave,
'config.html', role=user_params['role'], user=user, select_id="serv", serv=serv, aftersave=aftersave,
config=config_read, cfg=cfg, selects=user_params['servers'], stderr=stderr, error=error, service=service,
is_restart=is_restart, user_services=user_params['user_services'], config_file_name=config_file_name,
is_serv_protected=is_serv_protected, token=user_params['token'], lang=user_params['lang'], service_desc=service_desc
@ -164,7 +164,7 @@ def save_config(service, server_ip):
if is_redirect != 'ok':
return redirect(url_for(f'{is_redirect}'))
config = request.form.get('config')
config_file = request.form.get('config')
oldcfg = request.form.get('oldconfig')
save = request.form.get('save')
config_file_name = request.form.get('config_file_name')
@ -176,7 +176,7 @@ def save_config(service, server_ip):
try:
with open(cfg, "a") as conf:
conf.write(config)
conf.write(config_file)
except IOError as e:
return f"error: Cannot read imported config file: {e}", 200
@ -246,7 +246,7 @@ def versions(service, server_ip):
stderr = "Error: %s - %s." % (e.filename, e.strerror)
return render_template(
'delver.html', h2=1, role=user_params['role'], user=user, select_id="serv", serv=server_ip, aftersave=aftersave,
'delver.html', role=user_params['role'], user=user, select_id="serv", serv=server_ip, aftersave=aftersave,
selects=user_params['servers'], file=file, service=service, user_services=user_params['user_services'],
token=user_params['token'], lang=user_params['lang'], stderr=stderr
)
@ -335,7 +335,7 @@ def haproxy_section(server_ip):
sections = section_mod.get_sections(cfg)
return render_template(
'sections.html', h2=1, role=user_params['role'], user=user, serv=server_ip, selects=user_params['servers'],
'sections.html', role=user_params['role'], user=user, serv=server_ip, selects=user_params['servers'],
sections=sections, error=error, token=user_params['token'], lang=user_params['lang'], is_restart=is_restart, config='',
user_services=user_params['user_services']
)
@ -370,10 +370,10 @@ def haproxy_section_show(server_ip, section):
os.system(f"/bin/mv {cfg} {cfg}.old")
return render_template(
'sections.html', h2=1, role=user_params['role'], user=user,
serv=server_ip, selects=user_params['servers'], error=error, sections=sections, cfg=cfg,
token=user_params['token'], lang=user_params['lang'], is_restart=is_restart, config=config_read,
start_line=start_line, end_line=end_line, section=section, user_services=user_params['user_services']
'sections.html', role=user_params['role'], user=user, serv=server_ip, selects=user_params['servers'],
error=error, sections=sections, cfg=cfg, token=user_params['token'], lang=user_params['lang'],
is_restart=is_restart, config=config_read, start_line=start_line, end_line=end_line, section=section,
user_services=user_params['user_services']
)
@ -392,21 +392,21 @@ def haproxy_section_save(server_ip):
hap_configs_dir = get_config.get_config_var('configs', 'haproxy_save_configs_dir')
cfg = f"{hap_configs_dir}{server_ip}-{get_date.return_date('config')}.cfg"
config = request.form.get('config')
config_file = request.form.get('config')
oldcfg = request.form.get('oldconfig')
save = request.form.get('save')
start_line = request.form.get('start_line')
end_line = request.form.get('end_line')
if save == 'delete':
config = ''
config_file = ''
save = 'reload'
config = section_mod.rewrite_section(start_line, end_line, oldcfg, config)
config_file = section_mod.rewrite_section(start_line, end_line, oldcfg, config_file)
try:
with open(cfg, "w") as conf:
conf.write(config)
conf.write(config_file)
except IOError as e:
return f"error: Cannot read import config file: {e}"
@ -447,7 +447,7 @@ def show_compare_config(service, serv):
return redirect(url_for('index'))
return render_template(
'config.html', h2=1, role=user_params['role'], user=user, select_id="serv", serv=serv, aftersave=aftersave,
'config.html', role=user_params['role'], user=user, select_id="serv", serv=serv, aftersave=aftersave,
config=config_read, cfg=cfg, selects=user_params['servers'], stderr=stderr, error=error, service=service,
is_restart=is_restart, user_services=user_params['user_services'], config_file_name=config_file_name,
is_serv_protected=is_serv_protected, token=user_params['token'], lang=user_params['lang'],

View File

@ -79,7 +79,7 @@ def services(service, serv):
if distro.id() == 'ubuntu':
if s == 'roxy-wi-keep_alive':
s = 'roxy-wi-keep-alive'
cmd = "apt list --installed 2>&1 |grep " + s
cmd = f"apt list --installed 2>&1 |grep {s}"
else:
cmd = "rpm --query " + s + "-* |awk -F\"" + s + "\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'"
service_ver, stderr = server_mod.subprocess_execute(cmd)
@ -90,7 +90,6 @@ def services(service, serv):
haproxy_sock_port = sql.get_setting('haproxy_sock_port')
servers_with_status1 = []
out1 = ''
for s in servers:
servers_with_status = list()
servers_with_status.append(s[0])
@ -101,14 +100,14 @@ def services(service, serv):
h = (['', ''],)
cmd = [
"/usr/sbin/nginx -v 2>&1|awk '{print $3}' && systemctl status nginx |grep -e 'Active' |awk "
"'{print $2, $9$10$11$12$13}' && ps ax |grep nginx:|grep -v grep |wc -l"]
"'{print $2, $9$10$11$12$13}' && ps ax |grep nginx:|grep -v grep |wc -l"
]
for service_set in docker_settings:
if service_set.server_id == s[0] and service_set.setting == 'dockerized' and service_set.value == '1':
container_name = sql.get_setting('nginx_container_name')
cmd = [
"docker exec -it " + container_name + " /usr/sbin/nginx -v 2>&1|awk '{print $3}' && "
"docker ps -a -f name=" + container_name + " --format '{{.Status}}'|tail -1 && ps ax |grep nginx:"
"|grep -v grep |wc -l"
"docker ps -a -f name=" + container_name + " --format '{{.Status}}'|tail -1 && ps ax |grep nginx:|grep -v grep |wc -l"
]
try:
out = server_mod.ssh_command(s[2], cmd)
@ -163,7 +162,7 @@ def services(service, serv):
servers_with_status.append(h)
servers_with_status.append(s[22])
else:
cmd = 'echo "show info" |nc %s %s -w 1 -v|grep -e "Ver\|Uptime:\|Process_num"' % (s[2], haproxy_sock_port)
cmd = f'echo "show info" |nc {s[2]} {haproxy_sock_port} -w 1 -v|grep -e "Ver\|Uptime:\|Process_num"'
out = server_mod.subprocess_execute(cmd)
for k in out:
@ -197,7 +196,7 @@ def services(service, serv):
user_subscription = roxywi_common.return_user_subscription()
return render_template(
'hapservers.html', h2=1, autorefresh=autorefresh, role=user_params['role'], user=user, servers=servers_with_status1,
'service.html', autorefresh=autorefresh, role=user_params['role'], user=user, servers=servers_with_status1,
keep_alive=''.join(keep_alive), serv=serv, service=service, services=services, user_services=user_params['user_services'],
docker_settings=docker_settings, user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'],
waf_server=waf_server, restart_settings=restart_settings, service_desc=service_desc, token=user_params['token'],
@ -234,7 +233,8 @@ def cpu_ram_metrics(server_ip, server_id, name, service):
user_params = roxywi_common.get_users_params()
if service == 'haproxy':
cmd = 'echo "show info" |nc %s %s -w 1|grep -e "node\|Nbproc\|Maxco\|MB\|Nbthread"' % (server_ip, sql.get_setting('haproxy_sock_port'))
sock_port = sql.get_setting('haproxy_sock_port')
cmd = f'echo "show info" |nc {server_ip} {sock_port} -w 1|grep -e "node\|Nbproc\|Maxco\|MB\|Nbthread"'
out = server_mod.subprocess_execute(cmd)
return_out = ""
@ -263,28 +263,28 @@ def cpu_ram_metrics(server_ip, server_id, name, service):
)
@bp.route('/haproxy/bytes', methods=['POST'])
@bp.post('/haproxy/bytes')
def show_haproxy_bytes():
server_ip = common.is_ip_or_dns(request.form.get('showBytes'))
return roxy_overview.show_haproxy_binout(server_ip)
@bp.route('/nginx/connections', methods=['POST'])
@bp.post('/nginx/connections')
def show_nginx_connections():
server_ip = common.is_ip_or_dns(request.form.get('nginxConnections'))
return roxy_overview.show_nginx_connections(server_ip)
@bp.route('/apache/bytes', methods=['POST'])
@bp.post('/apache/bytes')
def show_apache_bytes():
server_ip = common.is_ip_or_dns(request.form.get('apachekBytes'))
return roxy_overview.show_apache_bytes(server_ip)
@bp.route('/keepalived/become-master', methods=['POST'])
@bp.post('/keepalived/become-master')
@cache.cached()
def show_keepalived_become_master():
server_ip = common.is_ip_or_dns(request.form.get('keepalivedBecameMaster'))

View File

@ -68,14 +68,14 @@
{% endif %}
<td>
{% if role <= 2 %}
<a href="/app/waf/{{waf_service}}/{{service.1}}/rules" class="ui-button ui-widget ui-corner-all">{{lang.words.open|title()}}</a>
<a href="{{ url_for('waf.waf_rules', service=waf_service, server_ip=service.1) }}" class="ui-button ui-widget ui-corner-all">{{lang.words.open|title()}}</a>
{% endif %}
</td>
<td>
{% if waf_service == 'haproxy' %}
<a href="/app/logs/{{waf_service}}/waf" class="ui-button ui-widget ui-corner-all" title="{{lang.words.view|title()}} {{lang.words.log}}">{{lang.words.view|title()}}</a>
<a href="{{ url_for('logs.logs', service=waf_service) }}/waf" class="ui-button ui-widget ui-corner-all" title="{{lang.words.view|title()}} {{lang.words.log}}">{{lang.words.view|title()}}</a>
{% elif waf_service == 'nginx' %}
<a href="/app/logs/{{waf_service}}/waf?serv={{ service.1 }}&rows=100&grep=ModSecurity&hour=00&minute=00&hour1=24&minute1=00&file=error.log&waf=0" class="ui-button ui-widget ui-corner-all" title="{{lang.words.view|title()}} {{lang.words.log}}">{{lang.words.view|title()}}</a>
<a href="{{ url_for('logs.logs', service=waf_service) }}/waf?serv={{ service.1 }}&rows=100&grep=ModSecurity&hour=00&minute=00&hour1=24&minute1=00&file=error.log&waf=0" class="ui-button ui-widget ui-corner-all" title="{{lang.words.view|title()}} {{lang.words.log}}">{{lang.words.view|title()}}</a>
{% endif %}
</td>
<td></td>

View File

@ -70,140 +70,7 @@
{% if user %}
<input type="hidden" id="token" value="{{ token }}">
<script>show_version();</script>
<div class="top-menu">
<div class="LogoText">
<span id="logo_text">
<a href="https://roxy-wi.org" title="Roxy-WI site" target="_blank">
<img src="{{ url_for('static', filename='images/logo_menu.png') }}" alt="logo" width="110" />
</a>
</span>
</div>
<div id="top-link" class="top-link">
<nav id="menu">
<ul class="menu">
<li><a href="/app/" title="{{lang.menu_links.overview.title}}" class="overview-link ">{{lang.menu_links.overview.link}}</a></li>
{% if '1' in user_services %}
<li class="p_menu">
<a href="/app/service/haproxy" title="{{lang.menu_links.hapservers.haproxy.title}}" class="config-show">HAProxy</a>
<ul class="v_menu">
<li><a href="/app/service/haproxy" title="{{lang.menu_links.hapservers.haproxy.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a> </li>
<li><a href="/app/config/haproxy" title="{{lang.menu_links.config.haproxy.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
<li><a href="/app/stats/haproxy" title="{{lang.menu_links.stats.haproxy.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
<li><a href="/app/logs/haproxy" title="HAProxy {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
<li><a href="/app/runtimeapi" title="Runtime API" class="runtime head-submenu">Runtime API</a></li>
<li><a href="/app/metrics/haproxy" title="HAProxy {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
{% if role <= 3 %}
<li><a href="/app/add/haproxy#proxy" title="{{lang.menu_links.add_proxy.title}}" class="add-proxy head-submenu" id="add1">{{lang.menu_links.add_proxy.link}}</a></li>
<li><a href="/app/config/versions/haproxy" title="{{lang.menu_links.versions.haproxy.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
<li><a href="/app/add/haproxy#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu" id="add3">{{lang.menu_links.ssl.link}}</a></li>
<li><a href="/app/add/haproxy#lists" title="{{lang.menu_links.lists.title}}" class="lists head-submenu" id="add7">{{lang.menu_links.lists.link}}</a></li>
<li><a href="/app/waf/haproxy" title="Web application firewall" class="waf-menu head-submenu">WAF</a> </li>
{% endif %}
</ul>
</li>
{% endif %}
{% if '2' in user_services %}
<li class="p_menu">
<a href="/app/service/nginx" title="{{lang.menu_links.hapservers.nginx.title}}" class="nginx-menu">NGINX</a>
<ul class="v_menu">
<li><a href="/app/service/nginx" title="{{lang.menu_links.hapservers.nginx.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a></li>
<li><a href="/app/config/nginx" title="{{lang.menu_links.config.nginx.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
<li><a href="/app/stats/nginx" title="{{lang.menu_links.stats.nginx.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
<li><a href="/app/logs/nginx" title="NGINX {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
<li><a href="/app/metrics/nginx" title="NGINX {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
{% if role <= 3 %}
<li><a href="/app/add/nginx#proxy" title="{{lang.menu_links.add_proxy.title}}" class="add-proxy head-submenu">{{lang.menu_links.add_proxy.link}}</a></li>
<li><a href="/app/config/versions/nginx" title="{{lang.menu_links.versions.nginx.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
<li><a href="/app/add/haproxy?service=nginx#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu">{{lang.menu_links.ssl.link}}</a></li>
<li><a href="/app/waf/nginx" title="Web application firewall" class="waf-menu head-submenu">WAF</a> </li>
{% endif %}
</ul>
</li>
{% endif %}
{% if '4' in user_services %}
<li class="p_menu">
<a href="/app/service/apache" title="{{lang.menu_links.hapservers.apache.title}}" class="apache-menu">Apache</a>
<ul class="v_menu">
<li><a href="/app/service/apache" title="{{lang.menu_links.hapservers.apache.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a></li>
<li><a href="/app/config/apache" title="{{lang.menu_links.config.apache.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
<li><a href="/app/stats/apache" title="{{lang.menu_links.stats.apache.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
<li><a href="/app/logs/apache" title="Apache {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
<li><a href="/app/metrics/apache" title="Apache {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
{% if role <= 3 %}
<li><a href="/app/config/versions/apache" title="{{lang.menu_links.versions.apache.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
<li><a href="/app/add/haproxy?service=apache#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu" id="add3">{{lang.menu_links.ssl.link}}</a></li>
{% endif %}
</ul>
</li>
{% endif %}
{% if '3' in user_services %}
{% if role <= 2 %}
<li class="p_menu">
<a href="/app/service/keepalived" title="{{lang.menu_links.hapservers.keepalived.title}}" class="ha">Keepalived</a>
<ul class="v_menu">
<li><a href="/app/service/keepalived" title="{{lang.menu_links.hapservers.keepalived.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a> </li>
<li><a href="/app/config/keepalived" title="{{lang.menu_links.config.keepalived.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
<li><a href="/app/logs/keepalived" title="Keepalived {{lang.menu_links.stats.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
<li><a href="/app/config/versions/keepalived" title="{{lang.menu_links.versions.keepalived.title}}" class="version head-submenu keepalived_versions">{{lang.menu_links.versions.link}}</a></li>
</ul>
</li>
{% endif %}
{% endif %}
<li class="p_menu">
<a href="/app/smon" title="{{lang.menu_links.monitoring.title}}" class="stats">{{lang.menu_links.monitoring.link}}</a>
<ul class="v_menu">
<li><a href="/app/smon/dashboard" title="{{lang.menu_links.monitoring.smon.dashboard}}" class="overview-link head-submenu">{{lang.menu_links.monitoring.smon.dashboard}}</a></li>
<li><a href="/app/smon/history" title="{{lang.menu_links.monitoring.smon.history}}" class="lists head-submenu">{{lang.menu_links.monitoring.smon.history}}</a></li>
{% if role <= 3 %}
<li><a href="/app/smon/admin" title="{{lang.menu_links.monitoring.smon.admin}}" class="edit head-submenu">{{lang.menu_links.monitoring.smon.admin}}</a></li>
<li><a href="/app/checker/settings" title="Checker: {{lang.words.settings}}" class="checker head-submenu">Checker: {{lang.words.settings|title()}}</a></li>
{% endif %}
<li><a href="/app/checker/history" title="{{lang.menu_links.monitoring.checker_history}}" class="lists head-submenu">{{lang.menu_links.monitoring.checker_history}}</a></li>
<li><a href="/app/portscanner" title="{{lang.menu_links.monitoring.port_scan}}" class="port-scanner head-submenu">{{lang.menu_links.monitoring.port_scan}}</a></li>
<li><a href="/app/nettools" title="{{lang.menu_links.monitoring.net_tools}}" class="net-tools head-submenu">{{lang.menu_links.monitoring.net_tools}}</a></li>
</ul>
</li>
{% if role <= 2 %}
<li class="p_menu">
<a href="/app/install" title="{{lang.menu_links.servers.title}}" class="hap-menu">{{lang.words.installation|title()}}</a>
<ul class="v_menu">
<li><a href="/app/install/ha" title="{{lang.menu_links.ha.title}}" class="keepalived head-submenu">HA {{lang.words.cluster}}</a></li>
<li><a href="/app/install#service" title="{{lang.words.servers|title()}}: {{lang.words.proxy|title()}} {{lang.words.services}} {{lang.words.installation}}" class="hap-menu service installproxy head-submenu">{{lang.words.proxy|title()}} {{lang.words.services}}</a> </li>
<li><a href="/app/install#monitoring" title="{{lang.words.servers|title()}}: {{lang.words.monitoring|title()}} {{lang.words.services}} {{lang.words.installation}}" class="hap-menu monitoring installmon head-submenu">{{lang.words.monitoring|title()}}</a> </li>
<li><a href="/app/install#geolite2" title="{{lang.words.installation|title()}} GeoLite2" class="hap-menu geolite2 installgeo head-submenu">GeoLite2</a> </li>
</ul>
</li>
<li class="p_menu">
<a href="/app/servers#users" title="{{lang.menu_links.servers.title}}" class="runtime">{{lang.menu_links.servers.link}}</a>
<ul class="v_menu">
<li><a href="/app/servers#users" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} {{lang.words.users2}}" class="users head-submenu">{{lang.words.users|title()}}</a></li>
<li><a href="/app/servers#servers" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} {{lang.words.servers2}}" class="runtime servers head-submenu">{{lang.words.servers|title()}}</a></li>
<li><a href="/app/servers#ssh" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} SSH {{lang.words.creds2}}" class="admin ssh head-submenu">SSH {{lang.words.creds|title()}}</a></li>
<li><a href="/app/servers#settings" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.settings2}}" class="settings head-submenu">{{lang.words.settings|title()}}</a></li>
<li><a href="/app/servers#backup" title="{{lang.words.servers|title()}}: {{lang.words.backup|title()}} {{lang.words.configs2}}" class="backup head-submenu">{{lang.words.backup|title()}}</a> </li>
<li><a href="/app/logs/internal?type=2" title="{{lang.words.servers|title()}}: {{lang.words.view|title()}} {{lang.words.internal2}} {{lang.words.logs2}}" class="logs head-submenu">{{lang.words.internal|title()}} {{lang.words.logs}}</a></li>
</ul>
</li>
{% endif %}
{% if role <= 1 %}
<li class="p_menu" id="admin-area">
<a href="/app/admin#users" title="{{lang.menu_links.admin_area.title}}" class="admin">{{lang.menu_links.admin_area.link}}</a>
<ul class="v_menu">
<li><a href="/app/admin#users" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.users2}}" class="users head-submenu" id="admin-area-users">{{lang.words.users|title()}}</a></li>
<li><a href="/app/admin#groups" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.groups3}}" class="group groups head-submenu" id="admin-area-groups">{{lang.words.groups|title()}}</a></li>
<li><a href="/app/admin#servers" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.servers2}}" class="runtime servers head-submenu" id="admin-area-servers">{{lang.words.servers|title()}}</a></li>
<li><a href="/app/admin#ssh" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} SSH {{lang.words.creds2}}" class="admin ssh head-submenu" id="admin-area-ssh">SSH {{lang.words.creds|title()}}</a></li>
<li><a href="/app/admin#settings" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.settings2}}" class="settings head-submenu" id="admin-area-settings">{{lang.words.settings|title()}}</a></li>
<li><a href="/app/admin#tools" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.tools}}" class="services head-submenu" id="admin-area-services">{{lang.words.tools|title()}}</a></li>
<li><a href="/app/logs/internal" title="{{lang.words.admin_area|title()}}: {{lang.words.view|title()}} {{lang.words.internal2}} {{lang.words.logs2}}" class="logs head-submenu" id="admin-area-logs">{{lang.words.internal|title()}} {{lang.words.logs}}</a></li>
<li><a href="/app/admin#updatehapwi" title="{{lang.words.admin_area|title()}}: {{lang.words.w_update|title()}} Roxy-WI" class="upload updatehapwi head-submenu" id="admin-area-update">{{lang.words.w_update|title()}}</a></li>
</ul>
</li>
{% endif %}
</ul>
</nav>
</div>
</div>
{% include 'include/main_menu.html' %}
<div class="container">
<h2>
{% block h2 %}{% endblock %}
@ -224,44 +91,7 @@
{% endif %}
</h2>
{% if autorefresh %}
<div class="auto-refresh-div">
<div class="auto-refresh-head">
{{lang.words.refresh|title()}} {{lang.words.interval|title()}}
</div>
<div class="auto-refresh-interval">
<div class="auto-refresh-ul">
<ul style="width: 130px;">
<li>
<a class="ui-button ui-widget ui-corner-all" onclick="setRefreshInterval(0)" title="Turn off auto-refresh">{{lang.words.no|title()}} {{lang.words.auto}}-{{lang.words.refresh}}</a>
</li>
</ul>
</div>
<div class="auto-refresh-ul" id="secIntervals">
<ul style="width: 100px;">
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 5 {{lang.words.seconds2}}" onclick="setRefreshInterval(5000)">5 {{lang.words.seconds2}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 10 {{lang.words.seconds2}}" onclick="setRefreshInterval(10000)">10 {{lang.words.seconds2}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 30 {{lang.words.seconds2}}" onclick="setRefreshInterval(30000)">30 {{lang.words.seconds2}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 45 {{lang.words.seconds2}}" onclick="setRefreshInterval(45000)">45 {{lang.words.seconds2}}</a></li>
</ul>
</div>
<div class="auto-refresh-ul">
<ul style="width: 100px;">
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every2}} 1 minute" onclick="setRefreshInterval(60000)">1 {{lang.words.minute}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 5 {{lang.words.minutes}}" onclick="setRefreshInterval(300000)">5 {{lang.words.minutes}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 15 {{lang.words.minutes}}" onclick="setRefreshInterval(900000)">15 {{lang.words.minutes}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 30 {{lang.words.minutes}}" onclick="setRefreshInterval(1800000)">30 {{lang.words.minutes}}</a></li>
</ul>
</div>
<div class="auto-refresh-ul">
<ul style="width: 100px;">
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every3}} 1 {{lang.words.hour}}" onclick="setRefreshInterval(3600000)">1 {{lang.words.hour}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 2 {{lang.words.hours}}" onclick="setRefreshInterval(7200000)">2 {{lang.words.hours}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 12 {{lang.words.hours}}" onclick="setRefreshInterval(43200000)">12 {{lang.words.hours2}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every3}} 1 {{lang.words.day}}" onclick="setRefreshInterval(86400000)">1 {{lang.words.day}}</a></li>
</ul>
</div>
</div>
</div>
{% include 'include/autorefresh_submenu.html' %}
{% endif %}
<ul id='browse_history'></ul>
{% if role %}
@ -278,7 +108,7 @@
</div>
<div id="show-updates" style="display: none;">
<div>
{{lang.phrases.new_version}} <a href="/app/admin#updatehapwi" class="link">{{lang.words.w_update|title()}}</a>
{{lang.phrases.new_version}} <a href="{{ url_for('admin.admin') }}#updatehapwi" class="link">{{lang.words.w_update|title()}}</a>
</div>
</div>
<div class="footer">

View File

@ -0,0 +1,38 @@
<div class="auto-refresh-div">
<div class="auto-refresh-head">
{{lang.words.refresh|title()}} {{lang.words.interval|title()}}
</div>
<div class="auto-refresh-interval">
<div class="auto-refresh-ul">
<ul style="width: 130px;">
<li>
<a class="ui-button ui-widget ui-corner-all" onclick="setRefreshInterval(0)" title="Turn off auto-refresh">{{lang.words.no|title()}} {{lang.words.auto}}-{{lang.words.refresh}}</a>
</li>
</ul>
</div>
<div class="auto-refresh-ul" id="secIntervals">
<ul style="width: 100px;">
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 5 {{lang.words.seconds2}}" onclick="setRefreshInterval(5000)">5 {{lang.words.seconds2}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 10 {{lang.words.seconds2}}" onclick="setRefreshInterval(10000)">10 {{lang.words.seconds2}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 30 {{lang.words.seconds2}}" onclick="setRefreshInterval(30000)">30 {{lang.words.seconds2}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 45 {{lang.words.seconds2}}" onclick="setRefreshInterval(45000)">45 {{lang.words.seconds2}}</a></li>
</ul>
</div>
<div class="auto-refresh-ul">
<ul style="width: 100px;">
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every2}} 1 minute" onclick="setRefreshInterval(60000)">1 {{lang.words.minute}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 5 {{lang.words.minutes}}" onclick="setRefreshInterval(300000)">5 {{lang.words.minutes}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 15 {{lang.words.minutes}}" onclick="setRefreshInterval(900000)">15 {{lang.words.minutes}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 30 {{lang.words.minutes}}" onclick="setRefreshInterval(1800000)">30 {{lang.words.minutes}}</a></li>
</ul>
</div>
<div class="auto-refresh-ul">
<ul style="width: 100px;">
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every3}} 1 {{lang.words.hour}}" onclick="setRefreshInterval(3600000)">1 {{lang.words.hour}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 2 {{lang.words.hours}}" onclick="setRefreshInterval(7200000)">2 {{lang.words.hours}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every}} 12 {{lang.words.hours}}" onclick="setRefreshInterval(43200000)">12 {{lang.words.hours2}}</a></li>
<li><a title="{{lang.words.auto|title()}}-{{lang.words.refresh}} {{lang.words.every3}} 1 {{lang.words.day}}" onclick="setRefreshInterval(86400000)">1 {{lang.words.day}}</a></li>
</ul>
</div>
</div>
</div>

View File

@ -0,0 +1,134 @@
<div class="top-menu">
<div class="LogoText">
<span id="logo_text">
<a href="https://roxy-wi.org" title="Roxy-WI site" target="_blank">
<img src="{{ url_for('static', filename='images/logo_menu.png') }}" alt="logo" width="110" />
</a>
</span>
</div>
<div id="top-link" class="top-link">
<nav id="menu">
<ul class="menu">
<li><a href="{{ url_for('overview.index') }}" title="{{lang.menu_links.overview.title}}" class="overview-link ">{{lang.menu_links.overview.link}}</a></li>
{% if '1' in user_services %}
<li class="p_menu">
<a href="{{ url_for('service.services', service='haproxy') }}" title="{{lang.menu_links.hapservers.haproxy.title}}" class="config-show">HAProxy</a>
<ul class="v_menu">
<li><a href="{{ url_for('service.services', service='haproxy') }}" title="{{lang.menu_links.hapservers.haproxy.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a> </li>
<li><a href="{{ url_for('config.config', service='haproxy') }}" title="{{lang.menu_links.config.haproxy.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
<li><a href="{{ url_for('main.stats', service='haproxy') }}" title="{{lang.menu_links.stats.haproxy.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
<li><a href="{{ url_for('logs.logs', service='haproxy') }}" title="HAProxy {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
<li><a href="{{ url_for('runtime.runtimeapi') }}" title="Runtime API" class="runtime head-submenu">Runtime API</a></li>
<li><a href="{{ url_for('metric.metrics', service='haproxy') }}" title="HAProxy {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
{% if role <= 3 %}
<li><a href="{{ url_for('add.add', service='haproxy') }}#proxy" title="{{lang.menu_links.add_proxy.title}}" class="add-proxy head-submenu" id="add1">{{lang.menu_links.add_proxy.link}}</a></li>
<li><a href="{{ url_for('config.versions', service='haproxy') }}" title="{{lang.menu_links.versions.haproxy.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
<li><a href="{{ url_for('add.add', service='haproxy') }}#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu" id="add3">{{lang.menu_links.ssl.link}}</a></li>
<li><a href="{{ url_for('add.add', service='haproxy') }}#lists" title="{{lang.menu_links.lists.title}}" class="lists head-submenu" id="add7">{{lang.menu_links.lists.link}}</a></li>
<li><a href="{{ url_for('waf.waf', service='haproxy') }}" title="Web application firewall" class="waf-menu head-submenu">WAF</a> </li>
{% endif %}
</ul>
</li>
{% endif %}
{% if '2' in user_services %}
<li class="p_menu">
<a href="{{ url_for('service.services', service='nginx') }}" title="{{lang.menu_links.hapservers.nginx.title}}" class="nginx-menu">NGINX</a>
<ul class="v_menu">
<li><a href="{{ url_for('service.services', service='nginx') }}" title="{{lang.menu_links.hapservers.nginx.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a></li>
<li><a href="{{ url_for('config.config', service='nginx') }}" title="{{lang.menu_links.config.nginx.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
<li><a href="{{ url_for('main.stats', service='nginx') }}" title="{{lang.menu_links.stats.nginx.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
<li><a href="{{ url_for('logs.logs', service='nginx') }}" title="NGINX {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
<li><a href="{{ url_for('metric.metrics', service='nginx') }}" title="NGINX {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
{% if role <= 3 %}
<li><a href="{{ url_for('add.add', service='nginx') }}#proxy" title="{{lang.menu_links.add_proxy.title}}" class="add-proxy head-submenu">{{lang.menu_links.add_proxy.link}}</a></li>
<li><a href="{{ url_for('config.versions', service='nginx') }}" title="{{lang.menu_links.versions.nginx.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
<li><a href="{{ url_for('add.add', service='haproxy') }}?service=nginx#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu">{{lang.menu_links.ssl.link}}</a></li>
<li><a href="{{ url_for('waf.waf', service='nginx') }}" title="Web application firewall" class="waf-menu head-submenu">WAF</a> </li>
{% endif %}
</ul>
</li>
{% endif %}
{% if '4' in user_services %}
<li class="p_menu">
<a href="{{ url_for('service.services', service='apache') }}" title="{{lang.menu_links.hapservers.apache.title}}" class="apache-menu">Apache</a>
<ul class="v_menu">
<li><a href="{{ url_for('service.services', service='apache') }}" title="{{lang.menu_links.hapservers.apache.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a></li>
<li><a href="{{ url_for('config.config', service='apache') }}" title="{{lang.menu_links.config.apache.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
<li><a href="{{ url_for('main.stats', service='apache') }}" title="{{lang.menu_links.stats.apache.title}}" class="stats head-submenu">{{lang.menu_links.stats.link}}</a></li>
<li><a href="{{ url_for('logs.logs', service='apache') }}" title="Apache {{lang.menu_links.logs.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
<li><a href="{{ url_for('metric.metrics', service='apache') }}" title="Apache {{lang.menu_links.metrics.title}}" class="metrics head-submenu">{{lang.menu_links.metrics.link}}</a></li>
{% if role <= 3 %}
<li><a href="{{ url_for('config.versions', service='apache') }}" title="{{lang.menu_links.versions.apache.title}}" class="version head-submenu">{{lang.menu_links.versions.link}}</a></li>
<li><a href="{{ url_for('add.add', service='haproxy') }}?service=apache#ssl" title="{{lang.menu_links.ssl.title}}" class="cert head-submenu" id="add3">{{lang.menu_links.ssl.link}}</a></li>
{% endif %}
</ul>
</li>
{% endif %}
{% if '3' in user_services %}
{% if role <= 2 %}
<li class="p_menu">
<a href="{{ url_for('service.services', service='keepalived') }}" title="{{lang.menu_links.hapservers.keepalived.title}}" class="ha">Keepalived</a>
<ul class="v_menu">
<li><a href="{{ url_for('service.services', service='keepalived') }}" title="{{lang.menu_links.hapservers.keepalived.title}}" class="overview-link head-submenu">{{lang.menu_links.hapservers.link}}</a> </li>
<li><a href="{{ url_for('config.config', service='keepalived') }}" title="{{lang.menu_links.config.keepalived.title}}" class="edit head-submenu">{{lang.menu_links.config.link}}</a></li>
<li><a href="{{ url_for('logs.logs', service='keepalived') }}" title="Keepalived {{lang.menu_links.stats.title}}" class="logs head-submenu">{{lang.menu_links.logs.link}}</a></li>
<li><a href="{{ url_for('config.versions', service='keepalived') }}" title="{{lang.menu_links.versions.keepalived.title}}" class="version head-submenu keepalived_versions">{{lang.menu_links.versions.link}}</a></li>
</ul>
</li>
{% endif %}
{% endif %}
<li class="p_menu">
<a href="{{ url_for('smon.smon') }}" title="{{lang.menu_links.monitoring.title}}" class="stats">{{lang.menu_links.monitoring.link}}</a>
<ul class="v_menu">
<li><a href="{{ url_for('smon.smon') }}" title="{{lang.menu_links.monitoring.smon.dashboard}}" class="overview-link head-submenu">{{lang.menu_links.monitoring.smon.dashboard}}</a></li>
<li><a href="{{ url_for('smon.smon_history') }}" title="{{lang.menu_links.monitoring.smon.history}}" class="lists head-submenu">{{lang.menu_links.monitoring.smon.history}}</a></li>
{% if role <= 3 %}
<li><a href="{{ url_for('smon.smon_admin') }}" title="{{lang.menu_links.monitoring.smon.admin}}" class="edit head-submenu">{{lang.menu_links.monitoring.smon.admin}}</a></li>
<li><a href="{{ url_for('checker.checker_settings') }}" title="Checker: {{lang.words.settings}}" class="checker head-submenu">Checker: {{lang.words.settings|title()}}</a></li>
{% endif %}
<li><a href="{{ url_for('checker.checker_history') }}" title="{{lang.menu_links.monitoring.checker_history}}" class="lists head-submenu">{{lang.menu_links.monitoring.checker_history}}</a></li>
<li><a href="{{ url_for('portscanner.portscanner') }}" title="{{lang.menu_links.monitoring.port_scan}}" class="port-scanner head-submenu">{{lang.menu_links.monitoring.port_scan}}</a></li>
<li><a href="{{ url_for('main.nettools') }}" title="{{lang.menu_links.monitoring.net_tools}}" class="net-tools head-submenu">{{lang.menu_links.monitoring.net_tools}}</a></li>
</ul>
</li>
{% if role <= 2 %}
<li class="p_menu">
<a href="{{ url_for('install.install_monitoring') }}" title="{{lang.menu_links.servers.title}}" class="hap-menu">{{lang.words.installation|title()}}</a>
<ul class="v_menu">
<li><a href="{{ url_for('install.ha') }}" title="{{lang.menu_links.ha.title}}" class="keepalived head-submenu">HA {{lang.words.cluster}}</a></li>
<li><a href="{{ url_for('install.install_monitoring') }}#service" title="{{lang.words.servers|title()}}: {{lang.words.proxy|title()}} {{lang.words.services}} {{lang.words.installation}}" class="hap-menu service installproxy head-submenu">{{lang.words.proxy|title()}} {{lang.words.services}}</a> </li>
<li><a href="{{ url_for('install.install_monitoring') }}#monitoring" title="{{lang.words.servers|title()}}: {{lang.words.monitoring|title()}} {{lang.words.services}} {{lang.words.installation}}" class="hap-menu monitoring installmon head-submenu">{{lang.words.monitoring|title()}}</a> </li>
<li><a href="{{ url_for('install.install_monitoring') }}#geolite2" title="{{lang.words.installation|title()}} GeoLite2" class="hap-menu geolite2 installgeo head-submenu">GeoLite2</a> </li>
</ul>
</li>
<li class="p_menu">
<a href="{{ url_for('main.servers') }}#users" title="{{lang.menu_links.servers.title}}" class="runtime">{{lang.menu_links.servers.link}}</a>
<ul class="v_menu">
<li><a href="{{ url_for('main.servers') }}#users" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} {{lang.words.users2}}" class="users head-submenu">{{lang.words.users|title()}}</a></li>
<li><a href="{{ url_for('main.servers') }}#servers" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} {{lang.words.servers2}}" class="runtime servers head-submenu">{{lang.words.servers|title()}}</a></li>
<li><a href="{{ url_for('main.servers') }}#ssh" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} SSH {{lang.words.creds2}}" class="admin ssh head-submenu">SSH {{lang.words.creds|title()}}</a></li>
<li><a href="{{ url_for('main.servers') }}#settings" title="{{lang.words.servers|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.settings2}}" class="settings head-submenu">{{lang.words.settings|title()}}</a></li>
<li><a href="{{ url_for('main.servers') }}#backup" title="{{lang.words.servers|title()}}: {{lang.words.backup|title()}} {{lang.words.configs2}}" class="backup head-submenu">{{lang.words.backup|title()}}</a> </li>
<li><a href="{{ url_for('logs.logs_internal') }}?type=2" title="{{lang.words.servers|title()}}: {{lang.words.view|title()}} {{lang.words.internal2}} {{lang.words.logs2}}" class="logs head-submenu">{{lang.words.internal|title()}} {{lang.words.logs}}</a></li>
</ul>
</li>
{% endif %}
{% if role <= 1 %}
<li class="p_menu" id="admin-area">
<a href="{{ url_for('admin.admin') }}#users" title="{{lang.menu_links.admin_area.title}}" class="admin">{{lang.menu_links.admin_area.link}}</a>
<ul class="v_menu">
<li><a href="{{ url_for('admin.admin') }}#users" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.users2}}" class="users head-submenu" id="admin-area-users">{{lang.words.users|title()}}</a></li>
<li><a href="{{ url_for('admin.admin') }}#groups" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.groups3}}" class="group groups head-submenu" id="admin-area-groups">{{lang.words.groups|title()}}</a></li>
<li><a href="{{ url_for('admin.admin') }}#servers" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} {{lang.words.servers2}}" class="runtime servers head-submenu" id="admin-area-servers">{{lang.words.servers|title()}}</a></li>
<li><a href="{{ url_for('admin.admin') }}#ssh" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} SSH {{lang.words.creds2}}" class="admin ssh head-submenu" id="admin-area-ssh">SSH {{lang.words.creds|title()}}</a></li>
<li><a href="{{ url_for('admin.admin') }}#settings" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.settings2}}" class="settings head-submenu" id="admin-area-settings">{{lang.words.settings|title()}}</a></li>
<li><a href="{{ url_for('admin.admin') }}#tools" title="{{lang.words.admin_area|title()}}: {{lang.words.manage|title()}} Roxy-WI {{lang.words.tools}}" class="services head-submenu" id="admin-area-services">{{lang.words.tools|title()}}</a></li>
<li><a href="{{ url_for('logs.logs_internal') }}" title="{{lang.words.admin_area|title()}}: {{lang.words.view|title()}} {{lang.words.internal2}} {{lang.words.logs2}}" class="logs head-submenu" id="admin-area-logs">{{lang.words.internal|title()}} {{lang.words.logs}}</a></li>
<li><a href="{{ url_for('admin.admin') }}#updatehapwi" title="{{lang.words.admin_area|title()}}: {{lang.words.w_update|title()}} Roxy-WI" class="upload updatehapwi head-submenu" id="admin-area-update">{{lang.words.w_update|title()}}</a></li>
</ul>
</li>
{% endif %}
</ul>
</nav>
</div>
</div>

View File

@ -203,7 +203,7 @@
<input type="hidden" id="server-name-{{s.0}}" value="{{s.1}}" />
<input type="hidden" id="service" value="{{service}}" />
{% if not serv %}
<a href="/app/service/{{service}}/{{s.2}}" title="{{lang.words.more|title()}} {{lang.words.about}} {{s.1}}" style="color: #5d9ceb">{{s.1}}</a>
<a href="{{ url_for('service.services', service=service, serv=s.2) }}" title="{{lang.words.more|title()}} {{lang.words.about}} {{s.1}}" style="color: #5d9ceb">{{s.1}}</a>
{% else %}
{{s.1}}
{% endif %}
@ -249,7 +249,7 @@
<a id="stop-{{ s.2 }}" class="stop" title="{{lang.words.stop|title()}} {{service}} {{lang.words.service}}">
<span class="service-stop" onclick="confirmAjaxAction('stop', '{{service}}', '{{s.2}}')"></span>
</a>
<a href="/app/history/{{service}}/{{s.2}}" title="{{lang.words.view|title()}} {{lang.words.history3}} {{s.1}}" class="history" style="margin: 0 5px 0 10px;"></a>
<a href="{{ url_for('main.service_history', service=service, server_ip=s.2) }}" title="{{lang.words.view|title()}} {{lang.words.history3}} {{s.1}}" class="history" style="margin: 0 5px 0 10px;"></a>
{% if service != 'keepalived' %}
<span class="menu-bar" onclick="serverSettings('{{s.0}}', '{{s.1}}')" title="{{lang.words.edit|title()}} {{lang.words.settings}} {{s.1}}"></span>
{% endif %}
@ -351,11 +351,11 @@
<a href="/app/config/map/{{service}}/{{s.2}}" class="ui-button ui-widget ui-corner-all" {{map_id}} title="{{lang.words.show|title()}} {{lang.words.map}}">{{lang.words.map|title()}}</a>
{% endif %}
{% if service != 'keepalived' %}
<a href="/app/stats/{{service}}/{{s.2}}" class="ui-button ui-widget ui-corner-all" {{stats_id}} title="{{lang.words.view|title()}} {{service}} {{lang.words.statistics}}">{{lang.menu_links.stats.link}}</a>
<a href="{{ url_for('main.stats', service=service, serv=s.2) }}" class="ui-button ui-widget ui-corner-all" {{stats_id}} title="{{lang.words.view|title()}} {{service}} {{lang.words.statistics}}">{{lang.menu_links.stats.link}}</a>
{% endif %}
<a href="/app/logs/{{service}}/" {{logs_id}} class="ui-button ui-widget ui-corner-all" title="{{lang.words.view|title()}} {{service}} {{lang.words.logs}}">{{lang.menu_links.logs.link}}</a>
<a href="{{ url_for('logs.logs', service=service) }}" {{logs_id}} class="ui-button ui-widget ui-corner-all" title="{{lang.words.view|title()}} {{service}} {{lang.words.logs}}">{{lang.menu_links.logs.link}}</a>
{% if role <= 2 %}
<a href="/app/config/versions/{{service}}/{{s.2}}" class="ui-button ui-widget ui-corner-all" {{versions_id}} title="{{lang.words.view|title()}}/{{lang.words.rollback|title()}} {{lang.words.to}} {{lang.words.previous}} {{lang.words.config}}">{{lang.menu_links.versions.link}}</a>
<a href="{{ url_for('config.versions', service=service, server_ip=s.2) }}" class="ui-button ui-widget ui-corner-all" {{versions_id}} title="{{lang.words.view|title()}}/{{lang.words.rollback|title()}} {{lang.words.to}} {{lang.words.previous}} {{lang.words.config}}">{{lang.menu_links.versions.link}}</a>
{% endif %}
</div>
</div>

View File

@ -866,11 +866,13 @@ $( function() {
$('#0').css("display", "inline");
});
$('#auth').submit(function() {
var next_url = findGetParameter('next');
$.ajax( {
url: "/app/login",
data: {
login: $('#login').val(),
pass: $('#pass').val()
pass: $('#pass').val(),
next: next_url
},
type: "POST",
success: function( data ) {