Pavel Loginov 2020-08-07 17:14:59 +02:00
parent e89b8b04d4
commit eabc02e234
13 changed files with 620 additions and 635 deletions

View File

@ -31,10 +31,11 @@ output_from_parsed_template = template.render(title = "Servers: ",
masters = sql.select_servers(get_master_servers=1, uuid=user_id.value),
group = user_group,
sshs = sql.select_ssh(),
telegrams = sql.get_user_telegram_by_uuid(user_id.value),
telegrams = sql.get_user_telegram_by_group(user_group),
token = token,
versions = funct.versions(),
backups = sql.select_backups(),
grafana = ''.join(grafana),
page = "servers.py",
ldap_enable = ldap_enable)
print(output_from_parsed_template)

View File

@ -28,11 +28,11 @@
<thead>
<tr class="overviewHead">
<th class="padding10 first-collumn">Login name</th>
<th>Password</th>
<th>Active</th>
<th>Email</th>
<th>Role</th>
<th>Group</th>
<th style="width: 10%">Password</th>
<th style="width: 10%">Active</th>
<th style="width: 20%">Email</th>
<th style="width: 10%">Role</th>
<th style="width: 100%">Group</th>
<th></th>
<th></th>
</tr>
@ -74,7 +74,7 @@
<thead>
<tr class="overviewHead">
<th class="padding10 first-collumn">Name</th>
<th>Description</th>
<th style="width: 100%;">Description</th>
<th></th>
</tr>
<tbody>
@ -107,24 +107,6 @@
</table>
<br /><span class="add-button" title="Add group" id="add-group-button">+ Add</span>
<br /><br />
<table class="overview" id="group-add-table" style="display: none;">
<tr class="overviewHead">
<td class="padding10 first-collumn">New group name</td>
<td>Description</td>
<td></td>
</tr>
<tr>
<td class="padding10 first-collumn">
{{ input('new-group-add', autofocus='autofocus') }}
</td>
<td>
{{ input('new-desc', size="60") }}
</td>
<td>
<span class="add-admin" id="add-group" title="Add new group" style="cursor: pointer;"></span>
</td>
</tr>
</table>
<div class="add-note addName alert-info" style="width: inherit; margin-right: 15px;">
How to setup groups you can watch in this video <a href="https://haproxy-wi.org/description.py?description=setup" title="How to setup servers, group and SSH credentials" target="_blank">here</a>
</div>
@ -134,16 +116,20 @@
<thead>
<tr class="overviewHead">
<th class="padding10 first-collumn">Hostname</th>
<th class="ip-field">IP</th>
<th class="checkbox-head"><span title="SSH port">Port</span></th>
<th class="group-field">Group</th>
<th class="checkbox-head">Enabled</th>
<th class="checkbox-head"><span title="Vitrual IP, something like VRRP">Virt</span></th>
<th class="checkbox-head">HAProxy</th>
<th class="checkbox-head">Nginx</th>
<th class="slave-field"><span title="Actions with master config will automatically apply on slave">Slave for</span></th>
<th class="cred-field">Credentials</th>
<th>Description</th>
<th class="ip-field" style="width: 5%">IP</th>
<th class="checkbox-head" style="width: 5%"><span title="SSH port">Port</span></th>
<th class="group-field" style="width: 10%">Group</th>
<th class="checkbox-head" style="width: 5%">Enabled</th>
<th class="checkbox-head" style="width: 5%">
<span title="Virtual IP, something like VRRP">Virt</span>
</th>
<th class="checkbox-head" style="width: 5%">HAProxy</th>
<th class="checkbox-head" style="width: 5%">Nginx</th>
<th class="slave-field" style="width: 10%">
<span title="Actions with the master config will automatically apply on the slave">Slave for</span>
</th>
<th class="cred-field" style="width: 15%">Credentials</th>
<th style="width: 100%">Description</th>
<th></th>
<th></th>
</tr>
@ -197,8 +183,8 @@
<td class="padding10 first-collumn" style="width: 25%;">
<span title="If it is enabled, the key will be used, if turned off - the password. Do not forget to download the keys to all servers or install the sudo without a password">SSH key</span>
</td>
<td>Group</td>
<td>
<td style="width: 25%;">Group</td>
<td style="width: 100%;">
<span title="Enter SSH user name. If SSH key disabled, enter password for SSH user">Credentials</span>
</td>
<td></td>
@ -230,12 +216,12 @@
<td style="padding-top: 15px;">
<p>
{% set id = 'ssh_user-' + ssh.0|string() %}
{{ input(id, value=ssh.3, size='10') }}
{{ input(id, value=ssh.3, title='SSH user name') }}
</p>
{% if ssh.2 == 1 %}
<input type="password" id="ssh_pass-{{ssh.0}}" class="form-control" value="{{ssh.4}}" style="display: none;" autocomplete="new-password">
<input type="password" id="ssh_pass-{{ssh.0}}" class="form-control" placeholder="*****" style="display: none;" autocomplete="new-password">
{% else %}
<input type="password" id="ssh_pass-{{ssh.0}}" class="form-control" value="{{ssh.4}}" autocomplete="new-password">
<input type="password" id="ssh_pass-{{ssh.0}}" class="form-control" placeholder="*****" autocomplete="new-password">
{% endif %}
<br>
</td>
@ -247,40 +233,6 @@
</table>
<br /><span class="add-button" title="Add ssh" id="add-ssh-button">+ Add</span>
<br /><br />
<table class="overview" id="ssh-add-table" style="display: none;">
<tr class="overviewHead">
<td class="padding10 first-collumn" style="width: 15%;">Name</td>
<td class="padding10 first-collumn" style="width: 25%;">SSH key</td>
<td>Group</td>
<td>Credentials</td>
<td></td>
</tr>
<tr>
<td class="padding10 first-collumn">
{{ input('new-ssh-add', size='10', autofocus='autofocus') }}
</td>
<td class="first-collumn" valign="top" style="padding-top: 15px;">
<label for="new-ssh_enable">Enable SSH key</label><input type="checkbox" id="new-ssh_enable" checked>
</td>
<td>
<select id="new-sshgroup" name="new-sshgroup">
{% for group in groups %}
<option value="{{ group.0 }}">{{ group.1 }}</option>
{% endfor %}
</select>
</td>
<td style="padding-top: 15px;">
<p style="width: 100px;">
{{ input('ssh_user', value=ssh_user) }}
</p>
{{ input('ssh_pass', type='password', value=ssh_pass, style="display: none;") }}
<br>
</td>
<td>
<span class="add-admin" id="add-ssh" title="Add new SSH credentials" style="cursor: pointer;"></span>
</td>
</tr>
</table>
<table id="ssh_key">
<tr class="overviewHead" style="width: 50%;">
<td class="padding10 first-collumn" style="width: 25%;">Upload SSH Key</td>
@ -318,8 +270,8 @@
<td class="padding10 first-collumn" style="width: 25%;">
<span title="Token that gave you @father_bot">Token</span>
</td>
<td>Channel name</td>
<td>Group</td>
<td style="width: 25%;">Channel name</td>
<td style="width: 100%;">Group</td>
<td></td>
<td></td>
</tr>
@ -327,7 +279,7 @@
<tr id="telegram-table-{{telegram.0}}" class="{{ loop.cycle('odd', 'even') }}">
<td class="padding10 first-collumn">
{% set id = 'telegram-token-' + telegram.0|string() %}
{{ input(id, value=telegram.1) }}
{{ input(id, value=telegram.1, size='30') }}
</td>
<td>
{% set id = 'telegram-chanel-' + telegram.0|string() %}
@ -356,37 +308,6 @@
</table>
<br /><span class="add-button" title="Add telegram channel" id="add-telegram-button">+ Add</span>
<br /><br />
<table class="overview" id="telegram-add-table" style="display: none;">
<tr class="overviewHead">
<td class="padding10 first-collumn" style="width: 25%;">
<span title="Token that gave you @father_bot">Token</span>
</td>
<td>Chanel name</td>
<td>Group</td>
<td></td>
<td></td>
</tr>
<tr>
<td class="padding10 first-collumn">
{{ input('telegram-token-add') }}
</td>
<td>
{{ input('telegram-chanel-add') }}
</td>
<td>
<select id="new-telegram-group-add" name="new-telegram-group-add">
<option disabled selected value="0">Choose group</option>
{% for group in groups %}
<option value="{{ group.0 }}">{{ group.1 }}</option>
{% endfor %}
</select>
</td>
<td></td>
<td>
<span class="add-admin" id="add-telegram" title="Add new Telegram channel" style="cursor: pointer;"></span>
</td>
</tr>
</table>
<div id="ajax-telegram"></div>
<div class="add-note addName alert-info" style="width: inherit; margin-right: 15px;">
You can read the description of all parameters <a href="https://haproxy-wi.org/description.py?description=checker" title="Servers description" target="_blank">here</a>
@ -419,9 +340,9 @@
<td class="addOption">
{% if set.0 == 'ldap_password' %}
{% if set.1 == 'None' %}
<input type="password" name="{{set.0}}" id="{{set.0}}" value="" title="" size="25" class="form-control">
<input type="password" name="{{set.0}}" id="{{set.0}}" value="" title="" size="25" class="form-control" autocomplete="new-password">
{% else %}
<input type="password" name="{{set.0}}" id="{{set.0}}" value="{{set.1}}" title="" size="25" class="form-control">
<input type="password" name="{{set.0}}" id="{{set.0}}" value="" placeholder="*****" title="" size="25" class="form-control" autocomplete="new-password">
{% endif %}
{% else %}
{% if set.1 == 'None' %}
@ -547,109 +468,12 @@
You can read the description of all parameters <a href="https://haproxy-wi.org/description.py?description=backup" title="Backup description" target="_blank">here</a>
</div>
</div>
</div>
<div id="user-add-table" style="display: none;">
<table class="overview">
{% include 'include/admin_add_user.html' %}
<tr>
<td class="padding20">
Role
<span class="need-field">*</span>
</td>
<td>
<select id="new-role" name="new-role">
<option disabled selected>Choose role</option>
{% for role in roles %}
<option value="{{ role.1 }}">{{ role.1 }}</option>
{% endfor %}
</select>
</td>
</tr>
<tr>
<td class="padding20">
Group
<span class="need-field">*</span>
</td>
<td>
<select id="new-group" name="new-group">
<option disabled selected>Choose group</option>
{% for group in groups %}
<option value="{{ group.0 }}">{{ group.1 }}</option>
{% endfor %}
</select>
</td>
</tr>
</table>
</div>
<div id="server-add-table" title="Add a new server " style="display: none;">
<table class="overview">
{% include 'include/admin_add_server.html' %}
<tr>
<td class="padding20">
Credentials
<span class="need-field">*</span>
</td>
<td>
<select id="credentials" required>
<option disabled selected>Choose credentials</option>
{% for ssh in sshs %}
<option value="{{ssh.0}}">{{ssh.1}}</option>
{% endfor %}
</select>
</td>
</tr>
<tr>
<td class="padding20">
Group
<span class="need-field">*</span>
</td>
<td>
<select id="new-server-group-add" name="new-server-group-add">
<option disabled selected value="0">Choose group</option>
{% for group in groups %}
<option value="{{ group.0 }}">{{ group.1 }}</option>
{% endfor %}
</select>
</td>
</tr>
</table>
</div>
<div id="backup-add-table" title="Add a new backup job " style="display: none;">
<table class="overview">
{% include 'include/add_backup.html' %}
<tr>
<td class="padding20">
Credentials for remote server
<span class="need-field">*</span>
</td>
<td>
<select id="backup-credentials" required>
<option disabled selected>Choose credentials</option>
{% for ssh in sshs %}
<option value="{{ssh.0}}">{{ssh.1}}</option>
{% endfor %}
</select>
</td>
</tr>
<tr>
<td class="padding20">
Description
</td>
<td>
{{ input('backup-description', size='30') }}
</td>
</tr>
</table>
</div>
{% include 'include/admins_dialogs.html' %}
{% include 'include/change_pass_form.html' %}
<div id="change-user-groups-dialog" style="display: none;">
<div id="change-user-groups-form"></div>
</div>
<div id="dialog-confirm-services" style="display: none;">
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:3px 12px 20px 0;"></span>Are you sure?</p>
</div>
<style>
.ui-selectmenu-button.ui-button {
width: 10em;

View File

@ -4,10 +4,14 @@
<input type="text" id="name-{{ group.0 }}" value="{{ group.1 }}" class="form-control">
</td>
<td style="width: 100%;">
{% if group.2 != 'None' %}
<input type="text" id="descript-{{ group.0 }}" value="{{ group.2 }}" class="form-control" size="60">
{% else %}
<input type="text" id="descript-{{ group.0 }}" class="form-control" size="60">
{% endif %}
</td>
<td>
<a class="delete" onclick="removeGroup({{ group.0 }})" style="cursor: pointer;"></a>
<a class="delete" onclick="confirmDeleteGroup({{ group.0 }})" style="cursor: pointer;"></a>
</td>
</tr>
{% endfor %}

View File

@ -1,5 +1,5 @@
{% for ssh in sshs %}
<tr style="width: 50%;" id="ssh-table-{{ssh.0}}">
<tr style="width: 50%;" id="ssh-table-{{ssh.0}}" class="ssh-table-{{ssh.0}}">
<td class="first-collumn">
<input type="text" id="ssh_name-{{ssh.0}}" class="form-control" value="{{ssh.1}}" style="margin-bottom: 23px;">
</td>

View File

@ -1,7 +1,7 @@
{% for telegram in telegrams %}
<tr style="width: 50%;" id="telegram-table-{{telegram.0}}" class="newgroup">
<td class="first-collumn" style="padding-top: 15px;">
<input type="text" id="telegram-token-{{telegram.0}}" class="form-control" value="{{telegram.1}}" style="margin-bottom: 23px;">
<td class="padding10 first-collumn">
<input type="text" id="telegram-token-{{telegram.0}}" class="form-control" value="{{telegram.1}}">
<input type="hidden" id="telegramgroup-{{telegram.0}}" name="telegramgroup-{{telegram.0}}">
</td>
<td>
@ -20,6 +20,9 @@
</select>
</td>
{% endif %}
<td>
<a class="add" onclick="cloneTelegram({{telegram.0}})" id="clone-{{telegram.0}}" title="Clone {{telegram.2}}" style="cursor: pointer;"></a>
</td>
<td>
<a class="delete" onclick="confirmDeleteTelegram({{telegram.0}})" style="cursor: pointer;"></a>
</td>

View File

@ -1,11 +1,4 @@
{% from 'include/input_macros.html' import input, checkbox %}
<tr>
<td colspan="2">
<p class="validateTips alert alert-success">
Form fields tag "<span class="need-field">*</span>" are required.
</p>
</td>
</tr>
<tr>
<td class="padding20">
New hostname

View File

@ -1,11 +1,4 @@
{% from 'include/input_macros.html' import input, checkbox %}
<tr>
<td colspan="2">
<p class="validateTips alert alert-success">
Form fields tag "<span class="need-field">*</span>" are required.
</p>
</td>
</tr>
<tr>
<td class="padding20">
New user

View File

@ -0,0 +1,222 @@
{% if page != "servers.py" %}
<div id="user-add-table" style="display: none;">
<table class="overview">
{% include 'include/tr_validate_tips.html' %}
{% include 'include/admin_add_user.html' %}
<tr>
<td class="padding20">
Role
<span class="need-field">*</span>
</td>
<td>
<select id="new-role" name="new-role">
<option disabled selected>Choose role</option>
{% for role in roles %}
<option value="{{ role.1 }}">{{ role.1 }}</option>
{% endfor %}
</select>
</td>
</tr>
<tr>
<td class="padding20">
Group
<span class="need-field">*</span>
</td>
<td>
<select id="new-group" name="new-group">
<option disabled selected>Choose group</option>
{% for group in groups %}
<option value="{{ group.0 }}">{{ group.1 }}</option>
{% endfor %}
</select>
</td>
</tr>
</table>
</div>
<div id="group-add-table" style="display: none;">
<table class="overview">
{% include 'include/tr_validate_tips.html' %}
<tr>
<td class="padding20">
New group name
<span class="need-field">*</span>
</td>
<td>
{{ input('new-group-add', autofocus='autofocus') }}
</td>
</tr>
<td class="padding20">Description</td>
<td>{{ input('new-desc', size="40") }}</td>
</tr>
</table>
</div>
{% else %}
<div id="user-add-table" style="display: none;">
<table class="overview">
{% include 'include/tr_validate_tips.html' %}
{% include 'include/admin_add_user.html' %}
<td class="padding20">
Role
<span class="need-field">*</span>
</td>
<td>
<select id="new-role" name="new-role">
<option disabled selected>Choose role</option>
{% for role in roles %}
{% if role.1 != "admin" %}
<option value="{{ role.1 }}">{{ role.1 }}</option>
{% endif %}
{% endfor %}
</select>
</td>
</tr>
</table>
</div>
{% endif %}
<div id="server-add-table" title="Add a new server " style="display: none;">
<table class="overview">
{% include 'include/tr_validate_tips.html' %}
{% include 'include/admin_add_server.html' %}
<tr>
<td class="padding20">
Credentials
<span class="need-field">*</span>
</td>
<td>
<select id="credentials" required>
<option disabled selected>Choose credentials</option>
{% for ssh in sshs %}
<option value="{{ssh.0}}">{{ssh.1}}</option>
{% endfor %}
</select>
</td>
</tr>
{% if page != "servers.py" %}
<tr>
<td class="padding20">
Group
<span class="need-field">*</span>
</td>
<td>
<select id="new-server-group-add" name="new-server-group-add">
<option disabled selected value="0">Choose group</option>
{% for group in groups %}
<option value="{{ group.0 }}">{{ group.1 }}</option>
{% endfor %}
</select>
</td>
</tr>
{% endif %}
</table>
</div>
<div id="ssh-add-table" style="display: none;">
<table>
{% include 'include/tr_validate_tips.html' %}
<tr>
<td class="padding20">
Name
<span class="need-field">*</span>
</td>
<td>
{{ input('new-ssh-add', autofocus='autofocus') }}
</td>
</tr>
<tr>
<td class="padding20">SSH key</td>
<td>
<label for="new-ssh_enable">Enabled SSH key</label><input type="checkbox" id="new-ssh_enable" checked>
</td>
</tr>
{% if page != "servers.py" %}
<tr>
<td class="padding20">Group</td>
<td>
<select id="new-sshgroup" name="new-sshgroup">
{% for group in groups %}
<option value="{{ group.0 }}">{{ group.1 }}</option>
{% endfor %}
</select>
</td>
</tr>
{% endif %}
<tr>
<td class="padding20">
Credentials
<span class="need-field">*</span>
</td>
<td>
<p style="width: 100px;">
{{ input('ssh_user', value=ssh_user, title='SSH user name') }}
</p>
{{ input('ssh_pass', type='password', style="display: none;", title='SSH password') }}
</td>
</tr>
</table>
</div>
<div id="telegram-add-table" style="display: none;">
<table>
{% include 'include/tr_validate_tips.html' %}
<tr>
<td class="padding20">
<span title="Token that gave you @father_bot">Token</span>
<span class="need-field">*</span>
</td>
<td>
{{ input('telegram-token-add', size='30') }}
</td>
</tr>
<tr>
<td class="padding20">
Channel name
<span class="need-field">*</span>
</td>
<td>
{{ input('telegram-chanel-add') }}
</td>
</tr>
{% if page != "servers.py" %}
<tr>
<td class="padding20">Group</td>
<td>
<select id="new-telegram-group-add" name="new-telegram-group-add">
<option disabled selected value="0">Choose group</option>
{% for group in groups %}
<option value="{{ group.0 }}">{{ group.1 }}</option>
{% endfor %}
</select>
</td>
</tr>
{% endif %}
</table>
</div>
<div id="backup-add-table" title="Add a new backup job " style="display: none;">
<table class="overview">
{% include 'include/tr_validate_tips.html' %}
{% include 'include/add_backup.html' %}
<tr>
<td class="padding20">
Credentials for remote server
<span class="need-field">*</span>
</td>
<td>
<select id="backup-credentials" required>
<option disabled selected>Choose credentials</option>
{% for ssh in sshs %}
<option value="{{ssh.0}}">{{ssh.1}}</option>
{% endfor %}
</select>
</td>
</tr>
<tr>
<td class="padding20">
Description
</td>
<td>
{{ input('backup-description', size='30') }}
</td>
</tr>
</table>
</div>
<div id="dialog-confirm-services" style="display: none;">
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:3px 12px 20px 0;"></span>Are you sure?</p>
</div>

View File

@ -0,0 +1,7 @@
<tr>
<td colspan="2">
<p class="validateTips alert alert-success">
Form fields tag "<span class="need-field">*</span>" are required.
</p>
</td>
</tr>

View File

@ -11,6 +11,7 @@
<input type="hidden" id="new-group" name="new-group" value="{{ group }}">
<input type="hidden" id="new-server-group-add" name="new-server-group-add" value="{{ group }}" >
<input type="hidden" id="new-sshgroup" name="new-sshgroup" value="{{ group }}" >
{{ input('new-telegram-group-add', type='hidden', value=group) }}
<div id="tabs">
<ul>
<li><a href="#users" title="Servers: Manage users - HAProxy-WI">Users</a></li>
@ -27,10 +28,10 @@
<table class="overview" id="ajax-users">
<tr class="overviewHead">
<td class="padding10 first-collumn">Login name</td>
<td>Password</td>
<td>Active</td>
<td>Email</td>
<td>Role</td>
<td style="width: 10%">Password</td>
<td style="width: 10%">Active</td>
<td style="width: 20%">Email</td>
<td style="width: 100%">Role</td>
<td></td>
<td></td>
</tr>
@ -68,24 +69,30 @@
<div id="servers">
<table class="overview" id="ajax-servers">
<tr class="overviewHead">
<td class="padding10 first-collumn">Hostname</td>
<td class="ip-field">IP</td>
<td class="checkbox-head"><span title="SSH port">Port</span></td></td>
<td class="checkbox-head">Enable</td>
<td class="checkbox-head"><span title="Vitrual IP, something like VRRP">Virt</span></td>
<th class="checkbox-head">HAProxy</th>
<th class="checkbox-head">Nginx</th>
<td class="slave-field"><span title="Actions with master config will automatically apply on slave">Slave for</span></td>
<td class="cred-field">Credentials</td>
<td>Description</td>
<td></td>
<td></td>
<th class="padding10 first-collumn" style="width: 15%">Hostname</th>
<th class="ip-field" style="width: 10%">IP</th>
<th class="checkbox-head" style="width: 5%">
<span title="SSH port">Port</span>
</th>
<th class="checkbox-head" style="width: 5%">Enable</th>
<th class="checkbox-head" style="width: 5%">
<span title="Virtual IP, something like VRRP">Virt</span>
</th>
<th class="checkbox-head" style="width: 5%">HAProxy</th>
<th class="checkbox-head" style="width: 5%">Nginx</th>
<th class="slave-field" style="width: 10%">
<span title="Actions with master config will automatically apply on slave">Slave for</span>
</th>
<th class="cred-field" style="width: 15%">Credentials</th>
<th style="width: 100%">Description</th>
<th></th>
<th></th>
</tr>
{% set ssh_group = [] %}
{% for server in servers %}
{% do ssh_group.append(server.3) %}
<tr id="server-{{server.0}}" class="{{ loop.cycle('odd', 'even') }}">
<td class="padding10 first-collumn">
<td class="padding10 first-collumn" style="width: 15%">
{% set id = 'hostname-' + server.0|string() %}
{{ input(id, value=server.1, size='10') }}
</td>
@ -119,7 +126,7 @@
<td class="padding10 first-collumn" style="width: 25%;">
<span title="If enabled, the key will be used, if turned off - the password. Do not forget to download the keys to all servers or install the sudo without a password">SSH key</span>
</td>
<td>
<td style="width: 100%;">
<span title="Enter SSH user name. If SSH key disabled, enter password for ssh user">Credentials</span>
</td>
<td></td>
@ -141,12 +148,12 @@
<td style="padding-top: 15px;">
<p>
{% set id = 'ssh_user-' + ssh.0|string() %}
{{ input(id, value=ssh.3) }}
{{ input(id, value=ssh.3, title='SSH user name') }}
</p>
{% if ssh.2 == 1 %}
<input type="password" id="ssh_pass-{{ssh.0}}" class="form-control" value="{{ssh.4}}" style="display: none;" autocomplete="off" />
<input type="password" id="ssh_pass-{{ssh.0}}" class="form-control" value="" placeholder="*****" style="display: none;" autocomplete="off" />
{% else %}
<input type="password" id="ssh_pass-{{ssh.0}}" class="form-control" value="{{ssh.4}}" autocomplete="off" />
<input type="password" id="ssh_pass-{{ssh.0}}" class="form-control" value="" placeholder="*****" autocomplete="off" />
{% endif %}
<br>
</td>
@ -159,32 +166,6 @@
</table>
<br /><span class="add-button" title="Add ssh" id="add-ssh-button">+ Add</span>
<br /><br />
<table class="overview" id="ssh-add-table" style="display: none;">
<tr class="overviewHead">
<td class="padding10 first-collumn" style="width: 15%;">Name</td>
<td class="padding10 first-collumn" style="width: 25%;">SSH key</td>
<td>Credentials</td>
<td></td>
</tr>
<tr>
<td class="padding10 first-collumn">
{{ input('new-ssh-add') }}
</td>
<td class="first-collumn">
<label for="new-ssh_enable">Enable SSH key</label><input type="checkbox" id="new-ssh_enable" checked>
</td>
<td style="padding-top: 15px;">
<p>
{{ input('ssh_user', value=ssh_user) }}
</p>
{{ input('ssh_pass', type='password', value=ssh_pass, style="display: none;") }}
<br>
</td>
<td>
<span class="add-admin" id="add-ssh" title="Add a new SSH credentials" style="cursor: pointer;"></span>
</td>
</tr>
</table>
<table id="ssh_key">
<tr class="overviewHead" style="width: 50%;">
<td class="padding10 first-collumn" style="width: 25%;">Upload SSH Key</td>
@ -224,7 +205,7 @@
<td class="padding10 first-collumn" style="width: 25%;">
<span title="Token that gave you @father_bot">Token</span>
</td>
<td>Chanel name</td>
<td style="width: 100%;">Chanel name</td>
<td></td>
<td></td>
</tr>
@ -233,7 +214,7 @@
<tr style="width: 50%;" id="telegram-table-{{telegram.0}}" class="{{ loop.cycle('odd', 'even') }}">
<td class="padding10 first-collumn">
{% set id = 'telegram-token-' + telegram.0|string() %}
{{ input(id, value=telegram.1) }}
{{ input(id, value=telegram.1, size='30') }}
</td>
<td>
{% set id = 'telegram-chanel-' + telegram.0|string() %}
@ -251,33 +232,6 @@
</table>
<br /><span class="add-button" title="Telegram channel" id="add-telegram-button">+ Add</span>
<br /><br />
<table class="overview" id="telegram-add-table" style="display: none;">
<tr class="overviewHead">
<td class="padding10 first-collumn" style="width: 25%;">
<span title="Token that gave you @father_bot">Token</span>
</td>
<td>
Channel name
</td>
<td></td>
<td></td>
</tr>
<tr>
<td class="padding10 first-collumn">
{{ input('telegram-token-add') }}
{% for group in ssh_group %}
{{ input('new-telegram-group-add', value=group.0) }}
{% endfor %}
</td>
<td>
{{ input('telegram-chanel-add') }}
</td>
<td></td>
<td>
<span class="add-admin" id="add-telegram" title="Add new Telegram channel" style="cursor: pointer;"></span>
</td>
</tr>
</table>
<div id="ajax-telegram"></div>
<div class="add-note addName alert-info" style="width: inherit; margin-right: 15px;">
You can read the description of all parameters <a href="https://haproxy-wi.org/description.py?description=checker" title="Servers description" target="_blank">here</a>
@ -375,9 +329,7 @@
<td class="padding10 first-collumn">
Before Install any Exporters install Grafana and Prometheus servers first
</td>
<td>
</td>
<td></td>
<td>
{% if grafana != "Active:" %}
<span class="ui-button ui-widget ui-corner-all" id="grafna_install" title="Install Grafana and Prometheus server">Install</span>
@ -483,79 +435,7 @@
<b>Do not edit this section if your group is "ALL"!</b> Add first<a href="users.py#groups" title="Admin Area: Groups">group</a> or edit your own group at<a href="users.py#users" title="Admin Area: Users">users</a> page
</div>
</div>
<div id="user-add-table" style="display: none;">
<table class="overview">
{% include 'include/admin_add_user.html' %}
<td class="padding20">
Role
<span class="need-field">*</span>
</td>
<td>
<select id="new-role" name="new-role">
<option disabled selected>Choose role</option>
{% for role in roles %}
{% if role.1 != "admin" %}
<option value="{{ role.1 }}">{{ role.1 }}</option>
{% endif %}
{% endfor %}
</select>
</td>
</tr>
</table>
</div>
<div id="server-add-table" style="display: none;">
<form id="server-add-form" method="post">
<table class="overview">
{% include 'include/admin_add_server.html' %}
<tr>
<td class="padding20">
Credentials
<span class="need-field">*</span>
</td>
<td>
<select id="credentials" required>
<option disabled selected value="0">Choose credentials</option>
{% for ssh in sshs %}
{% if ssh.5|string() == group %}
<option value="{{ssh.0}}">{{ssh.1}}</option>
{% endif %}
{% endfor %}
</select>
</td>
</tr>
</table>
<input type="submit" tabindex="-1" style="position:absolute; top:-1000px">
</form>
</div>
<div id="backup-add-table" title="Add a new backup job " style="display: none;">
<table class="overview">
{% include 'include/add_backup.html' %}
<tr>
<td class="padding20">
Credentials for remote server
<span class="need-field">*</span>
</td>
<td>
<select id="backup-credentials" required>
<option disabled selected>Choose credentials</option>
{% for ssh in sshs %}
{% if ssh.2 == 1 and ssh.5|string() == group %}
<option value="{{ssh.0}}">{{ssh.1}}</option>
{% endif %}
{% endfor %}
</select>
</td>
</tr>
<tr>
<td class="padding20">
Description
</td>
<td>
{{ input('backup-description', size='30') }}
</td>
<tr>
</table>
</div>
{% include 'include/admins_dialogs.html' %}
{% include 'include/change_pass_form.html' %}
<script>
if($('#new-server-group-add').val() == 1) {

View File

@ -47,5 +47,6 @@ template = template.render(title = "Admin area: Manage users",
settings = settings,
backups = sql.select_backups(),
services = services,
page = "users.py",
ldap_enable = ldap_enable)
print(template)

View File

@ -440,6 +440,13 @@ pre {
margin-right: 1px;
cursor: pointer;
}
.add-button:hover, .add-button-wi:hover {
background-color: #5bbf5b;
}
.add-button:active, .add-button-wi:active {
background-color: #3e863e;
box-shadow: 0 1px #666;
}
.add-button-wi {
padding-right: 5px;
padding-left: 5px;

View File

@ -453,115 +453,37 @@ $( function() {
}
} );
});
$('#add-group').click(function() {
toastr.clear();
$.ajax( {
url: "options.py",
data: {
newgroup: "1",
groupname: $('#new-group-add').val(),
newdesc: $('#new-desc').val(),
token: $('#token').val()
$('#add-group-button').click(function() {
addGroupDialog.dialog('open');
});
var addGroupDialog = $( "#group-add-table" ).dialog({
autoOpen: false,
resizable: false,
height: "auto",
width: 600,
modal: true,
title: "Add a new group",
show: {
effect: "fade",
duration: 200
},
type: "POST",
success: function( data ) {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
toastr.clear();
var getId = new RegExp('[0-9]+');
var id = data.match(getId);
$("#ajax-group").append(data);
$( ".newgroup" ).addClass( "update", 1000, callbackGroup );
$('select:regex(id, group)').append('<option value='+id+'>'+$('#new-group-add').val()+'</option>').selectmenu("refresh");
$.getScript(awesome);
}
}
} );
});
$('#add-ssh').click(function() {
toastr.clear();
var ssh_enable = 0;
if ($('#new-ssh_enable').is(':checked')) {
ssh_enable = '1';
}
$.ajax( {
url: "options.py",
data: {
new_ssh: $('#new-ssh-add').val(),
new_group: $('#new-sshgroup').val(),
ssh_user: $('#ssh_user').val(),
ssh_pass: $('#ssh_pass').val(),
ssh_enable: ssh_enable,
page: cur_url[0],
token: $('#token').val()
hide: {
effect: "fade",
duration: 200
},
type: "POST",
success: function( data ) {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
toastr.clear();
var getId = new RegExp('ssh-table-[0-9]+');
var id = data.match(getId) + '';
id = id.split('-').pop();;
$("#ssh_enable_table").append(data);
$( ".new_ssh" ).addClass( "update", 1000 );
setTimeout(function() {
$( ".new_ssh" ).removeClass( "update" );
}, 2500 );
$('select:regex(id, credentials)').append('<option value='+id+'>'+$('#new-ssh-add').val()+'</option>').selectmenu("refresh");
$('select:regex(id, ssh-key-name)').append('<option value='+$('#new-ssh-add').val()+'>'+$('#new-ssh-add').val()+'</option>').selectmenu("refresh");
$.getScript(awesome);
$( "input[type=submit], button" ).button();
$( "input[type=checkbox]" ).checkboxradio();
$( "select" ).selectmenu();
}
}
} );
});
$('#add-telegram').click(function() {
toastr.clear();
$.ajax( {
url: "options.py",
data: {
newtelegram: $('#telegram-token-add').val(),
chanel: $('#telegram-chanel-add').val(),
telegramgroup: $('#new-telegram-group-add').val(),
page: cur_url[0],
token: $('#token').val()
buttons: {
"Add": function() {
addGroup(this);
},
type: "POST",
success: function( data ) {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
$("#checker_table").append(data);
$( ".newgroup" ).addClass( "update", 1000, callbackGroup );
$.getScript(awesome);
$( "input[type=submit], button" ).button();
$( "input[type=checkbox]" ).checkboxradio();
$( "select" ).selectmenu();
Cancel: function() {
$( this ).dialog( "close" );
clearTips();
}
}
});
});
function callbackGroup() {
setTimeout(function() {
$( ".newgroup" ).removeClass( "update" );
}, 2500 );
}
$('#add-user-button').click(function() {
addUserDialog.dialog('open');
});
$('#add-group-button').click(function() {
if ($('#group-add-table').css('display', 'none')) {
$('#group-add-table').show("blind", "fast");
} else {
$('#group-add-table').hide("blind", "fast");
}
});
var addUserDialog = $( "#user-add-table" ).dialog({
autoOpen: false,
resizable: false,
@ -579,7 +501,7 @@ $( function() {
},
buttons: {
"Add": function () {
addUser();
addUser(this);
},
Cancel: function () {
$(this).dialog("close");
@ -587,6 +509,9 @@ $( function() {
}
}
});
$('#add-server-button').click(function() {
addServerDialog.dialog('open');
});
var addServerDialog = $( "#server-add-table" ).dialog({
autoOpen: false,
resizable: false,
@ -604,7 +529,7 @@ $( function() {
},
buttons: {
"Add": function () {
addServer();
addServer(this);
},
Cancel: function () {
$(this).dialog("close");
@ -612,18 +537,64 @@ $( function() {
}
}
});
$('#add-server-button').click(function() {
addServerDialog.dialog('open');
});
$('#add-ssh-button').click(function() {
if ($('#ssh-add-table').css('display', 'none')) {
$('#ssh-add-table').show("blind", "fast");
addCredsDialog.dialog('open');
});
var addCredsDialog = $( "#ssh-add-table" ).dialog({
autoOpen: false,
resizable: false,
height: "auto",
width: 600,
modal: true,
title: "Add a new SSH credentials",
show: {
effect: "fade",
duration: 200
},
hide: {
effect: "fade",
duration: 200
},
buttons: {
"Add": function () {
addCreds(this);
},
Cancel: function () {
$(this).dialog("close");
clearTips();
}
}
});
$('#add-telegram-button').click(function() {
if ($('#telegram-add-table').css('display', 'none')) {
$('#telegram-add-table').show("blind", "fast");
addTelegramDialog.dialog('open');
});
var addTelegramDialog = $( "#telegram-add-table" ).dialog({
autoOpen: false,
resizable: false,
height: "auto",
width: 600,
modal: true,
title: "Create a new Telegram channel",
show: {
effect: "fade",
duration: 200
},
hide: {
effect: "fade",
duration: 200
},
buttons: {
"Add": function () {
addTelegram(this);
},
Cancel: function () {
$(this).dialog("close");
clearTips();
}
}
});
$('#add-backup-button').click(function() {
addBackupDialog.dialog('open');
});
var addBackupDialog = $( "#backup-add-table" ).dialog({
autoOpen: false,
@ -642,7 +613,7 @@ $( function() {
},
buttons: {
"Add": function () {
addBackup();
addBackup(this);
},
Cancel: function () {
$(this).dialog("close");
@ -650,8 +621,8 @@ $( function() {
}
}
});
$('#add-backup-button').click(function() {
addBackupDialog.dialog('open');
$('#add-smon-button').click(function() {
addSmonServer.dialog('open');
});
var addSmonServer = $( "#smon-add-table" ).dialog({
autoOpen: false,
@ -670,7 +641,7 @@ $( function() {
},
buttons: {
"Add": function () {
addNewSmonServer();
addNewSmonServer(this);
},
Cancel: function () {
$(this).dialog("close");
@ -678,9 +649,6 @@ $( function() {
}
}
});
$('#add-smon-button').click(function() {
addSmonServer.dialog('open');
});
$( "#ajax-users input" ).change(function() {
var id = $(this).attr('id').split('-');
updateUser(id[1])
@ -787,9 +755,20 @@ $( function() {
clearTips();
}
});
} );
function addNewSmonServer() {
function common_ajax_action_after_success(dialog_id, new_group, ajax_append_id, data) {
toastr.clear();
$("#"+ajax_append_id).append(data);
console.log(new_group);
$( "."+new_group ).addClass( "update", 1000);
$.getScript(awesome);
clearTips();
$( dialog_id ).dialog("close" );
setTimeout(function() {
$( "."+new_group ).removeClass( "update" );
}, 2500 );
}
function addNewSmonServer(dialog_id) {
var valid = true;
allFields = $( [] ).add( $('#new-smon-ip') ).add( $('#new-smon-port') )
allFields.removeClass( "ui-state-error" );
@ -839,25 +818,17 @@ function addNewSmonServer() {
if (data.indexOf('error:') != '-1' || data.indexOf('unique') != '-1') {
toastr.error(data);
} else {
toastr.clear();
$("#ajax-smon").append(data);
$(".newserver").addClass( "update", 1000 );
$( "input[type=submit], button" ).button();
$( "input[type=checkbox]" ).checkboxradio();
$( "select" ).selectmenu();
$.getScript(awesome);
$.getScript('/inc/unsers.js');
setTimeout(function() {
$( ".newserver" ).removeClass( "update" );
}, 2500 );
clearTips();
$( "#smon-add-table" ).dialog("close" );
common_ajax_action_after_success(dialog_id, 'newserver', 'ajax-smon', data);
}
}
} );
}
}
function addUser() {
function addUser(dialog_id) {
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#new-username') ).add( $('#new-password') )
@ -888,19 +859,45 @@ function addUser() {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
toastr.clear();
$("#ajax-users").append(data);
var getId = new RegExp('[0-9]+');
var id = data.match(getId);
addUserGroup(id[0]);
common_ajax_action_after_success(dialog_id, 'user-'+id, 'ajax-users', data);
}
}
} );
clearTips();
$( "#user-add-table" ).dialog("close" );
}
}
function addServer() {
function addGroup(dialog_id) {
toastr.clear();
var valid = true;
allFields = $( [] ).add( $('#new-group-add') );
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#new-group-add'), "new group name", 1 );
if(valid) {
$.ajax( {
url: "options.py",
data: {
newgroup: "1",
groupname: $('#new-group-add').val(),
newdesc: $('#new-desc').val(),
token: $('#token').val()
},
type: "POST",
success: function( data ) {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
var getId = new RegExp('[0-9]+');
var id = data.match(getId);
$('select:regex(id, group)').append('<option value='+id+'>'+$('#new-group-add').val()+'</option>').selectmenu("refresh");
common_ajax_action_after_success(dialog_id, 'newgroup', 'ajax-group', data);
}
}
} );
}
}
function addServer(dialog_id) {
toastr.clear()
var valid = true;
var servername = $('#new-server-add').val();
@ -953,25 +950,91 @@ function addServer() {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
toastr.clear()
$("#ajax-servers").append(data);
$(".newserver").addClass( "update", 1000 );
common_ajax_action_after_success(dialog_id, 'newserver', 'ajax-servers', data);
$( "input[type=submit], button" ).button();
$( "input[type=checkbox]" ).checkboxradio();
$( ".controlgroup" ).controlgroup();
$( "select" ).selectmenu();
$.getScript(awesome);
setTimeout(function() {
$( ".newserver" ).removeClass( "update" );
}, 2500 );
}
}
} );
clearTips();
$( "#server-add-table" ).dialog("close" );
}
}
function addBackup() {
function addCreds(dialog_id) {
toastr.clear();
var ssh_enable = 0;
if ($('#new-ssh_enable').is(':checked')) {
ssh_enable = '1';
}
var valid = true;
allFields = $( [] ).add( $('#new-ssh-add') ).add( $('#ssh_user') )
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#new-ssh-add'), "Name", 1 );
valid = valid && checkLength( $('#ssh_user'), "Credentials", 1 );
if(valid) {
$.ajax({
url: "options.py",
data: {
new_ssh: $('#new-ssh-add').val(),
new_group: $('#new-sshgroup').val(),
ssh_user: $('#ssh_user').val(),
ssh_pass: $('#ssh_pass').val(),
ssh_enable: ssh_enable,
page: cur_url[0],
token: $('#token').val()
},
type: "POST",
success: function (data) {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
var getId = new RegExp('ssh-table-[0-9]+');
var id = data.match(getId) + '';
id = id.split('-').pop();
common_ajax_action_after_success(dialog_id, 'ssh-table-'+id, 'ssh_enable_table', data);
$('select:regex(id, credentials)').append('<option value=' + id + '>' + $('#new-ssh-add').val() + '</option>').selectmenu("refresh");
$('select:regex(id, ssh-key-name)').append('<option value=' + $('#new-ssh-add').val() + '>' + $('#new-ssh-add').val() + '</option>').selectmenu("refresh");
$("input[type=submit], button").button();
$("input[type=checkbox]").checkboxradio();
$("select").selectmenu();
}
}
});
}
}
function addTelegram(dialog_id) {
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#telegram-token-add') ).add( $('#telegram-chanel-add') )
allFields.removeClass( "ui-state-error" );
valid = valid && checkLength( $('#telegram-token-add'), "token", 1 );
valid = valid && checkLength( $('#telegram-chanel-add'), "channel name", 1 );
if(valid) {
toastr.clear();
$.ajax( {
url: "options.py",
data: {
newtelegram: $('#telegram-token-add').val(),
chanel: $('#telegram-chanel-add').val(),
telegramgroup: $('#new-telegram-group-add').val(),
page: cur_url[0],
token: $('#token').val()
},
type: "POST",
success: function( data ) {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
common_ajax_action_after_success(dialog_id, 'newgroup', 'checker_table', data);
$( "input[type=submit], button" ).button();
$( "input[type=checkbox]" ).checkboxradio();
$( "select" ).selectmenu();
}
}
} );
}
}
function addBackup(dialog_id) {
var valid = true;
toastr.clear();
allFields = $( [] ).add( $('#backup-server') ).add( $('#rserver') ).add( $('#rpath') ).add( $('#backup-time') ).add( $('#backup-credentials') )
@ -1001,22 +1064,14 @@ function addBackup() {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else if (data.indexOf('success') != '-1') {
toastr.remove();
$("#ajax-backup-table").append(data);
$(".newbackup").addClass( "update", 1000 );
setTimeout(function() {
$( ".newbackup" ).removeClass( "update" );
}, 2500 );
$( "select" ).selectmenu();
$.getScript(awesome);
common_ajax_action_after_success(dialog_id, 'newbackup', 'ajax-backup-table', data);
} else if (data.indexOf('info') != '-1') {
toastr.remove();
toastr.info(data);
}
}
} );
clearTips();
$( "#backup-add-table" ).dialog("close" );
}
}
function updateSettings(param, val) {
@ -1848,11 +1903,6 @@ function addUserGroup(id) {
success: function( data ) {
if (data.indexOf('error:') != '-1' || data.indexOf('Failed') != '-1') {
toastr.error(data);
} else {
$("#user-" + id).addClass("update", 1000);
setTimeout(function () {
$("#user-" + id).removeClass("update");
}, 2500);
}
}
} );