Subversion Repositories Applications.reseau

Rev

Rev 24 | Rev 63 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
24 mathias 1
// configuration
2
var urlRacine = 'http://www.tela-botanica.org',
3
	config = {
4
		prod: {
61 mathias 5
			urlWidgetNavigation : urlRacine + '/widget:reseau:navigation',
6
			urlBaseAuth = 'https://www.tela-botanica.org/service:annuaire:auth'
24 mathias 7
		},
8
		test: {
9
			urlWidgetNavigation : urlRacine + '/widget-test:reseau:navigation',
61 mathias 10
			urlBaseAuth = 'https://www.tela-botanica.org/service:annuaire-test:auth'
24 mathias 11
		},
12
		local: {
61 mathias 13
			urlWidgetNavigation : 'http://localhost/widget:reseau:navigation',
14
			urlBaseAuth = 'https://localhost/service:annuaire:auth'
24 mathias 15
		}
61 mathias 16
	}
24 mathias 17
 
21 mathias 18
/**
19
 * Charge la barre de navigation depuis le widget:reseau:navigation dans un <div id="tb-navigation"> , s'il existe
20
 * dans la page appelante.
21
 *
22
 * Nécessite jQuery
23
 *
24
 * Utilisation :
25
 *	- prévoir un <div id="tb-navigation"> dans la page, qui accueillera la barre de navigation.
23 mathias 26
 *	- si ce <div> contient déjà quelque chose, son contenu sera reporté à la place de la zone ayant l'id "contenu-source"
27
 *	  de la barre de navigation (si une telle zone existe)
21 mathias 28
 *  - si ce <div> contient un attribut "data-courant" et si la valeur de cet attribut correspond à l'id d'un des éléments
29
 *    de navigation, alors cet élément aura la classe "active" (pour localiser la page courante dans les menus)
30
 *  - si ce <div> contient un attribut "data-squelette", alors le widget de navigation sera appelé avec le paramètre
31
 *    "?squelette=contenu-de-data-squelette"; se reporter à la documentation du widget:reseau:navigation
32
 */
33
 
34
$(document).ready(function() {
35
	var div = $('#tb-navigation');
36
	if (div) {
37
		var squelette = div.data('squelette'),
38
			courant = div.data('courant'),
24 mathias 39
			mode = div.data('mode') || 'prod',
21 mathias 40
			contenu = div.html();
41
 
42
		// chargement de la barre
24 mathias 43
		var urlBarreNavigation = config[mode]['urlWidgetNavigation'];
22 mathias 44
		if (squelette) {
23 mathias 45
			urlBarreNavigation += '?squelette=' + squelette;
21 mathias 46
		}
22 mathias 47
		htmlBarre = $.ajax({
23 mathias 48
			url: urlBarreNavigation,
22 mathias 49
			type: 'get',
50
			success: function(data) {
51
				div.html(data);
52
				// activation de l'entrée de menu
53
				if (courant) {
54
					var menuCourant = div.find('#' + courant);
55
					if (menuCourant) {
56
						menuCourant.addClass('active');
57
					}
58
				}
59
				// remplacement de la zone contenu-source
23 mathias 60
				var zoneSource = div.find('#contenu-source');
22 mathias 61
				if (zoneSource) {
23 mathias 62
					zoneSource.replaceWith(contenu);
61 mathias 63
					// Chargement de sinformations de connexion SSO
64
					var urlBaseAuth = config[mode]['urlBaseAuth'];
65
					chargerStatutSSO(urlBaseAuth);
22 mathias 66
				}
67
			},
68
			error: function() {
69
				div.html('Erreur: impossible de charger la barre de navigation');
70
			}
71
		});
21 mathias 72
	}
61 mathias 73
});
74
 
75
/**
76
 *
77
 */
78
function chargerStatutSSO(urlBaseAuth) {
79
	// vérification de l'état au chargement
80
	var urlAuth = urlBaseAuth + '/identite';
81
	$.ajax({
82
	    url: urlAuth,
83
	    type: "GET",
84
	    dataType: 'json',
85
	    xhrFields: {
86
	         withCredentials: true
87
	    }
88
	}).done(function(data) {
89
		// connecté
90
		definirUtilisateur(data.token);
91
	});
92
}
93
 
94
function definirUtilisateur(jeton) {
95
	var nomComplet = '';
96
	if (jeton != undefined) {
97
		// décodage jeton
98
		var jetonDecode = decoderJeton(jeton);
99
		nomComplet = jetonDecode.intitule;
100
	}
101
	// affichage
102
	$('#bouton-connexion').hide();
103
	$('#utilisateur-connecte').show();
104
	$('#nom-complet').html(nomComplet);
105
}
106
 
107
/**
108
 * Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
109
 * JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple
110
 * Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/
111
 * ou ceci : https://code.google.com/p/crypto-js
112
 */
113
function decoderJeton(jeton) {
114
    parts = jeton.split('.');
115
    payload = parts[1];
116
    payload = atob(payload);
117
    payload = JSON.parse(payload, true);
118
 
119
    return payload;
120
}