Subversion Repositories eFlore/Applications.cel

Rev

Rev 3204 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3204 Rev 3208
Line 1... Line 1...
1
// configuration
1
// configuration
2
var urlRacine = 'https://www.tela-botanica.org',
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
// // Prod: décommenter ci-dessus et commenter ou supprimer ci-dessous
-
 
18
// var urlRacine = 'http://localhost',
3
        config = {
19
//   config = {
4
                prod: {
20
//     prod: {
5
                        urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
21
//       urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
6
                        urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire:auth'
22
//       urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire:auth'
7
                },
23
//     },
8
                test: {
24
//     test: {
9
                        urlWidgetNavigation : urlRacine + '/widget-test:cel:saisie2',
25
//       urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
10
                        urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire-test:auth'
26
//       urlBaseAuth : 'https://api.tela-botanica.test/service:annuaire:auth'
11
                },
27
//     },
12
                local: {
28
//     local: {
13
                        urlWidgetNavigation : 'https://localhost/widget:cel:saisie2',
29
//       urlWidgetNavigation : 'https://localhost/widget:cel:saisie2',
14
                        urlBaseAuth : 'https://localhost/service:annuaire:auth'
30
//       urlBaseAuth : 'https://localhost/service:annuaire:auth'
15
                }
31
//     }
16
        }
32
//   }
Line 17... Line 33...
17
 
33
 
18
/**
34
/**
19
 * Charge la barre de navigation depuis le widget:reseau:navigation dans un <div id="tb-navigation"> , s'il existe
35
 * Charge la barre de navigation depuis le widget:reseau:navigation dans un <div id="tb-navigation"> , s'il existe
20
 * dans la page appelante.
36
 * dans la page appelante.
Line 29... Line 45...
29
 *    de navigation, alors cet élément aura la classe "active" (pour localiser la page courante dans les menus)
45
 *    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
46
 *  - 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
47
 *    "?squelette=contenu-de-data-squelette"; se reporter à la documentation du widget:reseau:navigation
32
 */
48
 */
Line 33... Line 49...
33
 
49
 
