Rev 3204 | Blame | Last modification | View Log | RSS feed
// configurationvar urlRacine = 'https://www.tela-botanica.org',config = {prod: {urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire:auth'},test: {urlWidgetNavigation : urlRacine + '/widget-test:cel:saisie2',urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire-test:auth'},local: {urlWidgetNavigation : 'https://localhost/widget:cel:saisie2',urlBaseAuth : 'https://localhost/service:annuaire:auth'}}// // Prod: décommenter ci-dessus et commenter ou supprimer ci-dessous// var urlRacine = 'http://localhost',// config = {// prod: {// urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',// urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire:auth'// },// test: {// urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',// urlBaseAuth : 'https://api.tela-botanica.test/service:annuaire:auth'// },// local: {// urlWidgetNavigation : 'https://localhost/widget:cel:saisie2',// urlBaseAuth : 'https://localhost/service:annuaire:auth'// }// }/*** Charge la barre de navigation depuis le widget:reseau:navigation dans un <div id="tb-navigation"> , s'il existe* dans la page appelante.** Nécessite jQuery** Utilisation :* - prévoir un <div id="tb-navigation"> dans la page, qui accueillera la barre de navigation.* - si ce <div> contient déjà quelque chose, son contenu sera reporté à la place de la zone ayant l'id "contenu-source"* de la barre de navigation (si une telle zone existe)* - si ce <div> contient un attribut "data-courant" et si la valeur de cet attribut correspond à l'id d'un des éléments* de navigation, alors cet élément aura la classe "active" (pour localiser la page courante dans les menus)* - si ce <div> contient un attribut "data-squelette", alors le widget de navigation sera appelé avec le paramètre* "?squelette=contenu-de-data-squelette"; se reporter à la documentation du widget:reseau:navigation*/$( document ).ready( function() {var $div = $( '#tb-navigation' );if ( $div ) {var squelette = $div.data( 'squelette' ),courant = $div.data( 'courant' ),mode = $div.data( 'mode' ) || 'prod',contenu = $div.html();// chargement de la barrevar urlBarreNavigation = config[mode]['urlWidgetNavigation'];if ( squelette ) {urlBarreNavigation += '?squelette=' + squelette;}htmlBarre = $.ajax({url: urlBarreNavigation,type: 'get',success: function( data ) {// remplacement de la zone contenu-sourcevar $zoneSource = $div.find( '#contenu-source' );if ( $zoneSource ) {$zoneSource.replaceWith( contenu );// Chargement des informations de connexion SSOvar urlBaseAuth = config[mode]['urlBaseAuth'];chargerStatutSSO( urlBaseAuth );}},error: function() {$div.html( 'Erreur: impossible de charger la barre de navigation' );}});}});/*** Modifie les liens des boutons de connexion / déconnexion SSO pour prendre ne compte* l'adresse exacte de la page d'origine (si on fait ça en PHP, on obtient l'URL du* widget de barre de navigation et pas de la page appelante)*/function definirPageOrigineDansLiens() {var page = window.location.href;$( '#bouton-connexion a' ).attr( 'href', $( '#bouton-connexion a' ).attr( 'href' ) + page );$( '#deconnexion a' ).attr( 'href', $( '#deconnexion a' ).attr( 'href' ) + page );}/*** Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu* à droite de la barre en fonction*/function chargerStatutSSO( urlBaseAuth ) {var urlAuth = urlBaseAuth + '/identite';// definirUtilisateur( 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvd3d3LnRlbGEtYm90YW5pY2Eub3JnIiwidG9rZW5faWQiOiJ0Yl9hdXRoIiwic3ViIjoiaWRpckB0ZWxhLWJvdGFuaWNhLm9yZyIsImlhdCI6MTU0Mjk3MjIxNiwiZXhwIjoxNTQyOTg0NDQ1LCJzY29wZXMiOlsidGVsYS1ib3RhbmljYS5vcmciXSwiaWQiOiI0NDA4NCIsInByZW5vbSI6IklkaXIiLCJub20iOiJBbGxpY2hlIiwicHNldWRvIjoiSWRpciBBbGxpY2hlIiwicHNldWRvVXRpbGlzZSI6dHJ1ZSwiaW50aXR1bGUiOiJJZGlyIEFsbGljaGUiLCJhdmF0YXIiOiJcL1wvd3d3LmdyYXZhdGFyLmNvbVwvYXZhdGFyXC83ODU3ZmY2MWE5Yjk5NWE4NjIyMzdkMmEyYzYxODAyMT9zPTUwJnI9ZyZkPW1tIiwiZ3JvdXBlcyI6W10sInBlcm1pc3Npb25zIjpbImVkaXRvciJdLCJub21XaWtpIjoiSWRpckFsbGljaGUiLCJkYXRlRGVybmllcmVNb2RpZiI6MTQ5NTIwNjM3Nn0.D3rySwuCDsSl6JAmjncwgwg4gUJijZjeaYeDYHsw3uI' );// Prod: décommenter $.ajax ci-dessous et supprimer la ligne ci-dessus$.ajax({url: urlAuth,type: "GET",dataType: 'json',xhrFields: {withCredentials: true}}).done( function( data ) {// connectédefinirUtilisateur( data.token );});}function definirUtilisateur( jeton ) {var nomComplet = '',idUtilisateur = '',courriel = '',nom = '',prenom = '';if ( undefined !== jeton ) {// décodage jetonvar jetonDecode = decoderJeton( jeton );nomComplet = jetonDecode.intitule;idUtilisateur = jetonDecode.id;courriel = jetonDecode.sub;nom = jetonDecode.nom;prenom = jetonDecode.prenom;// console.log(jetonDecode);}// affichage$( '#bouton-connexion, #creation-compte' ).addClass( 'hidden' );$( '#utilisateur-connecte, #anonyme, #zone-courriel-confirmation, #zone-prenom-nom' ).removeClass( 'hidden' );$( '#nom-complet' ).html( nomComplet );$( '#courriel, #courriel_confirmation' ).val( courriel ).attr( 'disabled', 'disabled' );$( '#id_utilisateur' ).val( idUtilisateur );$( '#prenom' ).val( prenom ).attr( 'disabled', 'disabled' );$( '#nom' ).val( nom ).attr( 'disabled', 'disabled' );$( '#date-releve' ).focus();}/*** 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* Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/* ou ceci : https://code.google.com/p/crypto-js*/function decoderJeton( jeton ) {parts = jeton.split( '.' );payload = parts[1];payload = atob( payload );payload = JSON.parse( payload, true );return payload;}