mirror of https://github.com/Aidaho12/haproxy-wi
parent
ab93673f2a
commit
28eaa9d940
|
@ -41,14 +41,21 @@ def checkAjaxInput(ajax_input: str):
|
|||
return quote(ajax_input.rstrip())
|
||||
|
||||
|
||||
def return_nice_path(return_path: str) -> str:
|
||||
def check_is_service_folder(service_path: str) -> bool:
|
||||
if (
|
||||
'nginx' not in return_path
|
||||
and 'haproxy' not in return_path
|
||||
and 'apache2' not in return_path
|
||||
and 'httpd' not in return_path
|
||||
and 'keepalived' not in return_path
|
||||
):
|
||||
'nginx' not in service_path
|
||||
and 'haproxy' not in service_path
|
||||
and 'apache2' not in service_path
|
||||
and 'httpd' not in service_path
|
||||
and 'keepalived' not in service_path
|
||||
) or '..' in service_path:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
def return_nice_path(return_path: str) -> str:
|
||||
if not check_is_service_folder(return_path):
|
||||
return 'error: The path must contain the name of the service. Check it in Roxy-WI settings'
|
||||
|
||||
if return_path[-1] != '/':
|
||||
|
@ -57,6 +64,14 @@ def return_nice_path(return_path: str) -> str:
|
|||
return return_path
|
||||
|
||||
|
||||
def check_is_conf(config_path: str) -> bool:
|
||||
if check_is_service_folder(config_path):
|
||||
if 'conf' in config_path or 'cfg' in config_path:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def string_to_dict(dict_string) -> dict:
|
||||
from ast import literal_eval
|
||||
return literal_eval(dict_string)
|
||||
|
|
|
@ -34,8 +34,8 @@ def get_config(server_ip, cfg, **kwargs):
|
|||
else:
|
||||
config_path = sql.get_setting('haproxy_config_path')
|
||||
|
||||
if '..' in config_path:
|
||||
return 'error: nice try'
|
||||
if not common.check_is_conf(config_path):
|
||||
raise Exception('error: nice try 2')
|
||||
|
||||
try:
|
||||
with mod_ssh.ssh_connect(server_ip) as ssh:
|
||||
|
@ -451,14 +451,11 @@ def show_config(server_ip: str) -> None:
|
|||
|
||||
if form.getvalue('configver') is None:
|
||||
cfg = f"{configs_dir}{server_ip}-{get_date.return_date('config')}{cfg}"
|
||||
if service == 'nginx':
|
||||
get_config(server_ip, cfg, nginx=1, config_file_name=form.getvalue('config_file_name'))
|
||||
elif service == 'apache':
|
||||
get_config(server_ip, cfg, apache=1, config_file_name=form.getvalue('config_file_name'))
|
||||
elif service == 'keepalived':
|
||||
get_config(server_ip, cfg, keepalived=1)
|
||||
else:
|
||||
get_config(server_ip, cfg)
|
||||
try:
|
||||
get_config(server_ip, cfg, service=service, config_file_name=form.getvalue('config_file_name'))
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return
|
||||
else:
|
||||
cfg = configs_dir + form.getvalue('configver')
|
||||
try:
|
||||
|
|
|
@ -697,7 +697,7 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr style="width: 50%;">
|
||||
<td class="first-collumn" valign="top" style="padding-top: 15px;">
|
||||
<td class="first-collumn padding10" valign="top" style="padding-top: 15px;">
|
||||
<select required id="serv4">
|
||||
<option disabled selected>------</option>
|
||||
{% for select in selects %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<link href="/inc/css/table.css" rel="stylesheet" type="text/css">
|
||||
<link href="/inc/css/table-6.3.9.css" rel="stylesheet" type="text/css">
|
||||
<script type="text/javascript" charset="utf8" src="/inc/dataTables.min.js"></script>
|
||||
{% if action == "history" %}
|
||||
{% set column_for_sort = 4 %}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
{% if selects|length == 0 %}
|
||||
{% include 'include/getstarted.html' %}
|
||||
{% else %}
|
||||
<link href="/inc/css/table.css" rel="stylesheet" type="text/css">
|
||||
<link href="/inc/css/table-6.3.9.css" rel="stylesheet" type="text/css">
|
||||
<script type="text/javascript" charset="utf8" src="/inc/dataTables.min.js"></script>
|
||||
<p>
|
||||
<form action="{{ action }}" method="post" class="left-space">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<link href="/inc/css/table.css" rel="stylesheet" type="text/css">
|
||||
<link href="/inc/css/table-6.3.9.css" rel="stylesheet" type="text/css">
|
||||
<script type="text/javascript" charset="utf8" src="/inc/dataTables.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
|
|
@ -10,16 +10,16 @@
|
|||
"link": "Обзор",
|
||||
"h2": "Обзор сервисов",
|
||||
"haproxy": {
|
||||
"title": "Обзор HAProxy серверов"
|
||||
"title": "Обзор HAProxy-серверов"
|
||||
},
|
||||
"nginx": {
|
||||
"title": "Обзор NGINX серверов"
|
||||
"title": "Обзор NGINX-серверов"
|
||||
},
|
||||
"apache": {
|
||||
"title": "Обзор Apache серверов"
|
||||
"title": "Обзор Apache-серверов"
|
||||
},
|
||||
"keepalived": {
|
||||
"title": "Обзор Keepalived серверов"
|
||||
"title": "Обзор Keepalived-серверов"
|
||||
},
|
||||
},
|
||||
"config": {
|
||||
|
@ -67,7 +67,7 @@
|
|||
},
|
||||
"ssl": {
|
||||
"link": "SSL",
|
||||
"title": "Добавить прокси: Загрузить SSL сертификат"
|
||||
"title": "Добавить прокси: Загрузить SSL-сертификат"
|
||||
},
|
||||
"lists": {
|
||||
"link": "Листы",
|
||||
|
@ -128,18 +128,18 @@
|
|||
"cannot_get_info": "Не возможно получить информацию о",
|
||||
"something_wrong": "Что-то пошло не так",
|
||||
"check_logs": "проверти логи",
|
||||
"select_server": "Выберете в начале сервер",
|
||||
"empty_name": "Имя не может быть пустым",
|
||||
"select_server": "Сначала выберите сервер",
|
||||
"empty_name": "Поле имя не может быть пустым",
|
||||
}
|
||||
%}
|
||||
{% set settings = {
|
||||
"rabbitmq": {
|
||||
"rabbitmq_host": "RabbitMQ-server сервер",
|
||||
"rabbitmq_port": "RabbitMQ-server порт",
|
||||
"rabbitmq_vhost": "RabbitMQ-server vhost",
|
||||
"rabbitmq_queue": "RabbitMQ-server очередь",
|
||||
"rabbitmq_user": "RabbitMQ-server пользователь",
|
||||
"rabbitmq_password": "RabbitMQ-server пароль",
|
||||
"rabbitmq_host": "Адрес сервера RabbitMQ",
|
||||
"rabbitmq_port": "Порт сервера RabbitMQ",
|
||||
"rabbitmq_vhost": "Виртуальный хост RabbitMQ",
|
||||
"rabbitmq_queue": "Имя очереди RabbitMQ",
|
||||
"rabbitmq_user": "Имя пользователя RabbitMQ",
|
||||
"rabbitmq_password": "Пароль пользователя RabbitMQ",
|
||||
},
|
||||
"nginx": {
|
||||
"nginx_path_logs": "Путь до лог файлов NGINX",
|
||||
|
@ -159,49 +159,49 @@
|
|||
"checker_keep_history_range": "Время хранения истории Checker",
|
||||
"checker_maxconn_threshold": "Время хранения истории Port scanner",
|
||||
"checker_check_interval": "Порог срабатывания уведомления по maxconn, в %",
|
||||
"smon_ssl_expire_warning_alert": "Предупреждение о истечении SSL сертификата (в днях)",
|
||||
"smon_ssl_expire_critical_alert": "Критическое предупреждение о истечении SSL сертификата (в днях)",
|
||||
"smon_ssl_expire_warning_alert": "Предупреждение о истечении SSL-сертификата (в днях)",
|
||||
"smon_ssl_expire_critical_alert": "Критическое предупреждение о истечении SSL-сертификата (в днях)",
|
||||
},
|
||||
"main": {
|
||||
"time_zone": "Временная зона",
|
||||
"proxy": "IP адрес и порт прокси сервера. Формат: proto://ip:port",
|
||||
"proxy": "IP-адрес и порт прокси сервера. Формат: proto://ip:port",
|
||||
"session_ttl": "Время жизни пользовательских сессий (в днях)",
|
||||
"token_ttl": "Время жизни пользовательских токенов (в днях)",
|
||||
"tmp_config_path": "Путь до временной директории. Путь должен существовать. Директория должна принадлежать пользователю от имени которого подключается SSH",
|
||||
"cert_path": "Путь до SSL директории. Путь должен существовать. Директория должна принадлежать пользователю от имени которого подключается SSH",
|
||||
"ssl_local_path": "Локальный путь для хранения SSL сертификатов. Данный путь относительный от $HOME_ROXY_WI/app/",
|
||||
"lists_path": "Локальный путь для хранения black и white листов. Данный путь относительный от $HOME_ROXY-WI",
|
||||
"tmp_config_path": "Путь до временной директории. Путь должен существовать. Директория должна принадлежать пользователю, от имени которого подключается SSH",
|
||||
"cert_path": "Путь до SSL-директории. Путь должен существовать. Директория должна принадлежать пользователю, от имени которого подключается SSH",
|
||||
"ssl_local_path": "Локальный путь для хранения SSL-сертификатов. Укажите относительный путь от $HOME_ROXY_WI/app/",
|
||||
"lists_path": "Локальный путь для хранения черных и белых списков. Укажите относительный путь от $HOME_ROXY-WI",
|
||||
"maxmind_key": "Лицензионный ключ для загрузки GeoLite2 DB. Создается на сайте maxmind.com",
|
||||
},
|
||||
"mail": {
|
||||
"mail_ssl": "Включить TLS",
|
||||
"mail_from": "Адрес отправителя",
|
||||
"mail_smtp_host": "Адрес SMTP сервера",
|
||||
"mail_smtp_port": "Порт SMTP сервера",
|
||||
"mail_smtp_host": "Адрес SMTP-сервера",
|
||||
"mail_smtp_port": "Порт SMTP-сервера",
|
||||
"mail_smtp_user": "Имя пользователя",
|
||||
"mail_smtp_password": "Пароль",
|
||||
},
|
||||
"logs": {
|
||||
"syslog_server_enable": "Включение получение логов из syslog сервера",
|
||||
"syslog_server": "IP адрес syslog сервера",
|
||||
"log_time_storage": "Время хранение лог файлов пользовательской активности (в днях)",
|
||||
"syslog_server_enable": "Включение получение логов из syslog-сервера",
|
||||
"syslog_server": "IP-адрес syslog-сервера",
|
||||
"log_time_storage": "Срок хранения логов пользовательской активности (в днях)",
|
||||
"apache_log_path": "Путь до лог файлов Apache сервера",
|
||||
},
|
||||
"ldap": {
|
||||
"ldap_enable": "LDAP включен",
|
||||
"ldap_server": "IP адрес LDAP сервера",
|
||||
"ldap_port": "LDAP порт (порт 389 или 636 используются по умолчанию)",
|
||||
"ldap_user": "LDAP имя пользователя",
|
||||
"ldap_password": "LDAP пароль",
|
||||
"ldap_server": "IP-адрес сервера LDAP",
|
||||
"ldap_port": "Порт сервера LDAP (порт 389 или 636 используются по умолчанию)",
|
||||
"ldap_user": "Имя пользователя LDAP",
|
||||
"ldap_password": "Пароль LDAP",
|
||||
"ldap_base": "Базовый домен. Пример: dc=domain, dc=com",
|
||||
"ldap_domain": "LDAP домен для входа",
|
||||
"ldap_domain": "Домен для входа",
|
||||
"ldap_class_search": "Класс для поиска пользователя",
|
||||
"ldap_user_attribute": "Атрибут для поиска пользователей",
|
||||
"ldap_search_field": "Почта пользователя",
|
||||
"ldap_type": "Использовать LDAPS",
|
||||
},
|
||||
"haproxy": {
|
||||
"haproxy_path_logs": "Путь до лог файлов HAProxy",
|
||||
"haproxy_path_logs": "Путь до логов HAProxy",
|
||||
"stats_user": "Пользователь для входа на страницу статистики HAProxy",
|
||||
"stats_password": "Пароль для входа на страницу статистики HAProxy",
|
||||
"stats_port": "Порт для доступа на страницу статистики HAProxy",
|
||||
|
@ -283,7 +283,7 @@
|
|||
"roll_back": "Откатиться к ним, просмотреть или удалить",
|
||||
"files_been_deleted": "Следующие файлы были удалены",
|
||||
"version_has_been_uploaded": "Данная версия была загружена и сохранена как",
|
||||
"new_config_has_been_saved": "A new config has been saved as",
|
||||
"new_config_has_been_saved": "Новый конфиг сохранен под именем",
|
||||
"view_and_upload": "Просмотр и загрузка этой версии конфига",
|
||||
"int_vrrp": "Интерфейс для VRRP на сервере",
|
||||
"howto_ha": "Как создать кластер высокой доступности",
|
||||
|
@ -385,7 +385,7 @@
|
|||
"disable_ssl_check": "Отключить проверку SSL",
|
||||
"disable_ssl_verify": "Отключить проверку SSL на серверах",
|
||||
"set_options": "Задать параметры",
|
||||
"set_options_m": "Задать параметры в ручную",
|
||||
"set_options_m": "Задать параметры вручную",
|
||||
"show_full_settings": "Показать полный список настроек",
|
||||
"show_full_settings": "Скрыть полный список настроек",
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{% block h2 %}Runtime API{% endblock %}
|
||||
{% block content %}
|
||||
{% from 'include/input_macros.html' import input, checkbox %}
|
||||
<link href="/inc/css/table.css" rel="stylesheet" type="text/css">
|
||||
<link href="/inc/css/table-6.3.9.css" rel="stylesheet" type="text/css">
|
||||
<script type="text/javascript" charset="utf8" src="/inc/dataTables.min.js"></script>
|
||||
<script type="text/javascript" charset="utf8" src="/inc/runtimeapi.js"></script>
|
||||
<div id="tabs">
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
</table>
|
||||
</div>
|
||||
{% elif waf_rule_file %}
|
||||
<center>
|
||||
<div class="left-space">
|
||||
<link rel="stylesheet" href="/inc/codemirror/lib/codemirror.css">
|
||||
<link rel="stylesheet" href="/inc/codemirror/addon/dialog/dialog.css">
|
||||
<link rel="stylesheet" href="/inc/codemirror/addon/fold/foldgutter.css">
|
||||
|
@ -72,30 +72,28 @@
|
|||
<script src="/inc/codemirror/keymap/sublime.js"></script>
|
||||
<script src="/inc/configshow.js"></script>
|
||||
<h4>{{lang.words.config|title()}} {{waf_rule_file}} {{lang.words.from|title()}} {{ serv }}</h4>
|
||||
</center>
|
||||
<form action="waf.py" name="saveconfig" id="saveconfig" method="post">
|
||||
<input type="hidden" value="{{ serv }}" name="serv">
|
||||
<input type="hidden" value="{{ cfg }}.old" name="oldconfig">
|
||||
<input type="hidden" value="{{ token }}" name="token">
|
||||
<input type="hidden" value="waf_{{ service }}" name="service">
|
||||
<input type="hidden" value="{{ config_file_name }}" name="config_file_name">
|
||||
<div style="margin-left: 20%;width: 60%;">
|
||||
<div style="width: 95%;">
|
||||
<textarea name="config" id="config_text_area" class="config" rows="35" cols="100">{{ config }}</textarea>
|
||||
</div>
|
||||
<p>
|
||||
<center>
|
||||
<a href="waf.py?manage_rules=1&serv={{serv}}" class="ui-button ui-widget ui-corner-all" title="Return to rules management">{{lang.words.back|title()}}</a>
|
||||
{% if role <= 3 %}
|
||||
<button type="submit" value="save" name="save" class="btn btn-default" title="{{lang.words.save|title()}} {{lang.words.without}} {{lang.words.reloading}}">{{lang.words.save|title()}}</button>
|
||||
{% if service == 'haproxy' %}
|
||||
<button type="submit" value="" name="" class="btn btn-default">{{lang.phrases.save_and_restart}}</button>
|
||||
{% elif service == 'nginx' %}
|
||||
<button type="submit" value="" name="reload" class="btn btn-default">{{lang.phrases.save_and_reload}}</button>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</center>
|
||||
<a href="waf.py?manage_rules=1&serv={{serv}}" class="ui-button ui-widget ui-corner-all" title="Return to rules management">{{lang.words.back|title()}}</a>
|
||||
{% if role <= 3 %}
|
||||
<button type="submit" value="save" name="save" class="btn btn-default" title="{{lang.words.save|title()}} {{lang.words.without}} {{lang.words.reloading}}">{{lang.words.save|title()}}</button>
|
||||
{% if service == 'haproxy' %}
|
||||
<button type="submit" value="" name="" class="btn btn-default">{{lang.phrases.save_and_restart}}</button>
|
||||
{% elif service == 'nginx' %}
|
||||
<button type="submit" value="" name="reload" class="btn btn-default">{{lang.phrases.save_and_reload}}</button>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
<style>
|
||||
.CodeMirror {
|
||||
line-height: 1.2em;
|
||||
|
@ -132,15 +130,15 @@
|
|||
</style>
|
||||
<script>
|
||||
$("#secIntervals").css("display", "none");
|
||||
var ip = []
|
||||
var hostnamea = []
|
||||
{%- for s in servers_all %}
|
||||
{% if service == 'haproxy '%}
|
||||
{% set service_in_table = s.15 %}
|
||||
{% else %}
|
||||
{% set service_in_table = s.14 %}
|
||||
{% endif %}
|
||||
{% if service_in_table|int() == 1 %}
|
||||
var ip = [];
|
||||
var hostnamea = [];
|
||||
{% for s in servers_all %}
|
||||
{%- if service == 'haproxy' -%}
|
||||
{%- set service_in_table = s.15 -%}
|
||||
{%- else -%}
|
||||
{% set service_in_table = s.14 -%}
|
||||
{%- endif -%}
|
||||
{%- if service_in_table|int() == 1 -%}
|
||||
ip.push("{{ s[2] }}");
|
||||
var host = "{{s[2]}}";
|
||||
host = host.replace(/\./g, '\\.');
|
||||
|
@ -172,7 +170,7 @@
|
|||
{% endfor %}
|
||||
</table>
|
||||
{% if service == 'haproxy' %}
|
||||
<link href="/inc/chart.min.css" rel="stylesheet">
|
||||
<link href="/inc/css/chart.min.css" rel="stylesheet">
|
||||
<script src="/inc/overview-6.3.9.js"></script>
|
||||
<script src="/inc/metrics.js"></script>
|
||||
<script src="/inc/chart.min.js"></script>
|
||||
|
|
|
@ -574,7 +574,7 @@ function keepalivedBecameMaster(serv) {
|
|||
data = data.replace(/\s+/g,' ');
|
||||
if (data.indexOf('error:') != '-1') {
|
||||
toastr.error(data);
|
||||
} else if (data.indexOf('no such') != '-1') {
|
||||
} else if (data.indexOf('No such') != '-1') {
|
||||
$("#bin_bout").html('Cannot get information');
|
||||
} else {
|
||||
$("#bin_bout").html(data);
|
||||
|
|
Loading…
Reference in New Issue