Subversion Repositories eFlore/Applications.cel

Compare Revisions

Problem with comparison.

Ignore whitespace Rev HEAD → Rev 3271

/trunk/widget/modules/saisie2/squelettes/js/auth.js
New file
0,0 → 1,144
// configuration
var urlRacine = window.location.origin;
 
$( document ).ready( function() {
$( '#form-observateur' )[0].reset();
var mode = $( '#tb-observateur' ).data( 'mode' ) || 'prod',
urlBaseAuth = urlRacine + '/service:annuaire:auth';
 
chargerStatutSSO( urlBaseAuth, mode );
$( '#deconnexion a' ).click( function() {
deconnecterUtilisateur( urlBaseAuth, mode );
});
});
 
/**
* Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu
* à droite de la barre en fonction
*/
function chargerStatutSSO( urlBaseAuth, mode ) {
var urlAuth = urlBaseAuth + '/identite';
 
if( 'local' !== mode ) {
connexion( urlAuth, true );
} else {
urlAuth = urlRacine + '/widget:cel:modules/saisie2/test-token.json';
$( '#connexion' ).click( function() {
connexion( urlAuth, true );
return false;
});
}
}
 
/**
* Déconnecte l'utilisateur du SSO
*/
function deconnecterUtilisateur( urlBaseAuth, mode ) {
if( 'local' === mode ) {
definirUtilisateur( undefined );
window.location.reload();
return;
}
 
var urlAuth = urlBaseAuth + '/deconnexion';
 
connexion( urlAuth, false );
}
 
function connexion( urlAuth, connexionOnOff ) {
$.ajax({
url: urlAuth,
type: "GET",
dataType: 'json',
xhrFields: {
withCredentials: true
}
})
.done( function( data ) {
if( connexionOnOff ) {
// connecté
definirUtilisateur( data.token );
} else {
definirUtilisateur();
window.location.reload();
}
})
.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();
});
}
 
function definirUtilisateur( jeton ) {
var idUtilisateur = '',
nomComplet = '',
courriel = '',
pseudo = '',
prenom = '',
nom = '';
 
// affichage
if ( undefined !== jeton ) {
// décodage jeton
var jetonDecode = decoderJeton( jeton );
console.log(jetonDecode);
 
idUtilisateur = jetonDecode.id;
nomComplet = jetonDecode.intitule;
courriel = jetonDecode.sub;
pseudo = jetonDecode.pseudo;
prenom = jetonDecode.prenom;
nom = jetonDecode.nom;
$( '#courriel, #courriel_confirmation' ).attr( 'disabled', 'disabled' );
$( '#prenom' ).attr( 'disabled', 'disabled' );
$( '#nom' ).attr( 'disabled', 'disabled' );
$( '#bouton-connexion, #creation-compte' ).addClass( 'hidden' );
$( '#utilisateur-connecte, #anonyme, #zone-courriel-confirmation, #zone-prenom-nom' ).removeClass( 'hidden' );
$( '#date-releve' ).focus();
}
$( '.warning' ).remove();
$( '#nom-complet' ).html( nomComplet );
$( '#courriel, #courriel_confirmation' ).val( courriel );
$( '#profil-utilisateur a' ).attr( 'href', urlProfilUtilisateur( pseudo ) );
$( '#id_utilisateur' ).val( idUtilisateur );
$( '#prenom' ).val( prenom );
$( '#nom' ).val( nom );
}
 
/**
* 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;
}
 
/**
* Décodage "url-safe" des chaînes base64 retournées par le SSO (lib jwt)
*/
function b64d( input ) {
var remainder = input.length % 4;
 
if ( 0 !== remainder ) {
var padlen = 4 - remainder;
 
for ( var i = 0; i < padlen; i++ ) {
input += '=';
}
}
input = input.replace( '-', '+' );
input = input.replace( '_', '/' );
return atob( input );
}
 
function urlProfilUtilisateur( pseudo ) {
var mode = $( '#tb-observateur' ).data( 'mode' ) || 'prod';
var urlPart = ( 'prod' === mode ) ? 'www.tela-botanica.org/' : 'beta.tela-botanica.org/test/';
 
return 'https://' + urlPart + 'membres/' + pseudo.toLowerCase().replace( ' ', '-' );
}