Subversion Repositories Applications.reseau

Rev

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

Rev 90 Rev 100
1
$(document).ready(function() {
1
$(document).ready(function() {
2
	// infobulles
2
	// infobulles
3
	$('[data-toggle="tooltip"]').tooltip();
3
	$('[data-toggle="tooltip"]').tooltip();
4
 
4
 
5
	// trucage ordre des champs pour passer du login au mdp sans passer
5
	// trucage ordre des champs pour passer du login au mdp sans passer
6
	// par le lien "oublié ?" => pas standard, c'est mal - @TODO faire mieux
6
	// par le lien "oublié ?" => pas standard, c'est mal - @TODO faire mieux
7
	// Ordre : login => mdp => oublie => s'inscrire
7
	// Ordre : login => mdp => oublie => s'inscrire
8
	$('#login').keypress(function(e) {
8
	$('#login').keypress(function(e) {
9
		if(e.keyCode == 9) {
9
		if(e.keyCode == 9) {
10
			if(! e.shiftKey) {
10
			if(! e.shiftKey) {
11
				$('#mdp').focus();
11
				$('#mdp').focus();
12
				return false;
12
				return false;
13
			}
13
			}
14
		}
14
		}
15
	});
15
	});
16
	$('#mdp').keypress(function(e) {
16
	$('#mdp').keypress(function(e) {
17
		if(e.keyCode == 9) {
17
		if(e.keyCode == 9) {
18
			if(e.shiftKey) {
18
			if(e.shiftKey) {
19
				$('#login').focus();
19
				$('#login').focus();
20
			} else {
20
			} else {
21
				$('#mdp-oublie').focus();
21
				$('#mdp-oublie').focus();
22
			}
22
			}
23
			return false;
23
			return false;
24
		}
24
		}
25
	});
25
	});
26
	$('#mdp-oublie').keypress(function(e) {
26
	$('#mdp-oublie').keypress(function(e) {
27
		if(e.keyCode == 9) {
27
		if(e.keyCode == 9) {
28
			if(e.shiftKey) {
28
			if(e.shiftKey) {
29
				$('#mdp').focus();
29
				$('#mdp').focus();
30
			} else {
30
			} else {
31
				$('#lien-inscription').focus();
31
				$('#lien-inscription').focus();
32
			}
32
			}
33
		}
33
		}
34
		return false;
34
		return false;
35
	});
35
	});
36
	$('#lien-inscription').keypress(function(e) {
36
	$('#lien-inscription').keypress(function(e) {
37
		if(e.keyCode == 9) {
37
		if(e.keyCode == 9) {
38
			if(e.shiftKey) {
38
			if(e.shiftKey) {
39
				$('#mdp-oublie').focus();
39
				$('#mdp-oublie').focus();
40
				return false;
40
				return false;
41
			}
41
			}
42
		}
42
		}
43
	});
43
	});
44
 
44
 
45
	// partenaire avec lequel se connecter
45
	// partenaire avec lequel se connecter
46
	$('#liste-fournisseurs ul li a').click(function() {
46
	$('#liste-fournisseurs ul li a').click(function() {
47
		$('#liste-fournisseurs ul li a').attr('data-focus', 'false');
47
		$('#liste-fournisseurs ul li a').attr('data-focus', 'false');
48
		$(this).attr('data-focus', 'true');
48
		$(this).attr('data-focus', 'true');
49
		var nomPartenaire = $(this).data('nom-partenaire'),
49
		var nomPartenaire = $(this).data('nom-partenaire'),
50
			urlOubliMdp = $(this).data('url-oubli-mdp'),
50
			urlOubliMdp = $(this).data('url-oubli-mdp'),
51
			loginLegende = $(this).data('login-legende'),
51
			loginLegende = $(this).data('login-legende'),
52
			loginTypeChamp = $(this).data('login-type-champ');
52
			loginTypeChamp = $(this).data('login-type-champ');
53
		$('#nom-partenaire').html(nomPartenaire);
53
		$('#nom-partenaire').html(nomPartenaire);
54
		$('#mdp-oublie').attr('href', urlOubliMdp);
54
		$('#mdp-oublie').attr('href', urlOubliMdp);
55
		$('#login').attr('type', loginTypeChamp);
55
		$('#login').attr('type', loginTypeChamp);
56
		$('#login').attr('placeholder', loginLegende);
56
		$('#login').attr('placeholder', loginLegende);
57
	});
57
	});
58
 
58
 
59
	// Connexion au SSO
59
	// Connexion au SSO
60
	$('#formulaire-identification').submit(function() {
60
	$('#formulaire-identification').submit(function() {
61
		connecterUtilisateur();
61
		connecterUtilisateur();
62
		return false;
62
		return false;
63
	});
63
	});
64
 
64
 
65
	// Déconnexion du SSO
65
	// Déconnexion du SSO
66
	$('#deconnexion').click(function() {
66
	$('#deconnexion').click(function() {
67
		deconnecterUtilisateur();
67
		deconnecterUtilisateur();
68
		return false;
68
		return false;
69
	});
69
	});
70
 
70
 
71
	// vérification de l'état au chargement
71
	// vérification de l'état au chargement
72
	var urlAuth = baseUrlAuth + '/identite';
72
	var urlAuth = baseUrlAuth + '/identite';
73
	$.ajax({
73
	$.ajax({
74
	    url: urlAuth,
74
	    url: urlAuth,
75
	    type: "GET",
75
	    type: "GET",
76
	    dataType: 'json',
76
	    dataType: 'json',
77
	    xhrFields: {
77
	    xhrFields: {
78
	         withCredentials: true
78
	         withCredentials: true
79
	    }
79
	    }
80
	}).done(function(data) {
80
	}).done(function(data) {
81
		// connecté
81
		// connecté
82
		definirUtilisateur(data.token);
82
		definirUtilisateur(data.token);
83
		afficherPanneauBienvenue();
83
		afficherPanneauBienvenue();
84
	})
84
	})
85
	.fail(function(error) {
85
	.fail(function(error) {
86
		// non connecté
86
		// non connecté
87
		afficherPanneauIdentification();
87
		afficherPanneauIdentification();
88
	});
88
	});
89
 
89
 
90
	// exécuter une action si définie (par ex: déconnexion)
90
	// exécuter une action si définie (par ex: déconnexion)
91
	executerAction();
91
	executerAction();
92
});
92
});
93
 
