Subversion Repositories eFlore/Applications.coel

Rev

Rev 1732 | Rev 1908 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1732 Rev 1906
Line 1... Line 1...
1
package org.tela_botanica.client.modeles;
1
package org.tela_botanica.client.modeles;
Line -... Line 2...
-
 
2
 
-
 
3
import java.util.HashMap;
-
 
4
 
2
 
5
import org.tela_botanica.client.Coel;
3
import org.tela_botanica.client.RegistreId;
6
import org.tela_botanica.client.RegistreId;
4
import org.tela_botanica.client.http.JsonRestRequestBuilder;
7
import org.tela_botanica.client.http.JsonRestRequestBuilder;
5
import org.tela_botanica.client.http.JsonRestRequestCallback;
8
import org.tela_botanica.client.http.JsonRestRequestCallback;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
9
import org.tela_botanica.client.interfaces.Rafraichissable;
Line 7... Line 10...
7
import org.tela_botanica.client.util.UtilDAO;
10
import org.tela_botanica.client.util.UtilDAO;
8
 
11
 
-
 
12
import com.extjs.gxt.ui.client.Registry;
9
import com.extjs.gxt.ui.client.Registry;
13
import com.google.gwt.http.client.Request;
10
import com.google.gwt.core.client.GWT;
14
import com.google.gwt.http.client.Response;
-
 
15
import com.google.gwt.json.client.JSONArray;
-
 
16
import com.google.gwt.json.client.JSONBoolean;
11
import com.google.gwt.json.client.JSONArray;
17
import com.google.gwt.json.client.JSONNumber;
12
import com.google.gwt.json.client.JSONBoolean;
18
import com.google.gwt.json.client.JSONObject;
-
 
19
import com.google.gwt.json.client.JSONString;
Line 13... Line 20...
13
import com.google.gwt.json.client.JSONString;
20
import com.google.gwt.json.client.JSONValue;
14
import com.google.gwt.json.client.JSONValue;
21
import com.google.gwt.user.client.Timer;
15
 
22
 
16
/**
23
/**
Line 21... Line 28...
21
	private static final String SERVICE_NOM = "CoelUtilisateur";
28
	private static final String SERVICE_NOM = "CoelUtilisateur";
Line 22... Line 29...
22
	
29
	
23
	private Utilisateur utilisateur = null;
30
	private Utilisateur utilisateur = null;
Line -... Line 31...
-
 
31
	private Rafraichissable vueARafraichir = null;
-
 
32
 
24
	private Rafraichissable vueARafraichir = null;
33
	private static Timer rafraichisseurJeton = null;
25
	
34
	
26
	/**
35
	/**
27
	 * Constructeur
36
	 * Constructeur
28
	 * @param retour : méthode appellée en retour d'appel. 
37
	 * @param retour : méthode appellée en retour d'appel. 
29
	 */
38
	 */
30
	public UtilisateurAsyncDao(Rafraichissable vueARafraichirCourrante) {
39
	public UtilisateurAsyncDao(Rafraichissable vueARafraichirCourrante) {
31
		vueARafraichir = vueARafraichirCourrante;
40
		vueARafraichir = vueARafraichirCourrante;
Line 32... Line 41...
32
		utilisateur = (Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT);
41
		utilisateur = (Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT);
33
	}
42
	}
-
 
43
 
-
 
44
	/**
-
 
45
	 * Recupere des informations d'authentification à partir du JSON renvoyé par les
-
 
46
	 * services Auth de l'annuaire (SSO)
34
		
47
	 * 
-
 
48
	 * @param valeurJson
-
 
49
	 * @return AuthInfo
-
 
50
	 */
-
 
