Subversion Repositories eFlore/Applications.cel

Rev

Rev 3208 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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