Subversion Repositories eFlore/Applications.cel

Rev

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

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