cas-service-ja/overlays/org.apereo.cas.cas-server-w.../WEB-INF/classes/static/js/ssosessions.js

352 lines
12 KiB
JavaScript

/*eslint-disable no-unused-vars*/
String.prototype.padLeft = function (length, character) {
return new Array(length - this.length + 1).join(character || ' ') + this;
};
Date.prototype.toFormattedString = function () {
return [String(this.getMonth() + 1).padLeft(2, '0'),
String(this.getDate()).padLeft(2, '0'),
String(this.getFullYear()).substr(2, 2)].join('/') + ' ' +
[String(this.getHours()).padLeft(2, '0'),
String(this.getMinutes()).padLeft(2, '0')].join(':');
};
function principalAttributes(obj) {
var output = '<table class="table table-condensed principal_attributes"><tbody>';
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (Array.isArray(obj[key])) {
output = output.concat('<tr><td class="field-label active">' + key + '</td><td>' + obj[key].toString() + '</td></tr>');
} else {
output = output.concat('<tr><td class="field-label active">' + key + '</td><td>' + obj[key] + '</td></tr>');
}
}
}
output = output.concat('</tbody></table>');
return output;
}
function authenticatedServices(obj) {
var output = '';
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
output = output.concat('<h5>' + key + '</h5><table class="table table-condensed principal_attributes"><tbody>');
for (var foo in obj[key]) {
if (obj[key].hasOwnProperty(foo)) {
if (Array.isArray(obj[key][foo])) {
output = output.concat('<tr><td class="field-label active">' + foo + ':</td><td>' + obj[key][foo].toString() + '</td></tr>');
} else {
output = output.concat('<tr><td class="field-label active">' + foo + ':</td><td>' + obj[key][foo] + '</td></tr>');
}
}
}
output = output.concat('</tbody></table>');
}
}
return output;
}
/* Formatting function for row details - modify as you need */
function format(d) {
return '<table class="table table-bordered row-detail">' +
'<tbody>' +
'<tr class="hidden-md hidden-lg">' +
'<td class="field-label active">Access Date:</td>' +
'<td>' + d.authentication_date_formatted + '</td>' +
'</tr>' +
'<tr class="hidden-md hidden-lg">' +
'<td class="field-label active">Usage Count:</td>' +
'<td>' + d.number_of_uses + '</td>' +
'</tr>' +
'<tr>' +
'<td class="field-label active">Ticket Granting Ticket:</td>' +
'<td>' + d.ticket_granting_ticket + '</td>' +
'</tr>' +
'<tr>' +
'<td class="field-label active">Principal Attributes:</td>' +
'<td>' +
principalAttributes(d.principal_attributes) +
'</td>' +
'</tr>' +
'<tr>' +
'<td class="field-label active">Authenticated Services:</td>' +
'<td>' +
authenticatedServices(d.authenticated_services) +
'</td>' +
'</tr>' +
'<tr>' +
'<td class="field-label active">Ticket Granting Service:</td>' +
'<td></td>' +
'</tr>' +
'</tbody></table>';
}
function updateAdminPanels(data) {
//$('#totalUsers').text(data.totalPrincipals);
$('#totalUsers').text(data.activeSsoSessions.length);
$('#totalUsageSessions').text(sum(data.activeSsoSessions, 'number_of_uses'));
//$('#totalProxied').text(data.totalTicketGrantingTickets);
$('#totalTGTs').text(data.totalTicketGrantingTickets);
//$('#totalTGTs').text( sum(data.activeSsoSessions, 'is_proxied' ) );
}
function sum(obj, prop) {
var sum = 0;
for (var el in obj) {
if (obj.hasOwnProperty(el)) {
sum += ( typeof obj[el][prop] == 'boolean' ) ? +obj[el][prop] : obj[el][prop];
}
}
return sum;
}
/*
function showError(msg) {
$('#msg').removeClass();
$('#msg').addClass('errors');
$('#msg').text(msg);
$('#msg').show();
}
*/
/*
function showInfo(msg) {
$('#msg').removeClass();
$('#msg').addClass('info');
$('#msg').text(msg);
$('#msg').show();
}
*/
function alertUser(message, alertType) {
$('#alertWrapper').append('<div id="alertdiv" class="alert alert-' + alertType + ' alert-dismissible">' +
'<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>' +
'<span class="alertMessage">' + message + '</span></div>'
);
setTimeout(function () { // this will automatically close the alert and remove this if the users doesnt close it in 5 secs
$('#alertdiv').remove();
}, 5000);
}
function removeSession(ticketId) {
var factory = {};
factory.httpHeaders = {};
factory.messages = {};
factory.httpHeaders[$('meta[name=\'_csrf_header\']').attr('content')] = $('meta[name=\'_csrf\']').attr('content');
factory.ticketId = ticketId;
if (ticketId && (ticketId == 'ALL' || ticketId == 'PROXIED' || ticketId == 'DIRECT' )) {
factory.url = urls.destroy.all;
factory.data = {type: ticketId};
factory.messages.success = 'Removed <strong>' + ticketId + '</strong> tickets successfully.';
factory.messages.error = 'Could not remove <strong>' + ticketId + '</strong> tickets.';
} else {
factory.url = urls.destroy.single;
factory.data = {ticketGrantingTicket: factory.ticketId};
factory.messages.success = 'Ticket is removed successfully.';
factory.messages.error = 'Ticket is not removed successfully.';
}
$.ajax({
type: 'post',
url: factory.url,
//data: { ticketGrantingTicket: factory.ticketId, type: 'ALL' },
data: factory.data,
headers: factory.httpHeaders,
dataType: 'json',
success: function (data) {
// Reinitialize the table data
$('#ssoSessions').DataTable().ajax.reload();
if (data.status != 200) {
alertUser(factory.messages.error, 'danger');
} else {
alertUser(factory.messages.success, 'success');
// Reload the page
location.reload();
}
},
error: function () {
alertUser('There appears to be an error. Please try your request again.', 'danger');
}
});
}
var ssoSessions = (function () {
var createDataTable = function () {
$('#ssoSessions').DataTable({
'order': [[3, 'desc']],
'initComplete': function (settings, json) {
if (!json || json.activeSsoSessions.length == 0) {
$('#loadingMessage').hide();
$('#no-cas-sessions').show();
} else {
updateAdminPanels(json);
$('#loadingMessage').hide();
$('#no-cas-sessions').hide();
$('#cas-sessions').show();
}
},
'language': {
//"infoEmpty": "No active sessions were found",
'emptyTable': 'No sessions found',
'zeroRecords': 'No matching sessions found'
},
'processing': true,
'ajax': {
'url': urls.getSessions,
'dataSrc': 'activeSsoSessions'
},
columnDefs: [
{
'targets': 0,
'className': 'details-control',
'orderable': false,
'data': null,
'defaultContent': ''
},
{
'targets': 1,
'data': 'is_proxied',
'className': 'col-xs-2 col-md-1',
'render': function (data) {
if (data === true) {
return '<span class="label label-primary">Proxy</span>';
} else {
return ' ';
}
}
},
{
'targets': 2,
'data': 'authenticated_principal',
'className': 'col-xs-4 col-md-2',
'render': function (data, type) {
return type === 'display' && data.length > 20 ?
'<span title="' + data + '">' + data.substr(0, 18) + '...</span>' :
data;
}
},
{
'targets': 3,
'data': 'ticket_granting_ticket',
'className': 'hidden-xs hidden-sm col-md-4',
'render': function (data, type) {
return type === 'display' && data.length > 20 ?
'<span title="' + data + '">' + data.substr(0, 40) + '...</span>' :
data;
}
},
{
'targets': 4,
'data': 'authentication_date_formatted',
'className': 'col-xs-4 col-sm-4 col-md-2'
},
{
'targets': 5,
'data': 'number_of_uses',
'className': 'hidden-xs hidden-sm visible-md-* col-md-2'
},
{
'targets': 6,
'data': 'ticket_granting_ticket',
'className': 'col-xs-2 col-sm-2 col-md-1',
'render': function (data) {
return '<button class="btn btn-xs btn-block btn-danger" type="button" value="' + data + '">Destroy</button>';
},
'orderable': false
},
]
});
};
var addEventHandlers = function () {
/**
* The Bulk remove button
*/
$('#removeAllSessionsButton').on('click', function (e) {
e.preventDefault();
removeSession(this.value);
});
/**
* Individual removal button
*/
$(document).on('click', '#ssoSessions tbody tr td:last-child button.btn-danger', function (e) {
e.preventDefault();
removeSession(this.value);
});
/**
* The filter buttons
*/
$('#filterButtons .btn').click(function () {
var filter = $(this).data('filter');
var table = $('#ssoSessions').DataTable();
var filterRegex;
var deleteValue;
var btnText;
// Create Filter RegEx:
if (filter == 'proxied') {
filterRegex = '^Proxy$';
deleteValue = 'PROXIED';
btnText = 'Remove <span class="badge">xx</span> Proxied Sessions';
} else if (filter == 'non-proxied') {
filterRegex = '^ $';
deleteValue = 'DIRECT';
btnText = 'Remove <span class="badge">xx</span> Non-Proxied Sessions';
} else {
filterRegex = '';
deleteValue = 'ALL';
btnText = 'Remove All Sessions';
}
var searchTerm = table.column(1).search(filterRegex, true, false).draw();
$('#removeAllSessionsButton').val(deleteValue).html(btnText.replace('xx', searchTerm.page.info().recordsDisplay));
});
// Add event listener for opening and closing details
$(document).on('click', '#ssoSessions tbody td.details-control', function () {
var table = $('#ssoSessions').DataTable();
var tr = $(this).closest('tr');
var row = table.row(tr);
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
}
else {
// Open this row
row.child(format(row.data()), 'info').show();
tr.addClass('shown');
}
});
};
// initialization *******
(function init() {
addEventHandlers();
createDataTable();
})();
// Public Methods
return {
/**
* Not used
*/
};
})();