(function($) {
var login = "$login";
var timeleft = 0;
var connected = 0;
var connectionMsg = '';
var interval = null;
var pollperiod = 60000;
var tagappendto = '#content';
var tagtop = '120px';
var tagleft = '16px';
var responseDelay = 'Unk';
$(document).on('ready',function(){
// Add OIDC labels
if($('#oidc').length === 0){
$(' OIDC ?
')
.appendTo(tagappendto);
//
$('#oidc')
.css('position','absolute')
.css('top',tagtop)
.css('left',tagleft);
//
$('#oidctag')
.css('color','white')
.css('padding','3px')
.css('z-index','10000')
.on('click', function(){
switch (connected) {
case 0 :
connectionMsg = "$msg_session_connected_no";
SessionOpenDialog(connectionMsg);
break;
case 1 :
connectionMsg = "$msg_session_connected_yes";
SessionCloseDialog(connectionMsg);
break;
default :
case -1 :
connectionMsg = "$msg_session_connected_error";
break;
};
});
//
$('#oidcinfo')
.css('color','white')
.css('padding','3px')
.css('z-index','10001')
.css('background-color','#09f')
.on('click', function(){
$('').appendTo('body')
.html('$infos
$lbl_t_session_restant : ' + timeleft + ' s
$lbl_delai_reponse : ' + responseDelay + ' ms
')
.dialog({
modal: true, title: "$lbl_infos_titre", zIndex: 10000, autoOpen: true,
width: 'auto', resizable: false,
close: function (event, ui) {
$(this).remove();
interval = setInterval(pollOidc,pollperiod);
}
});
}
);
}
// If user is logged locally, verify the OIDC session is valid.
if ( login !== "" ) {
pollOidc();
interval = setInterval(pollOidc,pollperiod);
} else {
connected = 0;
// Show not OIDC connected.
$('#oidctag').css('background-color', 'orange');
$('#oidctag').text(' OIDC ');
}
function SessionCloseDialog(message) { //[dnc28d]
clearInterval(interval);
$('').appendTo('body')
.html(''+message+'?
')
.dialog({
modal: true, title: "$msg_session_close", zIndex: 10000, autoOpen: true,
width: 'auto', resizable: false,
buttons: [
{
text: "$lbl_yes",
click: function () {
// Close the OIDC session.
window.location.replace("$url_logout");
$(this).dialog("close");
}
},{
text: "$lbl_no",
click: function () {
$(this).dialog("close");
interval = setInterval(pollOidc,pollperiod);
}
}
],
close: function (event, ui) {
$(this).remove();
interval = setInterval(pollOidc,pollperiod);
}
});
};
function SessionOpenDialog(message) { //[dnc28d]
clearInterval(interval);
$('').appendTo('body')
.html(''+message+'?
')
.dialog({
modal: true, title: "$msg_session_open", zIndex: 10000, autoOpen: true,
width: 'auto', resizable: false,
buttons: [
{
text: "$lbl_yes",
click: function () {
// Se connecter
window.location.replace("$link_login");
$(this).dialog("close");
}
},{
text: "$lbl_no",
click: function () {
$(this).dialog("close");
interval = setInterval(pollOidc,pollperiod);
}
}
],
close: function (event, ui) {
$(this).remove();
interval = setInterval(pollOidc,pollperiod);
}
});
};
function ExtendDialog(message) { //[dnc28d]
if ( !$("#extenddialog").size() ) { //[dnc28f]
clearInterval(interval);
$('').appendTo('body')
.html(''+message+'?
')
.dialog({
modal: true, title: "$msg_session_extend", zIndex: 10000, autoOpen: true,
width: 'auto', resizable: false,
buttons: [
{
text: "$lbl_yes",
click: function () {
// Extend session
$.ajax({
type : "get",
url : "$url_endpoint_login",
data : { 'response_type' : 'code',
'client_id' : "$clientID",
'user_id' : login,
'state' : "$state",
'scope' : 'openid sli',
}
});
$(this).dialog("close");
interval = setInterval(pollOidc,pollperiod);
}
},{
text: "$lbl_no",
click: function () {
$(this).dialog("close");
interval = setInterval(pollOidc,pollperiod);
},
}
],
close: function (event, ui) {
$(this).remove();
interval = setInterval(pollOidc,pollperiod);
},
});
}
};
// Test OIDC connection.
function pollOidc(){
connected = -1;
var d = new Date();
var timeStart = d.getTime();
var timeStop = 0;
$.ajax({
type : "get",
url : "$url_endpoint_login",
data : { 'response_type' : 'code',
'client_id' : "$clientID",
'user_id' : login,
'state' : "$state",
'scope' : 'openid',
'prompt' : 'none',
},
statusCode : {
401 : function(){
connected = 0;
var d = new Date();
timeStop = d.getTime();
// Not (or no longer) connected on OIDC, disconnect locally
window.location.replace("$url_logout" +"&logout=local");
},
200 : function ( data, textStatus, jqXHR){
connected = 1;
var d = new Date();
timeStop = d.getTime();
// Show OIDC connected
$('#oidctag').css('background-color', '#8f8');
$('#oidctag').text(' OIDC ');
timeleft = data['timeleft'];
if ( timeleft < 600 ) { //[dnc28d]
// Approaching OIDC session end.
clearInterval(interval);
ExtendDialog("$msg_session_expires");
interval = setInterval(pollOidc,pollperiod);
}
},
},
error : function(obj,textStatus,errorThrown){
connected = -1;
// Show error (OIDC state is unknown)
$('#oidctag').css('background-color', 'red');
$('#oidctag').text(textStatus + ' ' + errorThrown);
},
complete : function ( data, textStatus, jqXHR){
if ( timeStop && timeStart ) {
responseDelay = timeStop - timeStart;
} else {
responseDelay = 'Unk';
}
},
});
}
});
})( jQuery );
JSCODE
;
} //function