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( ' ', '-' ); |
} |