mirror of https://github.com/Aidaho12/haproxy-wi
parent
8648b3f344
commit
5e2fadc75e
|
@ -11,8 +11,9 @@ app.jinja_env.add_extension('jinja2.ext.loopcontrols')
|
||||||
|
|
||||||
cache = Cache(config={'CACHE_TYPE': 'SimpleCache', "CACHE_DEFAULT_TIMEOUT": 3000})
|
cache = Cache(config={'CACHE_TYPE': 'SimpleCache', "CACHE_DEFAULT_TIMEOUT": 3000})
|
||||||
cache.init_app(app)
|
cache.init_app(app)
|
||||||
|
|
||||||
login_manager = LoginManager(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['SITEMAP_INCLUDE_RULES_WITHOUT_PARAMS'] = True
|
||||||
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=3)
|
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=3)
|
||||||
|
|
11
app/login.py
11
app/login.py
|
@ -1,5 +1,5 @@
|
||||||
from flask import render_template, request, redirect, url_for, make_response
|
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
|
from app import app, login_manager, cache
|
||||||
import app.modules.db.sql as sql
|
import app.modules.db.sql as sql
|
||||||
|
@ -10,21 +10,20 @@ import app.modules.roxy_wi_tools as roxy_wi_tools
|
||||||
|
|
||||||
|
|
||||||
@app.before_request
|
@app.before_request
|
||||||
@cache.memoize(2)
|
|
||||||
def check_login():
|
def check_login():
|
||||||
if request.endpoint not in ('login_page', 'static', 'main.show_roxywi_version'):
|
if request.endpoint not in ('login_page', 'static', 'main.show_roxywi_version'):
|
||||||
try:
|
try:
|
||||||
user_params = roxywi_common.get_users_params()
|
user_params = roxywi_common.get_users_params()
|
||||||
except Exception:
|
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']):
|
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:
|
try:
|
||||||
roxywi_auth.check_login(user_params['user_uuid'], user_params['token'])
|
roxywi_auth.check_login(user_params['user_uuid'], user_params['token'])
|
||||||
except Exception:
|
except Exception:
|
||||||
return redirect(url_for('login_page'))
|
return redirect(login_url('login_page', next_url=request.url))
|
||||||
|
|
||||||
|
|
||||||
@login_manager.user_loader
|
@login_manager.user_loader
|
||||||
|
@ -43,7 +42,7 @@ def load_user(user_id):
|
||||||
@app.after_request
|
@app.after_request
|
||||||
def redirect_to_login(response):
|
def redirect_to_login(response):
|
||||||
if response.status_code == 401:
|
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
|
return response
|
||||||
|
|
||||||
|
|
|
@ -117,12 +117,17 @@ def do_login(user_uuid: str, user_group: str, user: str, next_url: str):
|
||||||
except Exception:
|
except Exception:
|
||||||
session_ttl = 5
|
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)
|
expires = datetime.utcnow() + timedelta(days=session_ttl)
|
||||||
|
|
||||||
login_user(user)
|
login_user(user)
|
||||||
resp = make_response(next_url or url_for('overview.index'))
|
resp = make_response(redirect_to)
|
||||||
resp.set_cookie('uuid', user_uuid, secure=True, expires=expires.strftime("%a, %d %b %Y %H:%M:%S GMT"))
|
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"))
|
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:
|
try:
|
||||||
user_group_name = sql.get_group_name_by_id(user_group)
|
user_group_name = sql.get_group_name_by_id(user_group)
|
||||||
|
|
|
@ -144,7 +144,7 @@ def show_nginx_connections(server_ip: str) -> str:
|
||||||
return 'error: cannot connect to NGINX stat page'
|
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')
|
port = sql.get_setting('apache_stats_port')
|
||||||
user = sql.get_setting('apache_stats_user')
|
user = sql.get_setting('apache_stats_user')
|
||||||
password = sql.get_setting('apache_stats_password')
|
password = sql.get_setting('apache_stats_password')
|
||||||
|
@ -221,11 +221,10 @@ def show_services_overview():
|
||||||
socket, stderr = server_mod.subprocess_execute(cmd)
|
socket, stderr = server_mod.subprocess_execute(cmd)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'ajax/show_services_ovw.html',
|
'ajax/show_services_ovw.html', role=user_params['role'], metrics_master=''.join(metrics_master),
|
||||||
role=user_params['role'], metrics_master=''.join(metrics_master), metrics_worker=metrics_worker,
|
metrics_worker=metrics_worker, checker_master=''.join(checker_master), checker_worker=checker_worker,
|
||||||
checker_master=''.join(checker_master), checker_worker=checker_worker, keep_alive=''.join(keep_alive),
|
keep_alive=''.join(keep_alive), smon=''.join(smon), port_scanner=''.join(port_scanner), grafana=grafana,
|
||||||
smon=''.join(smon), port_scanner=''.join(port_scanner), grafana=grafana, socket=''.join(socket),
|
socket=''.join(socket), is_checker_worker=is_checker_worker, is_metrics_worker=is_metrics_worker, host=host,
|
||||||
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-"),
|
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"),
|
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"),
|
checker_log_id=roxy_logs.roxy_wi_log(log_id=1, file="checker"),
|
||||||
|
|
|
@ -141,7 +141,7 @@ def config(service, serv, edit, config_file_name, new):
|
||||||
config_read = ' '
|
config_read = ' '
|
||||||
|
|
||||||
return render_template(
|
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,
|
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_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
|
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':
|
if is_redirect != 'ok':
|
||||||
return redirect(url_for(f'{is_redirect}'))
|
return redirect(url_for(f'{is_redirect}'))
|
||||||
|
|
||||||
config = request.form.get('config')
|
config_file = request.form.get('config')
|
||||||
oldcfg = request.form.get('oldconfig')
|
oldcfg = request.form.get('oldconfig')
|
||||||
save = request.form.get('save')
|
save = request.form.get('save')
|
||||||
config_file_name = request.form.get('config_file_name')
|
config_file_name = request.form.get('config_file_name')
|
||||||
|
@ -176,7 +176,7 @@ def save_config(service, server_ip):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(cfg, "a") as conf:
|
with open(cfg, "a") as conf:
|
||||||
conf.write(config)
|
conf.write(config_file)
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
return f"error: Cannot read imported config file: {e}", 200
|
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)
|
stderr = "Error: %s - %s." % (e.filename, e.strerror)
|
||||||
|
|
||||||
return render_template(
|
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'],
|
selects=user_params['servers'], file=file, service=service, user_services=user_params['user_services'],
|
||||||
token=user_params['token'], lang=user_params['lang'], stderr=stderr
|
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)
|
sections = section_mod.get_sections(cfg)
|
||||||
|
|
||||||
return render_template(
|
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='',
|
sections=sections, error=error, token=user_params['token'], lang=user_params['lang'], is_restart=is_restart, config='',
|
||||||
user_services=user_params['user_services']
|
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")
|
os.system(f"/bin/mv {cfg} {cfg}.old")
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'sections.html', h2=1, role=user_params['role'], user=user,
|
'sections.html', role=user_params['role'], user=user, serv=server_ip, selects=user_params['servers'],
|
||||||
serv=server_ip, selects=user_params['servers'], error=error, sections=sections, cfg=cfg,
|
error=error, sections=sections, cfg=cfg, token=user_params['token'], lang=user_params['lang'],
|
||||||
token=user_params['token'], lang=user_params['lang'], is_restart=is_restart, config=config_read,
|
is_restart=is_restart, config=config_read, start_line=start_line, end_line=end_line, section=section,
|
||||||
start_line=start_line, end_line=end_line, section=section, user_services=user_params['user_services']
|
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')
|
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"
|
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')
|
oldcfg = request.form.get('oldconfig')
|
||||||
save = request.form.get('save')
|
save = request.form.get('save')
|
||||||
start_line = request.form.get('start_line')
|
start_line = request.form.get('start_line')
|
||||||
end_line = request.form.get('end_line')
|
end_line = request.form.get('end_line')
|
||||||
|
|
||||||
if save == 'delete':
|
if save == 'delete':
|
||||||
config = ''
|
config_file = ''
|
||||||
save = 'reload'
|
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:
|
try:
|
||||||
with open(cfg, "w") as conf:
|
with open(cfg, "w") as conf:
|
||||||
conf.write(config)
|
conf.write(config_file)
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
return f"error: Cannot read import config file: {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 redirect(url_for('index'))
|
||||||
|
|
||||||
return render_template(
|
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,
|
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_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'],
|
is_serv_protected=is_serv_protected, token=user_params['token'], lang=user_params['lang'],
|
||||||
|
|
|
@ -79,7 +79,7 @@ def services(service, serv):
|
||||||
if distro.id() == 'ubuntu':
|
if distro.id() == 'ubuntu':
|
||||||
if s == 'roxy-wi-keep_alive':
|
if s == 'roxy-wi-keep_alive':
|
||||||
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:
|
else:
|
||||||
cmd = "rpm --query " + s + "-* |awk -F\"" + s + "\" '{print $2}' |awk -F\".noa\" '{print $1}' |sed 's/-//1' |sed 's/-/./'"
|
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)
|
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')
|
haproxy_sock_port = sql.get_setting('haproxy_sock_port')
|
||||||
servers_with_status1 = []
|
servers_with_status1 = []
|
||||||
out1 = ''
|
|
||||||
for s in servers:
|
for s in servers:
|
||||||
servers_with_status = list()
|
servers_with_status = list()
|
||||||
servers_with_status.append(s[0])
|
servers_with_status.append(s[0])
|
||||||
|
@ -101,14 +100,14 @@ def services(service, serv):
|
||||||
h = (['', ''],)
|
h = (['', ''],)
|
||||||
cmd = [
|
cmd = [
|
||||||
"/usr/sbin/nginx -v 2>&1|awk '{print $3}' && systemctl status nginx |grep -e 'Active' |awk "
|
"/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:
|
for service_set in docker_settings:
|
||||||
if service_set.server_id == s[0] and service_set.setting == 'dockerized' and service_set.value == '1':
|
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')
|
container_name = sql.get_setting('nginx_container_name')
|
||||||
cmd = [
|
cmd = [
|
||||||
"docker exec -it " + container_name + " /usr/sbin/nginx -v 2>&1|awk '{print $3}' && "
|
"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:"
|
"docker ps -a -f name=" + container_name + " --format '{{.Status}}'|tail -1 && ps ax |grep nginx:|grep -v grep |wc -l"
|
||||||
"|grep -v grep |wc -l"
|
|
||||||
]
|
]
|
||||||
try:
|
try:
|
||||||
out = server_mod.ssh_command(s[2], cmd)
|
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(h)
|
||||||
servers_with_status.append(s[22])
|
servers_with_status.append(s[22])
|
||||||
else:
|
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)
|
out = server_mod.subprocess_execute(cmd)
|
||||||
|
|
||||||
for k in out:
|
for k in out:
|
||||||
|
@ -197,7 +196,7 @@ def services(service, serv):
|
||||||
user_subscription = roxywi_common.return_user_subscription()
|
user_subscription = roxywi_common.return_user_subscription()
|
||||||
|
|
||||||
return render_template(
|
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'],
|
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'],
|
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'],
|
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()
|
user_params = roxywi_common.get_users_params()
|
||||||
|
|
||||||
if service == 'haproxy':
|
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)
|
out = server_mod.subprocess_execute(cmd)
|
||||||
return_out = ""
|
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():
|
def show_haproxy_bytes():
|
||||||
server_ip = common.is_ip_or_dns(request.form.get('showBytes'))
|
server_ip = common.is_ip_or_dns(request.form.get('showBytes'))
|
||||||
|
|
||||||
return roxy_overview.show_haproxy_binout(server_ip)
|
return roxy_overview.show_haproxy_binout(server_ip)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/nginx/connections', methods=['POST'])
|
@bp.post('/nginx/connections')
|
||||||
def show_nginx_connections():
|
def show_nginx_connections():
|
||||||
server_ip = common.is_ip_or_dns(request.form.get('nginxConnections'))
|
server_ip = common.is_ip_or_dns(request.form.get('nginxConnections'))
|
||||||
|
|
||||||
return roxy_overview.show_nginx_connections(server_ip)
|
return roxy_overview.show_nginx_connections(server_ip)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/apache/bytes', methods=['POST'])
|
@bp.post('/apache/bytes')
|
||||||
def show_apache_bytes():
|
def show_apache_bytes():
|
||||||
server_ip = common.is_ip_or_dns(request.form.get('apachekBytes'))
|
server_ip = common.is_ip_or_dns(request.form.get('apachekBytes'))
|
||||||
|
|
||||||
return roxy_overview.show_apache_bytes(server_ip)
|
return roxy_overview.show_apache_bytes(server_ip)
|
||||||
|
|
||||||
|
|
||||||
@bp.route('/keepalived/become-master', methods=['POST'])
|
@bp.post('/keepalived/become-master')
|
||||||
@cache.cached()
|
@cache.cached()
|
||||||
def show_keepalived_become_master():
|
def show_keepalived_become_master():
|
||||||
server_ip = common.is_ip_or_dns(request.form.get('keepalivedBecameMaster'))
|
server_ip = common.is_ip_or_dns(request.form.get('keepalivedBecameMaster'))
|
||||||
|
|
|
@ -68,14 +68,14 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<td>
|
<td>
|
||||||
{% if role <= 2 %}
|
{% 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 %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{% if waf_service == 'haproxy' %}
|
{% 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' %}
|
{% 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 %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
|
|
|
@ -70,140 +70,7 @@
|
||||||
{% if user %}
|
{% if user %}
|
||||||
<input type="hidden" id="token" value="{{ token }}">
|
<input type="hidden" id="token" value="{{ token }}">
|
||||||
<script>show_version();</script>
|
<script>show_version();</script>
|
||||||
<div class="top-menu">
|
{% include 'include/main_menu.html' %}
|
||||||
<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>
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h2>
|
<h2>
|
||||||
{% block h2 %}{% endblock %}
|
{% block h2 %}{% endblock %}
|
||||||
|
@ -224,44 +91,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</h2>
|
</h2>
|
||||||
{% if autorefresh %}
|
{% if autorefresh %}
|
||||||
<div class="auto-refresh-div">
|
{% include 'include/autorefresh_submenu.html' %}
|
||||||
<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>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<ul id='browse_history'></ul>
|
<ul id='browse_history'></ul>
|
||||||
{% if role %}
|
{% if role %}
|
||||||
|
@ -278,7 +108,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="show-updates" style="display: none;">
|
<div id="show-updates" style="display: none;">
|
||||||
<div>
|
<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>
|
</div>
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -203,7 +203,7 @@
|
||||||
<input type="hidden" id="server-name-{{s.0}}" value="{{s.1}}" />
|
<input type="hidden" id="server-name-{{s.0}}" value="{{s.1}}" />
|
||||||
<input type="hidden" id="service" value="{{service}}" />
|
<input type="hidden" id="service" value="{{service}}" />
|
||||||
{% if not serv %}
|
{% 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 %}
|
{% else %}
|
||||||
{{s.1}}
|
{{s.1}}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -249,7 +249,7 @@
|
||||||
<a id="stop-{{ s.2 }}" class="stop" title="{{lang.words.stop|title()}} {{service}} {{lang.words.service}}">
|
<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>
|
<span class="service-stop" onclick="confirmAjaxAction('stop', '{{service}}', '{{s.2}}')"></span>
|
||||||
</a>
|
</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' %}
|
{% if service != 'keepalived' %}
|
||||||
<span class="menu-bar" onclick="serverSettings('{{s.0}}', '{{s.1}}')" title="{{lang.words.edit|title()}} {{lang.words.settings}} {{s.1}}"></span>
|
<span class="menu-bar" onclick="serverSettings('{{s.0}}', '{{s.1}}')" title="{{lang.words.edit|title()}} {{lang.words.settings}} {{s.1}}"></span>
|
||||||
{% endif %}
|
{% 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>
|
<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 %}
|
{% endif %}
|
||||||
{% if service != 'keepalived' %}
|
{% 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 %}
|
{% 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 %}
|
{% 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 %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -866,11 +866,13 @@ $( function() {
|
||||||
$('#0').css("display", "inline");
|
$('#0').css("display", "inline");
|
||||||
});
|
});
|
||||||
$('#auth').submit(function() {
|
$('#auth').submit(function() {
|
||||||
|
var next_url = findGetParameter('next');
|
||||||
$.ajax( {
|
$.ajax( {
|
||||||
url: "/app/login",
|
url: "/app/login",
|
||||||
data: {
|
data: {
|
||||||
login: $('#login').val(),
|
login: $('#login').val(),
|
||||||
pass: $('#pass').val()
|
pass: $('#pass').val(),
|
||||||
|
next: next_url
|
||||||
},
|
},
|
||||||
type: "POST",
|
type: "POST",
|
||||||
success: function( data ) {
|
success: function( data ) {
|
||||||
|
|
Loading…
Reference in New Issue