New file |
0,0 → 1,123 |
// configuration |
var 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' |
} |
} |
|
/** |
* 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 barre |
var urlBarreNavigation = config[mode]['urlWidgetNavigation']; |
if (squelette) { |
urlBarreNavigation += '?squelette=' + squelette; |
} |
htmlBarre = $.ajax({ |
url: urlBarreNavigation, |
type: 'get', |
success: function(data) { |
// remplacement de la zone contenu-source |
var zoneSource = div.find('#contenu-source'); |
if (zoneSource) { |
zoneSource.replaceWith(contenu); |
// Chargement de sinformations de connexion SSO |
var 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'; |
$.ajax({ |
url: urlAuth, |
type: "GET", |
dataType: 'json', |
xhrFields: { |
withCredentials: true |
} |
}).done(function(data) { |
// connecté |
definirUtilisateur(data.token); |
}); |
} |
|
function definirUtilisateur(jeton) { |
var nomComplet = ''; |
if (jeton != undefined) { |
// décodage jeton |
var jetonDecode = decoderJeton(jeton); |
nomComplet = jetonDecode.intitule; |
} |
// affichage |
$('#bouton-connexion').hide(); |
$('#utilisateur-connecte').show(); |
$('#nom-complet').html(nomComplet); |
} |
|
/** |
* 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; |
} |