Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 3260 Rev 3271
1
// configuration
1
// configuration
2
var urlRacine = window.location.origin;
2
var urlRacine = window.location.origin;
3
 
3
 
4
$( document ).ready( function() {
4
$( document ).ready( function() {
-
 
5
  $( '#form-observateur' )[0].reset();
5
  var mode = $( '#tb-observateur' ).data( 'mode' ) || 'prod',
6
  var mode = $( '#tb-observateur' ).data( 'mode' ) || 'prod',
6
      urlBaseAuth = urlRacine + '/service:annuaire:auth';
7
      urlBaseAuth = urlRacine + '/service:annuaire:auth';
7
 
8
 
8
  chargerStatutSSO( urlBaseAuth, mode );
9
  chargerStatutSSO( urlBaseAuth, mode );
9
  $( '#deconnexion a' ).click( function() {
10
  $( '#deconnexion a' ).click( function() {
10
    deconnecterUtilisateur( urlBaseAuth, mode );
11
    deconnecterUtilisateur( urlBaseAuth, mode );
11
  });
12
  });
12
});
13
});
13
 
14
 
14
/**
15
/**
15
 * Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu
16
 * Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu
16
 * à droite de la barre en fonction
17
 * à droite de la barre en fonction
17
 */
18
 */
18
function chargerStatutSSO( urlBaseAuth, mode ) {
19
function chargerStatutSSO( urlBaseAuth, mode ) {
19
  var urlAuth = urlBaseAuth + '/identite';
20
  var urlAuth = urlBaseAuth + '/identite';
20
 
21
 
21
  if( 'local' !== mode ) {
22
  if( 'local' !== mode ) {
22
    connexion( urlAuth, true );
23
    connexion( urlAuth, true );
23
  } else {
24
  } else {
24
    urlAuth = urlRacine + '/widget:cel:modules/apa/test-token.json';
25
    urlAuth = urlRacine + '/widget:cel:modules/saisie2/test-token.json';
25
    $( '#connexion' ).click( function() {
26
    $( '#connexion' ).click( function() {
26
      connexion( urlAuth, true );
27
      connexion( urlAuth, true );
27
      return false;
28
      return false;
28
    });
29
    });
29
  }
30
  }
30
}
31
}
31
 
32
 
32
/**
33
/**
33
 * Déconnecte l'utilisateur du SSO
34
 * Déconnecte l'utilisateur du SSO
34
 */
35
 */
35
function deconnecterUtilisateur( urlBaseAuth, mode ) {
36
function deconnecterUtilisateur( urlBaseAuth, mode ) {
36
  if( 'local' === mode ) {
37
  if( 'local' === mode ) {
37
    definirUtilisateur( undefined );
38
    definirUtilisateur( undefined );
38
    window.location.reload();
39
    window.location.reload();
39
    return;
40
    return;
40
  }
41
  }
41
 
42
 
42
  var urlAuth = urlBaseAuth + '/deconnexion';
43
  var urlAuth = urlBaseAuth + '/deconnexion';
43
 
44
 
44
  connexion( urlAuth, false );
45
  connexion( urlAuth, false );
45
}
46
}
46
 
47
 
47
function connexion( urlAuth, connexionOnOff ) {
48
function connexion( urlAuth, connexionOnOff ) {
48
  $.ajax({
49
  $.ajax({
49
    url: urlAuth,
50
    url: urlAuth,
50
    type: "GET",
51
    type: "GET",
51
    dataType: 'json',
52
    dataType: 'json',
52
    xhrFields: {
53
    xhrFields: {
53
      withCredentials: true
54
      withCredentials: true
54
    }
55
    }
55
  })
56
  })
56
  .done( function( data ) {
57
  .done( function( data ) {
57
    if( connexionOnOff ) {
58
    if( connexionOnOff ) {
58
      // connecté
59
      // connecté
59
      definirUtilisateur( data.token );
60
      definirUtilisateur( data.token );
60
    } else {
61
    } else {
61
      definirUtilisateur();
62
      definirUtilisateur();
62
      window.location.reload();
63
      window.location.reload();
63
    }
64
    }
64
  })
65
  })
65
  .fail( function( error ) {
66
  .fail( function( error ) {
66
    // @TODO gérer l'affichage de l'erreur, mais pas facile à placer
67
    // @TODO gérer l'affichage de l'erreur, mais pas facile à placer
67
    // dans l'interface actuelle sans que ce soit moche
68
    // dans l'interface actuelle sans que ce soit moche
68
    //afficherErreurServeur();
69
    //afficherErreurServeur();
69
  });
70
  });
70
}
71
}
71
 
-
 
72
 
72
 
