Subversion Repositories eFlore/Applications.cel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3204 delphine 1
// configuration
2
var urlRacine = 'https://www.tela-botanica.org',
3
        config = {
4
                prod: {
5
                        urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
6
                        urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire:auth'
7
                },
8
                test: {
9
                        urlWidgetNavigation : urlRacine + '/widget-test:cel:saisie2',
10
                        urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire-test:auth'
11
                },
12
                local: {
13
                        urlWidgetNavigation : 'https://localhost/widget:cel:saisie2',
14
                        urlBaseAuth : 'https://localhost/service:annuaire:auth'
15
                }
16
        }
17
 
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.
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)
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'),
39
                        mode = div.data('mode') || 'prod',
40
                        contenu = div.html();
41
 
42
                // chargement de la barre
43
                var urlBarreNavigation = config[mode]['urlWidgetNavigation'];
44
                if (squelette) {
45
                        urlBarreNavigation += '?squelette=' + squelette;
46
                }
47
                htmlBarre = $.ajax({
48
                        url: urlBarreNavigation,
49
                        type: 'get',
50
                        success: function(data) {
51
                                // remplacement de la zone contenu-source
52
                                var zoneSource = div.find('#contenu-source');
53
                                if (zoneSource) {
54
                                        zoneSource.replaceWith(contenu);
55
                                        // Chargement de sinformations de connexion SSO
56
                                        var urlBaseAuth = config[mode]['urlBaseAuth'];
57
                                        chargerStatutSSO(urlBaseAuth);
58
                                }
59
                        },
60
                        error: function() {
61
                                div.html('Erreur: impossible de charger la barre de navigation');
62
                        }
63
                });
64
        }
65
});
66
 
67
/**
68
 * Modifie les liens des boutons de connexion / déconnexion SSO pour prendre ne compte
69
 * l'adresse exacte de la page d'origine (si on fait ça en PHP, on obtient l'URL du
70
 * widget de barre de navigation et pas de la page appelante)
71
 */
72
function definirPageOrigineDansLiens() {
73
        var page = window.location.href;
74
        $('#bouton-connexion a').attr('href', $('#bouton-connexion a').attr('href') + page);
75
    $('#deconnexion a').attr('href', $('#deconnexion a').attr('href') + page);
76
}
77
 
78
/**
79
 * Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu
80
 * à droite de la barre en fonction
81
 */
82
function chargerStatutSSO(urlBaseAuth) {
83
        var urlAuth = urlBaseAuth + '/identite';
84
        $.ajax({
85
            url: urlAuth,
86
            type: "GET",
87
            dataType: 'json',
88
            xhrFields: {
89
                 withCredentials: true
90
            }
91
        }).done(function(data) {
92
                // connecté
93
                definirUtilisateur(data.token);
94
        });
95
}
96
 
97
function definirUtilisateur(jeton) {
98
        var nomComplet = '';
99
        if (jeton != undefined) {
100
                // décodage jeton
101
                var jetonDecode = decoderJeton(jeton);
102
                nomComplet = jetonDecode.intitule;
103
        }
104
        // affichage
105
        $('#bouton-connexion').hide();
106
        $('#utilisateur-connecte').show();
107
        $('#nom-complet').html(nomComplet);
108
}
109
 
110
/**
111
 * Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
112
 * JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple
113
 * Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/
114
 * ou ceci : https://code.google.com/p/crypto-js
115
 */
116
function decoderJeton(jeton) {
117
    parts = jeton.split('.');
118
    payload = parts[1];
119
    payload = atob(payload);
120
    payload = JSON.parse(payload, true);
121
 
122
    return payload;
123
}