Subversion Repositories eFlore/Applications.cel

Rev

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

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