73
function definirUtilisateur( jeton ) {
73
function definirUtilisateur( jeton ) {
74
  var idUtilisateur = '',
74
  var idUtilisateur = '',
75
      nomComplet    = '',
75
      nomComplet    = '',
76
      courriel      = '',
76
      courriel      = '',
-
 
77
      pseudo        = '',
77
      prenom        = '',
78
      prenom        = '',
78
      nom           = '';
79
      nom           = '';
79
 
80
 
80
  // affichage
81
  // affichage
81
  if ( undefined !== jeton ) {
82
  if ( undefined !== jeton ) {
82
    // décodage jeton
83
    // décodage jeton
83
    var jetonDecode = decoderJeton( jeton );
84
    var jetonDecode = decoderJeton( jeton );
84
    // console.log(jetonDecode);
85
    console.log(jetonDecode);
85
 
86
 
86
    idUtilisateur = jetonDecode.id;
87
    idUtilisateur = jetonDecode.id;
87
    nomComplet    = jetonDecode.intitule;
88
    nomComplet    = jetonDecode.intitule;
88
    courriel      = jetonDecode.sub;
89
    courriel      = jetonDecode.sub;
-
 
90
    pseudo        = jetonDecode.pseudo;
89
    prenom        = jetonDecode.prenom;
91
    prenom        = jetonDecode.prenom;
90
    nom           = jetonDecode.nom;
92
    nom           = jetonDecode.nom;
91
    $( '#courriel, #courriel_confirmation' ).attr( 'disabled', 'disabled' );
93
    $( '#courriel, #courriel_confirmation' ).attr( 'disabled', 'disabled' );
92
    $( '#prenom' ).attr( 'disabled', 'disabled' );
94
    $( '#prenom' ).attr( 'disabled', 'disabled' );
93
    $( '#nom' ).attr( 'disabled', 'disabled' );
95
    $( '#nom' ).attr( 'disabled', 'disabled' );
94
    $( '#bouton-connexion, #creation-compte' ).addClass( 'hidden' );
96
    $( '#bouton-connexion, #creation-compte' ).addClass( 'hidden' );
95
    $( '#utilisateur-connecte, #anonyme, #zone-courriel-confirmation, #zone-prenom-nom' ).removeClass( 'hidden' );
97
    $( '#utilisateur-connecte, #anonyme, #zone-courriel-confirmation, #zone-prenom-nom' ).removeClass( 'hidden' );
96
    $( '#date-releve' ).focus();
98
    $( '#date-releve' ).focus();
97
  }
99
  }
98
  $( '.warning' ).remove();
100
  $( '.warning' ).remove();
99
  $( '#nom-complet' ).html( nomComplet );
101
  $( '#nom-complet' ).html( nomComplet );
100
  $( '#courriel, #courriel_confirmation' ).val( courriel );
102
  $( '#courriel, #courriel_confirmation' ).val( courriel );
-
 
103
  $( '#profil-utilisateur a' ).attr( 'href', urlProfilUtilisateur( pseudo ) );
101
  $( '#id_utilisateur' ).val( idUtilisateur );
104
  $( '#id_utilisateur' ).val( idUtilisateur );
102
  $( '#prenom' ).val( prenom );
105
  $( '#prenom' ).val( prenom );
103
  $( '#nom' ).val( nom );
106
  $( '#nom' ).val( nom );
104
}
107
}
105
 
108
 
106
/**
109
/**
107
 * Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
110
 * Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
108
 * JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple
111
 * JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple
109
 */
112
 */
110
function decoderJeton( jeton ) {
113
function decoderJeton( jeton ) {
111
  parts = jeton.split( '.' );
114
  parts = jeton.split( '.' );
112
  payload = parts[1];
115
  payload = parts[1];
113
  payload = b64d( payload );
116
  payload = b64d( payload );
114
  payload = JSON.parse( payload, true );
117
  payload = JSON.parse( payload, true );
115
  return payload;
118
  return payload;
116
}
119
}
117
 
120
 
118
/**
121
/**
119
 * Décodage "url-safe" des chaînes base64 retournées par le SSO (lib jwt)
122
 * Décodage "url-safe" des chaînes base64 retournées par le SSO (lib jwt)
120
 */
123
 */
121
function b64d( input ) {
124
function b64d( input ) {
122
  var remainder = input.length % 4;
125
  var remainder = input.length % 4;
123
 
126
 
124
  if ( 0 !== remainder ) {
127
  if ( 0 !== remainder ) {
125
    var padlen = 4 - remainder;
128
    var padlen = 4 - remainder;
126
 
129
 
127
    for ( var i = 0; i < padlen; i++ ) {
130
    for ( var i = 0; i < padlen; i++ ) {
128
      input += '=';
131
      input += '=';
129
    }
132
    }
130
  }
133
  }
131
  input = input.replace( '-', '+' );
134
  input = input.replace( '-', '+' );
132
  input = input.replace( '_', '/' );
135
  input = input.replace( '_', '/' );
133
  return atob( input );
136
  return atob( input );
134
}
137
}
-
 
138
 
-
 
139
function urlProfilUtilisateur( pseudo ) {
-
 
140
  var mode = $( '#tb-observateur' ).data( 'mode' ) || 'prod';
-
 
141
  var urlPart = ( 'prod' === mode ) ? 'www.tela-botanica.org/' : 'beta.tela-botanica.org/test/';
-
 
142
 
-
 
143
  return 'https://' + urlPart + 'membres/' + pseudo.toLowerCase().replace( ' ', '-' );
-
 
144
}