templates/index.html (237 lines of code) (raw):
<!DOCTYPE html>
<html lang="en">
{% block head %}
<head>
<meta charset="UTF-8">
<link href="/static/favicon.png" rel="icon">
<link href="/static/bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="/static/css/typeaheadjs.css" rel="stylesheet">
<style>
.panel {
border: 0;
box-shadow: none;
}
</style>
<title>GateKeeper</title>
</head>
{% endblock %}
<body>
{% include "navbar.html" %}
{% block options %}
<div class="panel panel-default">
<div class="panel-heading">
<form class="form-inline" id="user-id-form" method="post" action="/">
<div class="form-group" id="ldap-users">
{{ form.csrf_token }}
{{ form.USER_ID(class_="form-control typeahead", placeholder="Enter LDAP user name", size=40) }}
</div>
</form>
</div>
<div class="panel-body">
<div>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<p class="text-warning">{{ message }}</p>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
</div>
<form class="form-inline" id="offboard-form" method="post" action="/offboard">
<table class="table table-condensed">
<tr>
<td class="col-md-4">
<dl id="formOptions">
{{ form.csrf_token }}
<div>
<input type="checkbox" id="select-all"> <label for="select-all">Perform ALL actions</label>
</div>
<br>
<br>
<p><strong>Google Directory</strong></p>
{% for field in form if field.name in google_admin_actions %}
{{ field(class_="checkbox") }} {{ field.label }}
<br>
{% endfor %}
<br>
<p><strong>Google Gmail</strong></p>
{% for field in form if field.name in google_gmail_actions %}
{% if field.name == "SET_OOO_MSG" %}
<input class="checkbox" id="SET_OOO_MSG" name="SET_OOO_MSG" type="checkbox" value="y" data-toggle="collapse" data-target="#set_ooo_msg_options" aria-expanded="false" aria-controls="set_ooo_msg_options"> <label for="SET_OOO_MSG">Set Out Of Office message</label>
<div class="collapse" id="set_ooo_msg_options">
<div class="form-group" id="ooo-msg-text">
{{ form.OOO_MSG_TEXT.label }}
<br>
{{ form.OOO_MSG_TEXT(class_="form-control", rows="4", cols="40", placeholder="Out Of Office Response") }}
</div>
</div>
{% else %}
{{ field(class_="checkbox") }} {{ field.label }}
{% endif %}
<br>
{% endfor %}
<br>
<p><strong>Google Calendar</strong></p>
{% for field in form if field.name in google_calendar_actions %}
{% if field.name == "CHANGE_EVENTS_OWNERSHIP" %}
<input class="checkbox" id="CHANGE_EVENTS_OWNERSHIP" name="CHANGE_EVENTS_OWNERSHIP" type="checkbox" value="y" data-toggle="collapse" data-target="#change_events_ownership_options" aria-expanded="false" aria-controls="change_events_ownership_options"> <label for="change_events_ownership">Change events ownership</label>
<div class="collapse" id="change_events_ownership_options">
<div class="form-group" id="gcal-new-owner-user-id">
{{ form.GCAL_NEW_OWNER.label }} {{ form.GCAL_NEW_OWNER(class_="form-control typeahead", size=20) }}
</div>
</div>
{% else %}
{{ field(class_="checkbox") }} {{ field.label }}
{% endif %}
<br>
{% endfor %}
<br>
<p><strong>PagerDuty</strong></p>
{% for field in form if field.name in pagerduty_actions %}
{{ field(class_="checkbox") }} {{ field.label }}
<br>
{% endfor %}
<br>
<p><strong>DUO Secure</strong></p>
{% for field in form if field.name in duo_actions %}
{{ field(class_="checkbox") }} {{ field.label }}
<br>
{% endfor %}
</dl>
</td>
<td class="col-md-8">
<div class="panel panel-primary" style="height: 500px;">
{% if user_info %}
<div class="row">
<div class="col-md-10">
<div class="row">
<div class="col-md-3"><strong>Name:</strong></div>
<div class="col-md-9">{{ user_info[ldap_fields['full_name']] }}</div>
</div>
<div class="row">
<div class="col-md-3"><strong>Role:</strong></div>
<div class="col-md-9">{{ user_info[ldap_fields['role']] }}</div>
</div>
<div class="row">
<div class="col-md-3"><strong>Team:</strong></div>
<div class="col-md-9">{{ user_info[ldap_fields['team']] }}</div>
</div>
<div class="row">
<div class="col-md-3"><strong>Org:</strong></div>
<div class="col-md-9">{{ user_info[ldap_fields['org']] }}</div>
</div>
<div class="row">
<div class="col-md-3"><strong>Location:</strong></div>
<div class="col-md-9">{{ user_info[ldap_fields['location']] }}</div>
</div>
<div class="row">
<div class="col-md-3"><strong>Start date:</strong></div>
<div class="col-md-9">{{ user_info[ldap_fields['start_date']] }}</div>
</div>
<div class="row">
<div class="col-md-3"><strong>LDAP UID:</strong></div>
<div class="col-md-9">{{ user_info[ldap_fields['uid_number']] }}</div>
</div>
<div class="row">
<div class="col-md-3"><strong>LDAP groups:</strong></div>
<div class="col-md-9">
{% for group in user_info[ldap_fields['groups']] %}{{ group }} {% endfor %}
</div>
</div>
<div class="row">
<div class="col-md-3"><strong>Status:</strong></div>
<div class="col-md-9">
{% if user_info['active'] == true %}
<span class="text-info">ACTIVE</span>
{% else %}
<span class="text-danger">INACTIVE</span>
{% endif %}
</div>
</div>
</div>
{% if user_info[ldap_fields['photo_url']] %}
<div class="col-md-2">
<img src="data:image/jpg; base64, {{ user_info[ldap_fields['photo_url']][0] }}" class="img-circle" width="100" height="100">
</div>
{% endif %}
</div>
<br>
<br>
<div class="row">
<div class="col-md-12 text-center" id="data">
Click to submit changes for {{ user_info[ldap_fields['first_name']][0] }}.
<button class="btn btn-default" id="button" type="submit">Submit</button>
</div>
</div>
{% endif %}
</div>
</td>
</tr>
</table>
</form>
</div>
<div class="panel-footer">
<div class="progress">
<div class="progress-bar progress-bar-info progress-bar-striped active" id="progress-bar" role="progressbar"
aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div>
</div>
</div>
</div>
{% endblock %}
<script src="/static/bower_components/jquery/dist/jquery.min.js"></script>
<script src="/static/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="/static/bower_components/typeahead.js/dist/typeahead.bundle.min.js"></script>
<script src="/static/js/gatekeeper.js"></script>
<script type="text/javascript">
{% block ldap_users %}
var users = {{ users|safe }};
$("#gcal_new_owner").val("{{user_info[ldap_fields['manager']]}}");
{% endblock %}
typeaheadRun("#ldap-users", "users", users);
typeaheadRun("#gcal-new-owner-user-id", "users", users);
typeaheadSubmitFormOnSelect("#ldap-users", "#user-id-form");
disableEnterKey("#offboard-form");
selectAllCheckboxes("#select-all", "#formOptions");
var checkboxes = ["RESET_PASSWORD", "DELETE_ASPS", "DELETE_TOKENS", "ORG_UNIT_CHANGE",
"INVALIDATE_BACKUP_CODES", "DISABLE_IMAP", "DISABLE_POP",
"REMOVE_FUTURE_EVENTS",
"REMOVE_FROM_ONCALLS",
"REMOVE_FROM_DUO"];
selectDefaultCheckboxes(checkboxes);
{% block offboard %}
var userId = "{{ form['USER_ID'].data }}";
var user = "{{ user }}";
var timeStamp = (new Date).getTime();
var sessionId = timeStamp + "_" + user + "_" + userId;
$("#offboard-form").submit(function(e) {
e.preventDefault();
$.ajax({
url: $(this).attr("action") + "/" + sessionId,
type: 'POST',
data: $(this).serialize() + "&USER_ID=" + userId
});
var progressData = "Performing changes for " + userId + "...<br><br>";
$("#data").html(progressData);
var progress = 0;
progressBar("#progress-bar", "#progress", progress);
var items = $('input[class="checkbox"]:checked').length;
var step = (100.0 / items);
var source = new EventSource('/offboard/' + sessionId);
source.onmessage = function(e) {
progress += step;
progressData += e.data;
$("#data").html(progressData);
progressBar("#progress-bar", "#progress", progress);
if (progress >= 100) {
source.close();
progressData += "<br>Done!";
$("#data").html(progressData);
}
};
});
{% endblock %}
</script>
</body>
</html>