93
 
94
/**
94
/**
95
 * Connecte l'utilisateur au SSO
95
 * Connecte l'utilisateur au SSO
96
 */
96
 */
97
function connecterUtilisateur() {
97
function connecterUtilisateur() {
98
	var login = $('#login').val(),
98
	var login = $('#login').val(),
99
		mdp = $('#mdp').val();
99
		mdp = $('#mdp').val();
100
	if (login == '' || mdp == '') {
100
	if (login == '' || mdp == '') {
101
		alert('Veuillez entrer votre login et votre mot de passe');
101
		alert('Veuillez entrer votre login et votre mot de passe');
102
	} else {
102
	} else {
103
		var urlAuth = baseUrlAuth + '/connexion?login=' + login + '&password=' + mdp;
103
		var urlAuth = baseUrlAuth + '/connexion?login=' + login + '&password=' + mdp;
104
		// partenaire ?
104
		// partenaire ?
105
		var codePartenaire = $('#liste-fournisseurs a[data-focus="true"]').data('code-partenaire');
105
		var codePartenaire = $('#liste-fournisseurs a[data-focus="true"]').data('code-partenaire');
106
		if (codePartenaire != undefined) {
106
		if (codePartenaire != undefined) {
107
			urlAuth += '&partner=' + codePartenaire;
107
			urlAuth += '&partner=' + codePartenaire;
108
		}
108
		}
109
		$.ajax({
109
		$.ajax({
110
		    url: urlAuth,
110
		    url: urlAuth,
111
		    type: "GET",
111
		    type: "GET",
112
		    dataType: 'json',
112
		    dataType: 'json',
113
		    xhrFields: {
113
		    xhrFields: {
114
		         withCredentials: true
114
		         withCredentials: true
115
		    }
115
		    }
116
		})
116
		})
117
		.done(function(data) {
117
		.done(function(data) {
118
			rediriger();
118
			rediriger();
119
			definirUtilisateur(data.token);
119
			definirUtilisateur(data.token);
120
			afficherPanneauBienvenue();
120
			afficherPanneauBienvenue();
121
			masquerErreurs();
121
			masquerErreurs();
122
		})
122
		})
123
		.fail(function(error) {
123
		.fail(function(error) {
124
			afficherErreurLogin();
124
			afficherErreurLogin();
125
		});
125
		});
126
	}
126
	}
127
}
127
}
128
 