34
$(document).ready(function() {
50
$( document ).ready( function() {
35
        var div = $('#tb-navigation');
51
  var $div = $( '#tb-navigation' );
36
        if (div) {
52
  if ( $div ) {
37
                var squelette = div.data('squelette'),
53
    var squelette = $div.data( 'squelette' ),
38
                        courant = div.data('courant'),
54
        courant   = $div.data( 'courant' ),
39
                        mode = div.data('mode') || 'prod',
55
        mode      = $div.data( 'mode' ) || 'prod',
40
                        contenu = div.html();
56
        contenu   = $div.html();
41
 
57
 
42
                // chargement de la barre
58
    // chargement de la barre
-
 
59
    var urlBarreNavigation = config[mode]['urlWidgetNavigation'];
43
                var urlBarreNavigation = config[mode]['urlWidgetNavigation'];
60
 
44
                if (squelette) {
61
    if ( squelette ) {
45
                        urlBarreNavigation += '?squelette=' + squelette;
62
      urlBarreNavigation += '?squelette=' + squelette;
-
 
63
    }
46
                }
64
 
47
                htmlBarre = $.ajax({
65
    htmlBarre = $.ajax({
48
                        url: urlBarreNavigation,
66
      url: urlBarreNavigation,
49
                        type: 'get',
67
      type: 'get',
50
                        success: function(data) {
68
      success: function( data ) {
51
                                // remplacement de la zone contenu-source
69
        // remplacement de la zone contenu-source
52
                                var zoneSource = div.find('#contenu-source');
70
        var $zoneSource = $div.find( '#contenu-source' );
53
                                if (zoneSource) {
71
        if ( $zoneSource ) {
54
                                        zoneSource.replaceWith(contenu);
72
          $zoneSource.replaceWith( contenu );
55
                                        // Chargement de sinformations de connexion SSO
73
          // Chargement des informations de connexion SSO
56
                                        var urlBaseAuth = config[mode]['urlBaseAuth'];
74
          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
                });
75
          chargerStatutSSO( urlBaseAuth );
-
 
76
        }
-
 
77
      },
-
 
78
      error: function() {
-
 
79
        $div.html( 'Erreur: impossible de charger la barre de navigation' );
-
 
80
      }
-
 
81
    });
64
        }
82
  }
Line 65... Line 83...
65
});
83
});
66
 
84
 
67
/**
85
/**
68
 * Modifie les liens des boutons de connexion / déconnexion SSO pour prendre ne compte
86
 * 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
87
 * 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)
88
 * widget de barre de navigation et pas de la page appelante)
71
 */
89
 */
72
function definirPageOrigineDansLiens() {
90
function definirPageOrigineDansLiens() {
73
        var page = window.location.href;
91
  var page = window.location.href;
74
        $('#bouton-connexion a').attr('href', $('#bouton-connexion a').attr('href') + page);
92
  $( '#bouton-connexion a' ).attr( 'href', $( '#bouton-connexion a' ).attr( 'href' ) + page );
Line 75... Line 93...
75
    $('#deconnexion a').attr('href', $('#deconnexion a').attr('href') + page);
93
  $( '#deconnexion a' ).attr( 'href', $( '#deconnexion a' ).attr( 'href' ) + page );
76
}
94
}
77
 
95
 
78
/**
96
/**
79
 * Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu
97
 * Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu
80
 * à droite de la barre en fonction
98
 * à droite de la barre en fonction
81
 */
99
 */
-
 
100
function chargerStatutSSO( urlBaseAuth ) {
-
 
101
  var urlAuth = urlBaseAuth + '/identite';
82
function chargerStatutSSO(urlBaseAuth) {
102
  // definirUtilisateur( 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvd3d3LnRlbGEtYm90YW5pY2Eub3JnIiwidG9rZW5faWQiOiJ0Yl9hdXRoIiwic3ViIjoiaWRpckB0ZWxhLWJvdGFuaWNhLm9yZyIsImlhdCI6MTU0Mjk3MjIxNiwiZXhwIjoxNTQyOTg0NDQ1LCJzY29wZXMiOlsidGVsYS1ib3RhbmljYS5vcmciXSwiaWQiOiI0NDA4NCIsInByZW5vbSI6IklkaXIiLCJub20iOiJBbGxpY2hlIiwicHNldWRvIjoiSWRpciBBbGxpY2hlIiwicHNldWRvVXRpbGlzZSI6dHJ1ZSwiaW50aXR1bGUiOiJJZGlyIEFsbGljaGUiLCJhdmF0YXIiOiJcL1wvd3d3LmdyYXZhdGFyLmNvbVwvYXZhdGFyXC83ODU3ZmY2MWE5Yjk5NWE4NjIyMzdkMmEyYzYxODAyMT9zPTUwJnI9ZyZkPW1tIiwiZ3JvdXBlcyI6W10sInBlcm1pc3Npb25zIjpbImVkaXRvciJdLCJub21XaWtpIjoiSWRpckFsbGljaGUiLCJkYXRlRGVybmllcmVNb2RpZiI6MTQ5NTIwNjM3Nn0.D3rySwuCDsSl6JAmjncwgwg4gUJijZjeaYeDYHsw3uI' );
83
        var urlAuth = urlBaseAuth + '/identite';
103
  // Prod: décommenter $.ajax ci-dessous et supprimer la ligne ci-dessus
84
        $.ajax({
104
  $.ajax({
85
            url: urlAuth,
105
    url: urlAuth,
86
            type: "GET",
106
    type: "GET",
87
            dataType: 'json',
107
    dataType: 'json',
88
            xhrFields: {
108
    xhrFields: {
89
                 withCredentials: true
109
      withCredentials: true
90
            }
110
    }
91
        }).done(function(data) {
111
  }).done( function( data ) {
92
                // connecté
112
    // connecté
Line 93... Line 113...
93
                definirUtilisateur(data.token);
113
    definirUtilisateur( data.token );
94
        });
114
  });
-
 
115
}
-
 
116
 
-
 
117
function definirUtilisateur( jeton ) {
-
 
118
  var nomComplet = '',
95
}
119
      idUtilisateur = '',
96
 
120
      courriel = '',
97
function definirUtilisateur(jeton) {
121
      nom = '',
98
        var nomComplet = '';
122
      prenom = '';
-
 
123
  if ( undefined !== jeton ) {
-
 
124
    // décodage jeton
-
 
125
    var jetonDecode = decoderJeton( jeton );
-
 
126
    nomComplet = jetonDecode.intitule;
-
 
127
    idUtilisateur = jetonDecode.id;
99
        if (jeton != undefined) {
128
    courriel = jetonDecode.sub;
100
                // décodage jeton
129
    nom = jetonDecode.nom;
101
                var jetonDecode = decoderJeton(jeton);
130
    prenom = jetonDecode.prenom;
102
                nomComplet = jetonDecode.intitule;
131
    // console.log(jetonDecode);
103
        }
132
  }
-
 
133
  // affichage
-
 
134
  $( '#bouton-connexion, #creation-compte' ).addClass( 'hidden' );
-
 
135
  $( '#utilisateur-connecte, #anonyme, #zone-courriel-confirmation, #zone-prenom-nom' ).removeClass( 'hidden' );
-
 
136
  $( '#nom-complet' ).html( nomComplet );
-
 
137
  $( '#courriel, #courriel_confirmation' ).val( courriel ).attr( 'disabled', 'disabled' );
104
        // affichage
138
  $( '#id_utilisateur' ).val( idUtilisateur );
Line 105... Line 139...
105
        $('#bouton-connexion').hide();
139
  $( '#prenom' ).val( prenom ).attr( 'disabled', 'disabled' );
106
        $('#utilisateur-connecte').show();
140
  $( '#nom' ).val( nom ).attr( 'disabled', 'disabled' );
107
        $('#nom-complet').html(nomComplet);
141
  $( '#date-releve' ).focus();
108
}
142
}
109
 
143
 
110
/**
144
/**
111
 * Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
145
 * 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
146
 * 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/
147
 * Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/
114
 * ou ceci : https://code.google.com/p/crypto-js
148
 * ou ceci : https://code.google.com/p/crypto-js
115
 */
149
 */
Line 116... Line -...
116
function decoderJeton(jeton) {
-
 
117
    parts = jeton.split('.');
-
 
118
    payload = parts[1];
150
function decoderJeton( jeton ) {
-
 
151
  parts   = jeton.split( '.' );
-
 
152
  payload = parts[1];