Subversion Repositories eFlore/Applications.del

Rev

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

Rev Author Line No. Line
515 aurelien 1
package org.tela_botanica.del.client.services.rest;
2
 
530 jpm 3
import org.tela_botanica.del.client.config.Config;
2077 mathias 4
import org.tela_botanica.del.client.modeles.AuthInfo;
5
import org.tela_botanica.del.client.modeles.Utilisateur;
2054 aurelien 6
import org.tela_botanica.del.client.services.rest.async.ActiviteUtilisateurCallback;
2077 mathias 7
import org.tela_botanica.del.client.services.rest.async.AuthCallback;
515 aurelien 8
import org.tela_botanica.del.client.services.rest.async.UtilisateurCallback;
939 benjamin 9
import org.tela_botanica.del.client.services.rest.async.PHPCallback.ModeRequete;
1496 aurelien 10
import org.tela_botanica.del.client.services.RequestBuilderWithCredentials;
515 aurelien 11
 
2077 mathias 12
import com.google.gwt.core.shared.GWT;
13
import com.google.gwt.user.client.Window;
14
 
515 aurelien 15
public class UtilisateurServiceConcret implements UtilisateurService {
16
 
530 jpm 17
	private String baseUrl;
2077 mathias 18
	private String authBaseUrl;
530 jpm 19
 
20
	public UtilisateurServiceConcret() {
1470 mathias 21
		this(new Config());
530 jpm 22
	}
23
 
24
	public UtilisateurServiceConcret(Config config) {
1470 mathias 25
		this.baseUrl = config.getUrl("serviceUtilisateursBaseUrl");
2077 mathias 26
		this.authBaseUrl = config.getUrl("serviceAuthBaseUrl");
530 jpm 27
	}
2077 mathias 28
 
29
	/**
30
	 * Connecte l'utilisateur en appelant l'annuaire (auth::connexion, SSO), puis enchaîne avec
31
	 * le service "utilisateur" de Del, pour retourner les infos requises par l'interface
32
	 */
515 aurelien 33
	@Override
2077 mathias 34
	public void connecterUtilisateur(String login, String motDePasse, final UtilisateurCallback callback) {
35
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, authBaseUrl + "connexion?login=" + login + "&password=" + motDePasse);
515 aurelien 36
		try {
2077 mathias 37
			// Callback intermédiaire qui lit les infos de l'annuaire et appelle le service de préférences
38
			rb.sendRequest(null, new AuthCallback() {
39
				public void surErreur(String message) {
40
					// merci, de rien, au revoir messieurs-dames
41
					callback.surErreur("");
42
				}
43
				@Override
44
				public void surRetour(AuthInfo objetRetour) {
45
					// Stockage du jeton
46
					Utilisateur.setJeton(objetRetour.token);
47
					// Obtention de l'utilisateur final d'après le service de préférences
48
					obtenirUtilisateurSansAnnuaire(callback); // RequestBulledair passe le jeton dans les headers HTTP
49
				}
50
			});
515 aurelien 51
		} catch (Exception e) {
2077 mathias 52
			Window.alert("Exception : " + e.getMessage());
515 aurelien 53
		}
54
	}
55
 
2077 mathias 56
	/**
57
	 * Déconnecte l'utilisateur en appelant l'annuaire (auth::deconnexion, SSO), puis enchaîne avec
58
	 * le service "utilisateur" de Del, pour retourner les infos requises par l'interface
59
	 */
1496 aurelien 60
	@Override
2077 mathias 61
	public void deconnecterUtilisateur(final UtilisateurCallback callback) {
62
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, authBaseUrl + "deconnexion");
515 aurelien 63
		try {
2077 mathias 64
			// Callback intermédiaire qui lit les infos de l'annuaire et appelle le service de préférences
65
			rb.sendRequest(null, new AuthCallback() {
66
				public void surErreur(String message) {
67
					callback.surErreur("");
68
				}
69
				@Override
70
				public void surRetour(AuthInfo objetRetour) {
71
					// Stockage du jeton, qui devrait être NULL (mais on sait jamais à l'avenir)
72
					Utilisateur.setJeton(objetRetour.token);
73
					// Obtention du pseudo-utilisateur non connecté (id de session) d'après le service de préférences
74
					obtenirUtilisateurSansAnnuaire(callback);
75
				}
76
			});
515 aurelien 77
		} catch (Exception e) {
2077 mathias 78
			GWT.log("Exception : " + e.getMessage());
515 aurelien 79
		}
1496 aurelien 80
	}
515 aurelien 81
 
2077 mathias 82
	/**
83
	 * Va chercher les infos de l'utilisateur en vérifiant d'abord l'identité auprès de l'annuaire
84
	 * @param callback
85
	 */
1496 aurelien 86
	@Override
515 aurelien 87
	public void obtenirUtilisateur(UtilisateurCallback callback) {
2077 mathias 88
		obtenirUtilisateur(callback, false);
89
	}
90
 
91
	/**
92
	 * Va chercher les infos de l'utilisateur; si ignorerAnnuaire est false, vérifiera d'abord
93
	 * l'identité auprès de l'annuaire (service annuaire:auth/identite)
94
	 * @param callback
95
	 */
96
	@Override
97
	public void obtenirUtilisateur(final UtilisateurCallback callback, boolean ignorerAnnuaire) {
98
		// par défaut, on appelle d'abord le service auth/identite de l'annuaire, afin de connaître
99
		// le statut de l'utilisateur vis à vis du SSO (connecté ou non) et rafraîchir le jeton
100
		if (! ignorerAnnuaire) {
101
			RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, authBaseUrl + "identite");
102
			try {
103
				rb.sendRequest(null, new AuthCallback() {
104
					public void surErreur(String message) {
105
						// Même si l'annuaire n'est pas content, on va chercher un profil utilisateur "anonyme"
106
						obtenirUtilisateurSansAnnuaire(callback);
107
					}
108
					@Override
109
					public void surRetour(AuthInfo objetRetour) {
110
						// Stockage du jeton rafraîchi
111
						Utilisateur.setJeton(objetRetour.token);
112
						// Obtention de l'utilisateur final d'après le service de préférences
113
						obtenirUtilisateurSansAnnuaire(callback);
114
					}
115
				});
116
			} catch (Exception e) {
117
				// TODO: handle exception
118
			}
119
		} else { // sinon on optimise, quand on vient de se (de)connecter, pas la peine de rappeler l'annuaire
120
			obtenirUtilisateurSansAnnuaire(callback);
121
		}
122
	}
123
 
124
	/**
125
	 * Va chercher les infos de l'utilisateur sans vérifier l'identité auprès de l'annuaire
126
	 * @param callback
127
	 */
128
	public void obtenirUtilisateurSansAnnuaire(UtilisateurCallback callback) {
1496 aurelien 129
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "utilisateurs/");
515 aurelien 130
		try {
131
			rb.sendRequest(null, callback);
132
		} catch (Exception e) {
133
			// TODO: handle exception
134
		}
1496 aurelien 135
	}
515 aurelien 136
 
2054 aurelien 137
	@Override
138
	public void obtenirActiviteUtilisateur(String idUtilisateur, ActiviteUtilisateurCallback callback) {
139
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, baseUrl + "utilisateurs/"+idUtilisateur+"/activite");
140
		try {
141
			rb.sendRequest(null, callback);
142
		} catch (Exception e) {
143
			// TODO: handle exception
144
		}
145
	}
146
 
515 aurelien 147
}