128
 
129
/**
129
/**
130
 * Déconnecte l'utilisateur du SSO
130
 * Déconnecte l'utilisateur du SSO
131
 */
131
 */
132
function deconnecterUtilisateur() {
132
function deconnecterUtilisateur() {
133
	var urlAuth = baseUrlAuth + '/deconnexion';
133
	var urlAuth = baseUrlAuth + '/deconnexion';
134
	$.ajax({
134
	$.ajax({
135
	    url: urlAuth,
135
	    url: urlAuth,
136
	    type: "GET",
136
	    type: "GET",
137
	    dataType: 'json',
137
	    dataType: 'json',
138
	    xhrFields: {
138
	    xhrFields: {
139
	         withCredentials: true
139
	         withCredentials: true
140
	    }
140
	    }
141
	})
141
	})
142
	.done(function(data) {
142
	.done(function(data) {
143
		rediriger();
143
		rediriger();
144
		definirUtilisateur();
144
		definirUtilisateur();
145
		afficherPanneauIdentification();
145
		afficherPanneauIdentification();
146
		masquerErreurs();
146
		masquerErreurs();
147
	})
147
	})
148
	.fail(function(error) {
148
	.fail(function(error) {
149
		// @TODO gérer l'affichage de l'erreur, mais pas facile à placer
149
		// @TODO gérer l'affichage de l'erreur, mais pas facile à placer
150
		// dans l'interface actuelle sans que ce soit moche
150
		// dans l'interface actuelle sans que ce soit moche
151
		//afficherErreurServeur();
151
		//afficherErreurServeur();
152
	});
152
	});
153
}
153
}
154
 
154
 
155
/**
155
/**
156
 * Si la variable "action" est définie (provenant du paramètre GET "origine"),
156
 * Si la variable "action" est définie (provenant du paramètre GET "origine"),
157
 * exécute l'action associée (par ex: déconnexion)
157
 * exécute l'action associée (par ex: déconnexion)
158
 */
158
 */
159
function executerAction() {
159
function executerAction() {
160
	switch (action) {
160
	switch (action) {
161
		case "deconnexion":
161
		case "deconnexion":
162
			deconnecterUtilisateur();
162
			deconnecterUtilisateur();
163
			break;
163
			break;
164
		default :
164
		default :
165
			// on ne fait rien
165
			// on ne fait rien
166
	}
166
	}
167
}
167
}
168
 
168
 
