test-cas-client-sp/app.js

179 lines
5.4 KiB
JavaScript
Raw Permalink Normal View History

2022-07-09 20:16:15 +02:00
$(document).ready( function() {
// Lookup for UI components
var cas_server_selection = $('#cas_server_selection');
var select_server = $('#select_server');
var div_cas_config = $('#cas_config');
var ul_cas_config = div_cas_config.find('ul').first();
var div_user_info = $('#user_info');
var div_warnings = $('#warnings');
var div_cas_logs = $('#cas_logs');
var pre_cas_logs = div_cas_logs.find('pre').first();
var login_btn = $('#login_btn');
var caslogout_btn = $('#caslogout_btn');
var locallogout_btn = $('#locallogout_btn');
var truncatelog_btn = $('#truncatelog_btn');
// Configure CAS servers selection (from API return)
var configure_cas_server_selection = function(cas_servers, selected) {
select_server.html('');
if (!cas_servers || Object.keys(cas_servers).length <= 1) {
cas_server_selection.css('display', 'none');
return true;
}
for (var cas_host in cas_servers) {
var option = $('<option value="'+cas_host+'">'+cas_host+'</option>');
if (cas_host == selected)
option.attr('selected', 'selected');
select_server.append(option);
}
cas_server_selection.css('display', 'block');
};
// Show CAS configuration (from API return)
var show_cas_config = function(cas_config) {
ul_cas_config.html('');
if (!cas_config) {
div_cas_config.css('display', 'none');
return true;
}
for (var key in cas_config) {
var li = $('<li><strong>'+key+':</strong> <em>'+cas_config[key]+'</em></li>');
ul_cas_config.append(li);
}
div_cas_config.css('display', 'block');
};
// Show warning messages (from API return)
var show_warnings = function(warnings) {
div_warnings.html('<h2>Warning messages</h2>');
if (!warnings.length) {
div_warnings.css('display', 'none');
return true;
}
var ul = $('<ul>');
$(warnings).each(function(idx, warning) {
var li = $('<li>'+warning+'</li>');
ul.append(li);
});
div_warnings.append(ul);
div_warnings.css('display', 'block');
};
// Show phpCAS logs
var show_cas_logs = function(logs) {
pre_cas_logs.html('');
if (!logs) {
div_cas_logs.css('display', 'none');
return true;
}
pre_cas_logs.html(logs);
div_cas_logs.css('display', 'block');
};
// Show user information
var show_user_info = function(username, attributes) {
div_user_info.html('<h2>Connected user information</h2>');
div_user_info.css('display', 'block');
if (!username) {
div_user_info.append('<p>Not connected</p>');
return true;
}
var p_username = $('<p><strong>Username:</strong> <em>'+username+'</em></p>');
div_user_info.append(p_username);
div_user_info.append('<h3>Attributes</h3>');
var ul = $('<ul>');
if (attributes) {
for (var attr in attributes) {
var li = $('<li><strong>'+attr+':</strong> <em>'+attributes[attr]+':</em></li>');
ul.append(li);
}
}
else {
ul.append($('<li>No attribute.</li>'));
}
div_user_info.append(ul);
};
// Handle API AJAX call return
var handle_ajax_return = function(data) {
configure_cas_server_selection(data.cas_servers, data.cas_server);
show_warnings(data.warnings);
show_cas_logs(data.logs);
show_cas_config(data.config);
show_user_info(data.user, data.attributes);
};
// Handle API AJAX call fail
var handle_ajax_fail = function(jqXHR, textStatus, errorThrown) {
alert('An error occurred during AJAX request: '+textStatus);
};
// Make an API AJAX call
var make_ajax_call = function(action, data, callback) {
if (!data) data = {};
data['do'] = action;
$.ajax(
{type: "GET", url: 'index.php', data: data}
).done(function(data) {
handle_ajax_return(data);
if (callback) callback(data);
}).fail(handle_ajax_fail);
};
// On select server change, make API call to change current server
select_server.on('change', function(event) {
make_ajax_call('change_server', {'server': select_server.val()});
});
// On local logout button click, make API call to trigger it
locallogout_btn.on('click', function(event) {
make_ajax_call('locallogout');
});
// On CAS logout button click, make API call to trigger it
caslogout_btn.on('click', function(event) {
make_ajax_call('logout', {}, function(data) {
if (data.data && data.data.logout_url)
window.location = data.data.logout_url;
});
});
// On login button click, make API call to trigger it
login_btn.on('click', function(event) {
make_ajax_call('login', {}, function(data) {
if (data.data && data.data.login_url)
window.location = data.data.login_url;
});
});
// On truncate log button click, make API call to trigger it
if (truncatelog_btn) {
truncatelog_btn.on('click', function(event) {
make_ajax_call('truncatelog');
});
}
// Check if CAS ticket is present in current URL
var check_ticket_is_present = new RegExp('[\?&]ticket=([^&]+)');
var ticket_data = check_ticket_is_present.exec(window.location);
// If CAS ticket present, make API call to validate it
if (ticket_data) {
make_ajax_call('validate_ticket', {'ticket': ticket_data[1]}, function(data) {
// If ticket is valid, clean current URI
if (data.success)
window.location = 'index.php';
});
}
else {
// if not CAS ticket present, make API call to get current status
make_ajax_call('status');
}
});