templates/lost_asset.html (193 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="/lost_asset">
<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="lost-asset-form" method="post" action="/offboard">
<table class="table table-condensed">
<tr>
<td class="col-md-4">
<p>As per the Lost Asset protocol,<br>the following actions will be performed:</p>
<dl>
<li>Invalidate backup codes</li>
<li>Purge application specific passwords</li>
<li>Reset Google apps password</li>
<li>Purge 3rd party access tokens</li>
<li>Disable IMAP email</li>
<li>Disable POP email</li>
<li>Reset Sign-In cookies</li>
</dl>
<dl id="formOptions">
{{ form.csrf_token }}
{% for field in form if field.name in 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['title']] }}</div>
</div>
<div class="row">
<div class="col-md-3"><strong>Team:</strong></div>
<div class="col-md-9">{{ user_info[ldap_fields['department']] }}</div>
</div>
<div class="row">
<div class="col-md-3"><strong>Org:</strong></div>
<div class="col-md-9">{{ user_info[ldap_fields['org_role']] }}</div>
</div>
<div class="row">
<div class="col-md-3"><strong>Location:</strong></div>
<div class="col-md-9">{{ user_info[ldap_fields['office']] }}</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['member_of']] %}{{ group }} {% endfor %}
</div>
</div>
<div class="row">
<div class="col-md-3"><strong>Status:</strong></div>
<div class="col-md-9">
{% if user_info['suspended'] %}
<span class="text-danger">INACTIVE</span>
{% else %}
<span class="text-info">ACTIVE</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 }};
{% endblock %}
typeaheadRun("#ldap-users", "users", users);
typeaheadSubmitFormOnSelect("#ldap-users", "#user-id-form");
disableEnterKey("#lost-asset-form");
var checkboxes = ["RESET_PASSWORD", "DELETE_ASPS", "DELETE_TOKENS",
"INVALIDATE_BACKUP_CODES", "DISABLE_IMAP", "DISABLE_POP"];
selectDefaultCheckboxes(checkboxes);
$("#formOptions").hide();
{% block lost_asset %}
var userId = "{{ form['USER_ID'].data }}";
var user = "{{ user }}";
var timeStamp = (new Date).getTime();
var sessionId = timeStamp + "_" + user + "_" + userId;
$("#lost-asset-form").submit(function(e) {
e.preventDefault();
$.ajax({
url: $(this).attr("action") + "/" + sessionId,
type: 'POST',
data: $(this).serialize() + "&USER_ID=" + userId + "&LOST_ASSET=y"
});
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 + 1; // adding 1 step for sign-in cookies reset
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();
// Show a success message for reset sign-in cookies (happens by default when we suspend/unsuspend)
progressData += "<br>Done!";
$("#data").html(progressData);
}
};
});
{% endblock %}
</script>
</body>
</html>