51
	public static AuthInfo parserAuthJson(JSONValue valeurJson) {
-
 
52
		AuthInfo authInfo = new AuthInfo();
-
 
53
		JSONObject authJson = valeurJson.isObject();
-
 
54
 
-
 
55
		JSONValue erreurJSON = authJson.get("error");
-
 
56
		// test si erreur
-
 
57
		if (erreurJSON != null) {
-
 
58
			JSONString erreur = erreurJSON.isString();
-
 
59
			if (erreur != null) {
-
 
60
				authInfo.error = erreur.stringValue();
-
 
61
			} else {
-
 
62
				authInfo.error = "erreur d'authentification";
-
 
63
			}
-
 
64
		} else {
-
 
65
			boolean session = authJson.get("session").isBoolean().booleanValue();
-
 
66
			authInfo.session = session;
-
 
67
			// test si session ouverte
-
 
68
			if (session) {
-
 
69
				JSONValue tokenJson = authJson.get("token");
-
 
70
				String token = null;
35
	/**
71
				// protection paranoïaque
-
 
72
				if (tokenJson != null) {
-
 
73
					JSONString tokenString = tokenJson.isString();
-
 
74
					if (tokenString != null) {
-
 
75
						token = tokenString.stringValue();
36
	 * Méthode de classe d'appel du service des gestion d'identification. 
76
					}
-
 
77
				}
-
 
78
				String tokenId = authJson.get("token_id").isString().stringValue();
-
 
79
				int duration = (int) authJson.get("duration").isNumber().doubleValue();
-
 
80
				JSONValue lastModifJson = authJson.get("last_modif");
-
 
81
 
-
 
82
				authInfo.token = token;
-
 
83
				authInfo.tokenId = tokenId;
-
 
84
				authInfo.duration = duration;
-
 
85
				// test si lastModif est null
-
 
86
				if (lastModifJson != null) {
-
 
87
					JSONNumber lastModif = lastModifJson.isNumber();
-
 
88
					if (lastModif != null) {
-
 
89
						authInfo.lastModif = (int) lastModif.doubleValue();
-
 
90
					}
-
 
91
				}
-
 
92
			}
-
 
93
		}
-
 
94
		
-
 
95
		return authInfo;
-
 
96
	}
-
 
97
 
-
 
98
	/**
-
 
99
	 * Enregistre le jeton (potentiellement NULL), sa durée de vie; appelle le service Coel pour
-
 
100
	 * obtenir les données de l'utilisateur relatives à l'application; lorsque le jeton
-
 
101
	 * n'est pas nul et que sa durée de vie est spécifiée, déclenche un rafraîchissement
-
 
102
	 * périodique du jeton
-
 
103
	 * 
-
 
104
	 * @param objetRetour le retour de l'appel au service annuaire:auth (connexion, deconnexion ou identite)
-
 
105
	 */
37
	 */
106
	protected void gererRetourAuthInfo(AuthInfo objetRetour) {
-
 
107
		// Stockage du jeton rafraîchi et de sa durée (pourrait avoir changé)
-
 
108
		Utilisateur.setJeton(objetRetour.token);
-
 
109
		Utilisateur.setDureeJeton(objetRetour.duration);
-
 
110
 
-
 
111
		// Rafraîchissement automatique du jeton - s'annule lorsque le jeton devient nul
-
 
112
		if (Utilisateur.getJeton() != null && Utilisateur.getDureeJeton() > 0) {
-
 
113
			if (rafraichisseurJeton == null) { // on sait jamais
-
 
114
				// 3/4 de la durée de vie du jeton, en millisecondes (ça laisse de la marge)
38
	public void getEtatUtilisateur() {
115
				int delaiRepetition = (Utilisateur.getDureeJeton() * 1000) * 3 / 4;
39
		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM);
116
				delaiRepetition = 10000; // debug
40
		rb.envoyerRequete(null, new JsonRestRequestCallback() {
-
 
41
			@Override
117
				rafraichisseurJeton = new Timer() {
42
			public void surReponse(JSONValue responseValue) {
118
					@Override
43
				if (responseValue.isArray() != null) {
-
 
44
					final JSONArray reponse = responseValue.isArray();
-
 
45
					// Identifiant utilisateur ou identifiant de session si non identifié
-
 
46
					String login = ((JSONString) reponse.get(2)).stringValue();
-
 
47
					// Drapeau leve si utilisateur deja identifié
119
					public void run() {
48
					boolean identifie = ((JSONBoolean) reponse.get(3)).booleanValue();
-
 
49
					utilisateur.setIdentification(identifie);
120
						//Coel.LogVersFirebug("rafraichir utilisateur");
-
 
121
						// Appel de l'annuaire pour rafraîchir le jeton (cb nul pour l'instant)
-
 
122
						getEtatUtilisateur();
-
 
123
					}
-
 
124
				};
-
 
125
				rafraichisseurJeton.scheduleRepeating(delaiRepetition);
-
 
126
			}
-
 
127
		} else {
50
					utilisateur.setLogin(login);
128
			if (rafraichisseurJeton != null) { // on sait jamais non plus
51
					vueARafraichir.rafraichir(utilisateur);
129
				rafraichisseurJeton.cancel();
-
 
130
				rafraichisseurJeton = null;
-
 
131
			}
-
 
132
		}
-
 
133
 
52
				}
134
		// Obtention de l'utilisateur final d'après le service de préférences
Line 53... Line 135...
53
			}
135
		//Coel.LogVersFirebug("va chercher utilisateur Coel");
54
		});
136
		getEtatUtilisateurSansAnnuaire();
55
	}
137
	}
56
 
138
 
57
	/**
139
	/**
58
	 * Méthode déconnectant un utilisateur de l'application. 
140
	 * Méthode déconnectant un utilisateur de l'application. 
59
	 * @param identifiant de l'utilisateur à déconnecter.
-
 
60
	 */
141
	 * @param identifiant de l'utilisateur à déconnecter.
61
	public void deconnecterUtilisateur() {
142
	 */
62
		String[] parametres = {utilisateur.getId()};
143
	public void deconnecterUtilisateur() {
63
		
144
		//Coel.LogVersFirebug("deconnexion");
64
		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres);
-
 
65
		rb.envoyerRequete(null, new JsonRestRequestCallback() {
145
		final JsonRestRequestBuilder rb = UtilDAO.construireRequeteAuth("deconnexion", null);
66
			@Override
-
 
67
			public void surReponse(JSONValue responseValue) {
146
		rb.envoyerRequete(null, new JsonRestRequestCallback() {
68
				if (responseValue.isArray() != null) {
147
			@Override
69
					final JSONArray reponse = responseValue.isArray();
-
 
-
 
148
			public void surReponse(JSONValue responseValue) {
-
 
149
				//Coel.LogVersFirebug(responseValue.toString());
-
 
150
				AuthInfo info = parserAuthJson(responseValue);
Line -... Line 151...
-
 
151
				gererRetourAuthInfo(info);
-
 
152
			}
-
 
153
		});
70
					// Identifiant utilisateur ou identifiant de session si non identifié
154
	}
-
 
155
	
71
					String id = ((JSONString) reponse.get(1)).stringValue();
156
	/**
-
 
157
	 * Méthode connectant un utilisateur à l'application
-
 
158
	 */
-
 
159
	public void connecterUtilisateur() {
Line -... Line 160...
-
 
160
		HashMap<String, String> parametres = new HashMap<String, String>();
-
 
161
		parametres.put("login", utilisateur.getLogin());
72
					// Drapeau levé si l'utilisateur est déjà identifié
162
		parametres.put("password", utilisateur.getMotDePasse());
73
					boolean identifie = ((JSONBoolean) reponse.get(2)).booleanValue();
163
		//Coel.LogVersFirebug("connexion");
74
					
164
		final JsonRestRequestBuilder rb = UtilDAO.construireRequeteAuth("connexion", parametres);
75
					// Nous réinitialisons l'utilisateur
165
		
76
					utilisateur = new Utilisateur(id, identifie);
166
		rb.envoyerRequete(null, new JsonRestRequestCallback() {
77
					
167
			@Override
Line 78... Line 168...
78
					GWT.log(utilisateur.toString(), null);
168
			public void surReponse(JSONValue responseValue) {
79
					vueARafraichir.rafraichir(utilisateur);
169
				AuthInfo info = parserAuthJson(responseValue);
80
				}
-
 
81
			}
170
				gererRetourAuthInfo(info);
82
		});
171
			}
83
	}
172
		});
-
 
173
	}
Line -... Line 174...
-
 
174
 
-
 
175
	/**
-
 
176
	 * Va chercher les infos de l'utilisateur en vérifiant d'abord l'identité auprès de l'annuaire
-
 
177
	 */
-
 
178
	public void getEtatUtilisateur() {
-
 
179
		getEtatUtilisateur(false);
-
 
180
	}
-
 
181
 
-
 
182
	/**
-
 
183
	 * Va chercher les infos de l'utilisateur; si ignorerAnnuaire est false, vérifiera d'abord
-
 
184
	 * l'identité auprès de l'annuaire (service annuaire:auth/identite)
84
	
185
	 */
-
 
186
	public void getEtatUtilisateur(boolean ignorerAnnuaire) {
-
 
187
		// par défaut, on appelle d'abord le service auth/identite de l'annuaire, afin de connaître
-
 
188
		// le statut de l'utilisateur vis à vis du SSO (connecté ou non) et rafraîchir le jeton
-
 
189
		if (! ignorerAnnuaire) {
-
 
190
			//Coel.LogVersFirebug("get état");
-
 
191
			// sans header Authorization, sinon une déconnexion depuis une autre appli ne sera pas
-
 
192
			// prise en compte et le jeton sera rafraîchi indéfiniment
-
 
193
			final JsonRestRequestBuilder rb = UtilDAO.construireRequeteAuth("identite", null, false);
-
 
194
			rb.envoyerRequete(null, new JsonRestRequestCallback() {
-
 
195
				@Override
-
 
196
				public void surReponse(JSONValue responseValue) {
-
 
197
					AuthInfo info = parserAuthJson(responseValue);
-
 
198
					gererRetourAuthInfo(info);
-
 
199
				}
-
 
200
				@Override
-
 
201
				public void onErrorHTTP(Request request, Response reponse) {
-
 
202
					// Si on a été déconnecté, on va chercher un profil utilisateur "anonyme" et
Line -... Line 203...
-
 
203
					// on avertit l'interface
-
 
204
					gererRetourAuthInfo(new AuthInfo());
-
 
205
				}
-
 
206
			});
-
 
207
		} else { // sinon on optimise, quand on vient de se (de)connecter, pas la peine de rappeler l'annuaire
-
 
208
			getEtatUtilisateurSansAnnuaire();
85
	/**
209
		}
86
	 * Méthode connectant un utilisateur à l'application. 
210
	}
87
	 * @param Utilisateur l'utilisateur courant.
211
 
88
	 */
212
	/**
89
	public void connecterUtilisateur() {
213
	 * Va chercher les infos de l'utilisateur Coel sans vérifier l'identité auprès de l'annuaire;
-
 
214
	 * transmet un jeton SSO à chaque fois pour que le service se base dessus
-
 
215
	 */
-
 
216
	public void getEtatUtilisateurSansAnnuaire() {
-
 
217
		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM);
-
 
218
		rb.envoyerRequete(null, new JsonRestRequestCallback() {
-
 
219
			@Override
-
 
220
			public void surReponse(JSONValue responseValue) {
-
 
221
				//Coel.LogVersFirebug("réponse reçue");
-
 
222
				JSONArray reponse = responseValue.isArray();
Line 90... Line 223...
90
		String[] parametres = {utilisateur.getLogin(), utilisateur.getMotDePasse()};
223
				if (reponse != null) {
91
		
224
					// Identifiant utilisateur ou identifiant de session si non identifié
92
		final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres);
225
					String login = ((JSONString) reponse.get(1)).stringValue();
93
		
226
 
94
		rb.envoyerRequete(null, new JsonRestRequestCallback() {
227
					// Drapeau leve si utilisateur deja identifié
95
			@Override
228
					boolean identifie = ((JSONBoolean) reponse.get(2)).booleanValue();
Line 96... Line 229...
96
			public void surReponse(JSONValue responseValue) {
229
 
-
 
230
					utilisateur.setIdentification(identifie);
-
 
231
					utilisateur.setLogin(login);
Line -... Line 232...
-
 
232
 
-
 
233
					//Ajout des informations licence
-
 
234
					if (reponse.get(0).isString() != null)	{
97
				if (responseValue.isArray() != null) {
235
						utilisateur.setLicence(reponse.get(0).isString().stringValue());
98
					final JSONArray reponse = responseValue.isArray();
236
					} else {
99
					
-
 
100
					//Ajout des informations licence
237
						utilisateur.setLicence("");						
101
					if (reponse.get(0).isString() != null)	{
238
					}
Line 102... Line -...
102
						utilisateur.setLicence(reponse.get(0).isString().stringValue());
-
 
103
					} else {
-
 
104
						utilisateur.setLicence("");						
239
 
105
					}
240
					//Coel.LogVersFirebug("Utilisateur CoeL chargé !!");
106
					
241
					//Coel.LogVersFirebug("id: " + identifie + ", login: " + login + ", licence: " + utilisateur.getLicence());
-
 
242
					//Coel.LogVersFirebug("Taille réponse:" + reponse.size());
-
 
243
 
107
					if (reponse.size() > 0) {
244
					// Utilisateur connecté (non anonyme)
108
						
245
					if (reponse.size() > 3) {
109
						// Identifiant de l'utilisateur ou identifiant de session si non identifié
246
						//Coel.LogVersFirebug("Utilisateur identifié, on charge plus de trucs !");
110
						utilisateur.setId(((JSONString) reponse.get(1)).stringValue());
247
						// Identifiant de l'utilisateur ou identifiant de session si non identifié
-
 
248
						String idUtilisateur = ((JSONString) reponse.get(1)).stringValue();
-
 
249
						//Coel.LogVersFirebug("ID utilisateur: " + idUtilisateur);
111
					
250
						utilisateur.setId(idUtilisateur);
112
						// Drapeau levé si l'utilisateur est déjà identifié
-
 
113
						utilisateur.setIdentification(((JSONBoolean) reponse.get(2)).booleanValue());
251
 
114
					
252
						// Nom complet de l'utilisateur
115
						// Plus de deux valeurs, l'utilisateur est identifié nous récupérons des données supplémentaires
253
						if (reponse.get(3).isString() != null) {
-
 
254
							String nomComplet = ((JSONString) reponse.get(3)).stringValue();
-
 
255
							//Coel.LogVersFirebug("Nom complet: " + nomComplet);
116
						if (reponse.size() > 3) {
256
							utilisateur.setNomComplet(nomComplet);
117
							// Nom complet de l'utilisateur
-
 
118
							if (reponse.get(3).isString() != null) {
257
						}
119
								utilisateur.setNomComplet(((JSONString) reponse.get(3)).stringValue());
258
						// Prénom de l'utilisateur
120
							}
259
						if (reponse.get(4).isString() != null) {
-
 
260
							String prenom = ((JSONString) reponse.get(4)).stringValue();
-
 
261
							utilisateur.setPrenom(prenom);
121
							// Prénom de l'utilisateur
262
							//Coel.LogVersFirebug("Prénom: " + prenom);
122
							if (reponse.get(4).isString() != null) {
-
 
123
								utilisateur.setPrenom(((JSONString) reponse.get(4)).stringValue());
263
						}
-
 
264
						// Nom de l'utilisateur
-
 
265
						if (reponse.get(5).isString() != null) {
124
							}
266
							String nom = ((JSONString) reponse.get(5)).stringValue();
125
							
267
							utilisateur.setNom(nom);
126
							// Nom de l'utilisateur
268
							//Coel.LogVersFirebug("Nom: " + nom);
127
							if (reponse.get(5).isString() != null) {
-
 
128
								utilisateur.setNom(((JSONString) reponse.get(5)).stringValue());
269
						}
129
							}
270
						// Paramètre => was ist das ?
Line 130... Line 271...
130
							
271
						if (reponse.get(6).isString() != null) {
-
 
272
							String parametre = ((JSONString) reponse.get(6)).stringValue();
131
							// Paramètres
273
							utilisateur.setParametre(parametre);
132
							if (reponse.get(6).isString() != null) {
274
							//Coel.LogVersFirebug("Paramètre: " + parametre);
133
								utilisateur.setParametre(((JSONString) reponse.get(6)).stringValue());
275
						}
Line 134... Line 276...
134
							}
276
					}
135
							
277