{% extends "base.html" %} {% block content %} <script src="/inc/users.js"></script> <div id="dialog-confirm" title="Are you sure you want to delete?" style="display: none;"> <p><span class="ui-icon ui-icon-alert" style="float:left; margin:3px 12px 20px 0;"></span>Deleting irreversibly all data will be lost?</p> </div> <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-ssh-group-add" name="new-ssh-group-add" value="{{ ssh_group }}" > <div id="tabs"> <ul> <li><a href="#users">Users</a></li> <li><a href="#servers">Servers</a></li> <li><a href="#ssh">SSH credentials</a></li> <li><a href="#checker">Checker</a></li> {% if user %} <a href=/app/login.py?logout=logout title="Logout, user name: {{ user }}" class="login"> Logout</a> {% else %} <a href=/app/login.py title="Login" class="login"> Login</a> {% endif %} </ul> <div id="users"> <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></td> <td></td> </tr> <tr> {% for user in users %} {% if user.5 == group %} <tr id="user-{{user.0}}" class="{{ loop.cycle('odd', 'even') }}"> <td class="padding10 first-collumn"> {% if user.6 == 1%} <input type="text" id="login-{{user.0}}" value="{{user.1}}" class="form-control" readonly> {% else %} <input type="text" id="login-{{user.0}}" value="{{user.1}}" class="form-control"> {% endif %} <input type="hidden" id="usergroup-{{user.0}}" name="usergroup-{{user.0}}" value="{{ group }}"> </td> <td> {% if user.6 == 1%} <input type="password" id="password-{{user.0}}" value="{{user.3}}" class="form-control" readonly> {% else %} <input type="password" id="password-{{user.0}}" value="{{user.3}}" class="form-control"> {% endif %} </td> <td class="checkbox"> {% if user.7 == 1 %} <label for="activeuser-{{user.0}}"></label><input type="checkbox" id="activeuser-{{user.0}}" checked> {% else %} <label for="activeuser-{{user.0}}"></label><input type="checkbox" id="activeuser-{{user.0}}"> {% endif %} </td> <td> {% if user.6 == 1%} <input type="text" id="email-{{user.0}}" value="{{user.2}}" class="form-control" readonly> {% else %} <input type="text" id="email-{{user.0}}" value="{{user.2}}" class="form-control"> {% endif %} </td> <td> <select id="role-{{user.0}}" name="role-{{user.0}}"> <option disabled selected>Choose role</option> {% for role in roles %} {% if role.1 != "admin" %} {% if user.4 == role.1 %} <option value="{{ role.1 }}" selected>{{ role.1 }}</option> {% else %} <option value="{{ role.1 }}">{{ role.1 }}</option> {% endif %} {% endif %} {% endfor %} </select> </td> <td> <a class="add" onclick="cloneUser({{user.0}})" id="clone-{{user.0}}" title="Clone {{user.1}}" style="cursor: pointer;"></a> </td> <td> <a class="delete" onclick="confirmDeleteUser({{user.0}})" title="Delete user {{user.1}}" style="cursor: pointer;"></a> </td> </tr> {% endif %} {% endfor %} </table> <br /><span class="add-button" title="Add user" id="add-user-button">+ Add</span> <br /><br /> </div> <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> <td class="checkbox-head"><span title="Alert if backend change status. Before enable add Telgram chanel at Checker tab">Alert(?)</span></td> <td class="checkbox-head"><span title="Enable save and show metrics">Metrics(?)</span></td> <td class="checkbox-head"><span title="Keep start HAProxy service if down">Start(?)</span></td> <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>Desciption</td> <td></td> <td></td> </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"> <input type="text" id="hostname-{{server.0}}" value="{{server.1}}" class="form-control"> </td> <td> <input type="text" id="ip-{{server.0}}" value="{{server.2}}" size="14" class="form-control"> <input type="hidden" id="servergroup-{{server.0}}" name="servergroup-{{server.0}}" value="{{ group }}" > </td> <td class="checkbox"> <input type="text" id="port-{{server.0}}" value="{{server.10}}" size="1" class="form-control"> </td> <td class="checkbox"> {% if server.5 == 1 %} <label for="enable-{{server.0}}"></label><input type="checkbox" id="enable-{{server.0}}" checked> {% else %} <label for="enable-{{server.0}}"></label><input type="checkbox" id="enable-{{server.0}}"> {% endif %} </td> <td class="checkbox"> {% if server.4 == 1 %} <label for="typeip-{{server.0}}"></label><input type="checkbox" id="typeip-{{server.0}}" checked> {% else %} <label for="typeip-{{server.0}}"></label><input type="checkbox" id="typeip-{{server.0}}"> {% endif %} </td> <td class="checkbox"> {% if server.8 == 1 %} <label for="alert-{{server.0}}"></label><input type="checkbox" id="alert-{{server.0}}" checked> {% else %} <label for="alert-{{server.0}}"></label><input type="checkbox" id="alert-{{server.0}}"> {% endif %} </td> <td class="checkbox"> {% if server.9 == 1 %} <label for="metrics-{{server.0}}"></label><input type="checkbox" id="metrics-{{server.0}}" checked> {% else %} <label for="metrics-{{server.0}}"></label><input type="checkbox" id="metrics-{{server.0}}"> {% endif %} </td> <td class="checkbox"> {% if server.12 == 1 %} <label for="active-{{server.0}}"></label><input type="checkbox" id="active-{{server.0}}" checked> {% else %} <label for="active-{{server.0}}"></label><input type="checkbox" id="active-{{server.0}}"> {% endif %} </td> <td> <select id="slavefor-{{server.0}}"> <option selected value="0">Not slave</option> {% for master in masters %} {% if master.0 == server.6 %} <option value="{{master.0}}" selected>{{master.1}}</option> {% else %} <option value="{{master.0}}">{{master.1}}</option> {% endif %} {% endfor %} </select> </td> <td> <div class="controlgroup"> <select id="credentials-{{server.0}}"> <option disabled selected>Choose credentials</option> {% for ssh in sshs %} {% if ssh.0 == server.7 %} <option value="{{ssh.0}}" selected>{{ssh.1}}</option> {% else %} <option value="{{ssh.0}}">{{ssh.1}}</option> {% endif %} {% endfor %} </select> <button onclick="checkSshConnect('{{server.2}}')" title="Check SSH connect to the server {{server.1}}">check</button> </div> </td> <td> {% if server.11 != "None" %} <input type="text" id="desc-{{server.0}}" value="{{server.11}}" size="30" class="form-control"> {% else %} <input type="text" id="desc-{{server.0}}" value="" size="30" class="form-control"> {% endif %} </td> <td> <a class="add" onclick="cloneServer({{server.0}})" id="clone-{{server.0}}" title="Clone {{server.1}}" style="cursor: pointer;"></a> </td> <td> <a class="delete" onclick="confirmDeleteServer({{server.0}})" title="Delete server {{server.1}}" style="cursor: pointer;"></a> </td> </tr> {% endfor %} </table> <br /><span class="add-button" title="Add server" id="add-server-button">+ Add</span> <br /><br /> </div> <div id="ssh"> <table id="ssh_enable_table" class="overview"> <tr class="overviewHead" style="width: 50%;"> <td class="padding10 first-collumn" style="width: 15%;"> <span title="It's just name alias. This alias will be userd in 'Servers' page for choose credentials">Name(?)</span> </td> <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> <span title="Enter SSH user name. If SSH key disabled, enter password for ssh user">Credentials(?)</span> </td> <td></td> </tr> {% for ssh in sshs %} {% if ssh.5|string() == group %} <tr style="width: 50%;" id="ssh-table-{{ssh.0}}" class="{{ loop.cycle('odd', 'even') }}"> <td class="first-collumn"> <input type="text" id="ssh_name-{{ssh.0}}" class="form-control" value="{{ssh.1}}" style="margin-bottom: 23px;"> </td> <td class="first-collumn" valign="top" style="padding-top: 15px;"> {% if ssh.2 == 1 %} <label for="ssh_enable-{{ssh.0}}">Enable SSH key</label><input type="checkbox" id="ssh_enable-{{ssh.0}}" checked> {% else %} <label for="ssh_enable-{{ssh.0}}">Enable SSH key</label><input type="checkbox" id="ssh_enable-{{ssh.0}}"> {% endif %} </td> <td style="padding-top: 15px;"> <p> <input type="text" id="ssh_user-{{ssh.0}}" class="form-control" value="{{ssh.3}}"> </p> {% if ssh.2 == 1 %} <input type="password" id="ssh_pass-{{ssh.0}}" class="form-control" value="{{ssh.4}}" style="display: none;"> {% else %} <input type="password" id="ssh_pass-{{ssh.0}}" class="form-control" value="{{ssh.4}}"> {% endif %} <br> </td> <td> <a class="delete" onclick="confirmDeleteSsh({{ssh.0}})" style="cursor: pointer;"></a> </td> </tr> {% endif %} {% endfor %} </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 type="text" name="new-ssh-add" id="new-ssh-add" class="form-control"> </td> <td> <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 type="text" id="ssh_user" class="form-control" value="{{ssh_user}}"> </p> <input type="password" id="ssh_pass" class="form-control" value="{{ssh_pass}}" style="display: none;"> <br> </td> <td> <a class="add-admin" id="add-ssh" title="Add new SSH credentials" style="cursor: pointer;"></a> </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> <td> <span title="Private key. Note: The public key must be pre-installed on all servers to which you plan to connect">Key(?)</span> </td> <td></td> </tr> <tr style="width: 50%;"> <td class="first-collumn" valign="top" style="padding-top: 15px;"> <select id="ssh-key-name"> <option disabled selected>Choose credentials</option> {% for ssh in sshs %} {% if ssh.5|string() == group %} <option value={{ssh.1}}>{{ssh.1}}</option> {% endif %} {% endfor %} </select> </td> <td style="padding-top: 15px;"> <textarea id="ssh_cert" cols="50" rows="5"></textarea><br /><br /> <a class="ui-button ui-widget ui-corner-all" id="ssh_key_upload" title="Upload ssh key" onclick="uploadSsh()">Upload</a> </td> <td></td> </tr> </table> <div id="ajax-ssh"></div> </div> <div id="checker"> <table id="checker_table" class="overview"> <tr class="overviewHead" style="width: 50%;"> <td class="padding10 first-collumn" style="width: 25%;"> <span title="Token that gave you @father_bot">Token(?)</span> </td> <td>Chanel name</td> <td></td> </tr> {% for telegram in telegrams %} {% if telegram.3|string() == group %} <tr style="width: 50%;" id="telegram-table-{{telegram.0}}" class="{{ loop.cycle('odd', 'even') }}"> <td class="first-collumn" style="padding-top: 20px;"> <input type="text" id="telegram-token-{{telegram.0}}" class="form-control" value="{{telegram.1}}" style="margin-bottom: 23px;"> </td> <td> <input type="text" id="telegram-chanel-{{telegram.0}}" class="form-control" value="{{telegram.2}}"> </td> <td> <a class="delete" onclick="confirmDeleteSsh({{telegram.0}})" style="cursor: pointer;"></a> </td> </tr> {% endif %} {% endfor %} </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> Chanel name </td> <td></td> </tr> <tr> <td class="padding10 first-collumn"> <input type="text" name="telegram-token-add" id="telegram-token-add" class="form-control"> {% for group in ssh_group %} <input type="hidden" id="new-telegram-group-add" name="new-telegram-group-add" value="{{ group.0 }}" > {% endfor %} </td> <td> <input type="text" id="telegram-chanel-add" class="form-control"> </td> <td> <a class="add-admin" id="add-telegram" title="Add new Telegram channel" style="cursor: pointer;"></a> </td> </tr> </table> <div id="ajax-telegram"></div> </div> </div> <div id="group_error" style="display: none;"> <div class="alert alert-danger"> <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"> <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 <span class="need-field">*</span> </td> <td> <input type="text" name="new-username" id="new-username" class="form-control"> {% if ldap_enable == '1' %} <a href="#" title="Search user in AD" id="search_ldap_user">Search user in AD</a> {% endif %} </td> </tr> <tr> <td class="padding20"> Password <span class="need-field">*</span> </td> <td> <input type="password" name="new-password" id="new-password" class="form-control"> </td> </tr> <tr> <td class="padding20">Active</td> <td> <label for="activeuser"></label><input type="checkbox" id="activeuser" checked> </td> </tr> <tr> <td class="padding20"> Email </td> <td> <input type="text" name="new-email" id="new-email" class="form-control"> </td> </tr> <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 %} {% 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"> <table class="overview"> <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 <span class="need-field">*</span> </td> <td> <input type="text" name="new-server-add" id="new-server-add" class="form-control"> </td> </tr> <tr> <td class="padding20"> IP <span class="need-field">*</span> </td> <td> <input type="text" name="new-ip" id="new-ip" size="14" class="form-control"> <input type="hidden" id="new-sshgroup" name="new-sshgroup" value="{{ group }}" > </td> </tr> <tr> <td class="padding20" title="SSH port"> Port <span class="need-field">*</span> </td> <td> <input type="text" name="new-port" id="new-port" size=1 class="form-control" value="22"> </td> </tr> <tr> <td class="padding20">Enable</td> <td> <label for="enable"></label><input type="checkbox" id="enable" checked> </td> </tr> <tr> <td class="padding20" title="Vitrual IP, something like VRRP">Virt</td> <td> <label for="typeip"></label><input type="checkbox" id="typeip"> </td> </tr> <tr> <td class="padding20" title="Alert if backend change status">Alert</td> <td> <label for="alert"></label><input type="checkbox" id="alert"> </td> </tr> <tr> <td class="padding20" title="Enable save and show metrics">Metrics</td> <td> <label for="metrics"></label><input type="checkbox" id="metrics"> </td> </tr> <tr> <td class="padding20" title="Keep start HAProxy service if down">Start</td> <td> <label for="active"></label><input type="checkbox" id="active"> </td> </tr> <tr> <td class="padding20" title="Actions with master config will automatically apply on slave">Slave for</td> <td> <select id="slavefor"> <option selected value="0">Not slave</option> {% for master in masters %} <option value="{{master.0}}">{{master.1}}</option> {% endfor %} </select> </td> </tr> <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> <tr> <td class="padding20">Desciption</td> <td> <input type="text" id="desc" size="30" class="form-control"> </td> </tr> </table> <input type="submit" tabindex="-1" style="position:absolute; top:-1000px"> </form> </div> <script> if($('#new-server-group-add').val() == 1) { $('#group_error').css('display', 'block'); $('#add-user-button').css('display', 'none'); $('#add-server-button').css('display', 'none'); $('#add-ssh-button').css('display', 'none'); $('#ssh_key_upload').css('display', 'none'); $('#add-telegram-button').css('display', 'none'); $('input').css('color', 'rgba(0, 0, 0, 0.3)'); setTimeout(function() { $("input[type=checkbox]").checkboxradio( "disable" ); $("select").selectmenu( "disable" ); $("button").button( "disable" ); $("input").attr( "readonly", "readonly" ); $('.delete').remove() }, 500 ); } </script> <style> .ui-selectmenu-button.ui-button { width: 10em; } .checkbox { width: 90px; } .group-field, .slave-field { width: 15%; } .cred-field { width: 20%; } </style> {% endblock %}