Subversion Repositories eFlore/Applications.cel

Rev

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

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