Rev 101 | Blame | Compare with Previous | Last modification | View Log | RSS feed
$(document).ready(function() {
// infobulles
$('[data-toggle="tooltip"]').tooltip();
// trucage ordre des champs pour passer du login au mdp sans passer
// par le lien "oublié ?" => pas standard, c'est mal - @TODO faire mieux
// Ordre : login => mdp => oublie => s'inscrire
$('#login').keypress(function(e) {
if(e.keyCode == 9) {
if(! e.shiftKey) {
$('#mdp').focus();
return false;
}
}
});
$('#mdp').keypress(function(e) {
if(e.keyCode == 9) {
if(e.shiftKey) {
$('#login').focus();
} else {
$('#mdp-oublie').focus();
}
return false;
}
});
$('#mdp-oublie').keypress(function(e) {
if(e.keyCode == 9) {
if(e.shiftKey) {
$('#mdp').focus();
} else {
$('#lien-inscription').focus();
}
}
return false;
});
$('#lien-inscription').keypress(function(e) {
if(e.keyCode == 9) {
if(e.shiftKey) {
$('#mdp-oublie').focus();
return false;
}
}
});
// partenaire avec lequel se connecter
$('#liste-fournisseurs ul li a').click(function() {
$('#liste-fournisseurs ul li a').attr('data-focus', 'false');
$(this).attr('data-focus', 'true');
var nomPartenaire = $(this).data('nom-partenaire'),
urlOubliMdp = $(this).data('url-oubli-mdp'),
loginLegende = $(this).data('login-legende'),
loginTypeChamp = $(this).data('login-type-champ');
$('#nom-partenaire').html(nomPartenaire);
$('#mdp-oublie').attr('href', urlOubliMdp);
$('#login').attr('type', loginTypeChamp);
$('#login').attr('placeholder', loginLegende);
});
// Connexion au SSO
$('#formulaire-identification').submit(function() {
connecterUtilisateur();
return false;
});
// Déconnexion du SSO
$('#deconnexion').click(function() {
deconnecterUtilisateur();
return false;
});
// vérification de l'état au chargement
var urlAuth = baseUrlAuth + '/identite';
$.ajax({
url: urlAuth,
type: "GET",
dataType: 'json',
xhrFields: {
withCredentials: true
}
}).done(function(data) {
// connecté
definirUtilisateur(data.token);
afficherPanneauBienvenue();
})
.fail(function(error) {
// non connecté
afficherPanneauIdentification();
});
// exécuter une action si définie (par ex: déconnexion)
executerAction();
});
/**
* Connecte l'utilisateur au SSO
*/
function connecterUtilisateur() {
var login = $('#login').val().toLowerCase(),
mdp = $('#mdp').val();
if (login == '' || mdp == '') {
alert('Veuillez entrer votre login et votre mot de passe');
} else {
var urlAuth = baseUrlAuth + '/connexion?login=' + encodeURIComponent(login) + '&password=' + encodeURIComponent(mdp);
// partenaire ?
var codePartenaire = $('#liste-fournisseurs a[data-focus="true"]').data('code-partenaire');
if (codePartenaire != undefined) {
urlAuth += '&partner=' + codePartenaire;
}
$.ajax({
url: urlAuth,
type: "GET",
dataType: 'json',
xhrFields: {
withCredentials: true
}
})
.done(function(data) {
rediriger();
definirUtilisateur(data.token);
afficherPanneauBienvenue();
masquerErreurs();
})
.fail(function(error) {
afficherErreurLogin();
});
}
}
/**
* Déconnecte l'utilisateur du SSO
*/
function deconnecterUtilisateur() {
var urlAuth = baseUrlAuth + '/deconnexion';
$.ajax({
url: urlAuth,
type: "GET",
dataType: 'json',
xhrFields: {
withCredentials: true
}
})
.done(function(data) {
rediriger();
definirUtilisateur();
afficherPanneauIdentification();
masquerErreurs();
})
.fail(function(error) {
// @TODO gérer l'affichage de l'erreur, mais pas facile à placer
// dans l'interface actuelle sans que ce soit moche
//afficherErreurServeur();
});
}
/**
* Si la variable "action" est définie (provenant du paramètre GET "origine"),
* exécute l'action associée (par ex: déconnexion)
*/
function executerAction() {
switch (action) {
case "deconnexion":
deconnecterUtilisateur();
break;
default :
// on ne fait rien
}
}
function definirUtilisateur(jeton) {
var nomComplet = '';
if (jeton != undefined) {
// décodage jeton
var jetonDecode = decoderJeton(jeton);
nomComplet = jetonDecode.intitule;
email = jetonDecode.sub;
}
// affichage
$('#nom-complet').html(nomComplet);
$('#nom-complet').attr('title', email);
}
/**
* Décodage "url-safe" des chaînes base64 retournées par le SSO (lib jwt)
*/
function b64d(input) {
var remainder = input.length % 4;
if (remainder != 0) {
var padlen = 4 - remainder;
for (var i=0; i < padlen; i++) {
input += '=';
}
}
input = input.replace('-', '+');
input = input.replace('_', '/');
return atob(input);
}
/**
* Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
* JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple
*/
function decoderJeton(jeton) {
parts = jeton.split('.');
payload = parts[1];
payload = b64d(payload);
payload = JSON.parse(payload, true);
return payload;
}
/**
* Si la variable "origine" est définie (provenant du paramètre GET "origine"),
* redirige l'utilisateur vers cette page
*/
function rediriger() {
if (origine != '') {
window.location.href = origine;
}
}
function afficherPanneauIdentification() {
$('#panneau-identification').show();
$('#panneau-bienvenue').hide();
$('.boite-centre').addClass('reduite');
}
function afficherPanneauBienvenue() {
$('#panneau-identification').hide();
$('#panneau-bienvenue').show();
$('.boite-centre').removeClass('reduite');
}
function afficherErreurLogin() {
$('#info-erreur-login').show();
}
function afficherErreurServeur() {
$('#info-erreur-serveur').show();
}
function masquerErreurs() {
$('.info-erreur').hide();
}