169
function definirUtilisateur(jeton) {
169
function definirUtilisateur(jeton) {
170
	var nomComplet = '';
170
	var nomComplet = '';
171
	if (jeton != undefined) {
171
	if (jeton != undefined) {
172
		// décodage jeton
172
		// décodage jeton
173
		var jetonDecode = decoderJeton(jeton);
173
		var jetonDecode = decoderJeton(jeton);
174
		nomComplet = jetonDecode.intitule;
174
		nomComplet = jetonDecode.intitule;
175
		email = jetonDecode.sub;
175
		email = jetonDecode.sub;
176
	}
176
	}
177
	// affichage
177
	// affichage
178
	$('#nom-complet').html(nomComplet);
178
	$('#nom-complet').html(nomComplet);
179
	$('#nom-complet').attr('title', email);
179
	$('#nom-complet').attr('title', email);
180
}
180
}
181
 
181
 
182
/**
182
/**
-
 
183
 * Décodage "url-safe" des chaînes base64 retournées par le SSO (lib jwt)
-
 
184
 */
-
 
185
function b64d(input) {
-
 
186
	var remainder = input.length % 4;
-
 
187
	if (remainder != 0) {
-
 
188
		var padlen = 4 - remainder;
-
 
189
		for (var i=0; i < padlen; i++) {
-
 
190
			input += '=';
-
 
191
		}
-
 
192
	}
-
 
193
	input = input.replace('-', '+');
-
 
194
	input = input.replace('_', '/');
-
 
195
	return atob(input);
-
 
196
}
-
 
197
 
-
 
198
/**
183
 * Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
199
 * Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
184
 * JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple
200
 * JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple
185
 * Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/
-
 
186
 * ou ceci : https://code.google.com/p/crypto-js
-
 
187
 */
201
 */
188
function decoderJeton(jeton) {
202
function decoderJeton(jeton) {
189
	parts = jeton.split('.');
203
	parts = jeton.split('.');
190
	payload = parts[1];
204
	payload = parts[1];
-
 
205
 
191
	payload = atob(payload);
206
	payload = b64d(payload);
192
	payload = JSON.parse(payload, true);
207
	payload = JSON.parse(payload, true);
193
 
208
 
194
	return payload;
209
	return payload;
195
}
210
}
196
 
211
 
197
/**
212
/**
198
 * Si la variable "origine" est définie (provenant du paramètre GET "origine"),
213
 * Si la variable "origine" est définie (provenant du paramètre GET "origine"),
199
 * redirige l'utilisateur vers cette page
214
 * redirige l'utilisateur vers cette page
200
 */
215
 */
201
function rediriger() {
216
function rediriger() {
202
	if (origine != '') {
217
	if (origine != '') {
203
		window.location.href = origine;
218
		window.location.href = origine;
204
	}
219
	}
205
}
220
}
206
 
221
 
207
function afficherPanneauIdentification() {
222
function afficherPanneauIdentification() {
208
	$('#panneau-identification').show();
223
	$('#panneau-identification').show();
209
	$('#panneau-bienvenue').hide();
224
	$('#panneau-bienvenue').hide();
210
	$('.boite-centre').addClass('reduite');
225
	$('.boite-centre').addClass('reduite');
211
}
226
}
212
 
227
 
213
function afficherPanneauBienvenue() {
228
function afficherPanneauBienvenue() {
214
	$('#panneau-identification').hide();
229
	$('#panneau-identification').hide();
215
	$('#panneau-bienvenue').show();
230
	$('#panneau-bienvenue').show();
216
	$('.boite-centre').removeClass('reduite');
231
	$('.boite-centre').removeClass('reduite');
217
}
232
}
218
 
233
 
219
function afficherErreurLogin() {
234
function afficherErreurLogin() {
220
	$('#info-erreur-login').show();
235
	$('#info-erreur-login').show();
221
}
236
}
222
 
237
 
223
function afficherErreurServeur() {
238
function afficherErreurServeur() {
224
	$('#info-erreur-serveur').show();
239
	$('#info-erreur-serveur').show();
225
}
240
}
226
 
241
 
227
function masquerErreurs() {
242
function masquerErreurs() {
228
	$('.info-erreur').hide();
243
	$('.info-erreur').hide();
229
}
244
}