179 lines
5.4 KiB
JavaScript
179 lines
5.4 KiB
JavaScript
|
$(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');
|
||
|
}
|
||
|
});
|