Skip to content

Commit ef415b4

Browse files
authored
fix(auth): WB-3220, late feedback from PR 537 (#543)
1 parent c91a9a0 commit ef415b4

File tree

4 files changed

+76
-50
lines changed

4 files changed

+76
-50
lines changed

auth/src/main/java/org/entcore/auth/controllers/AuthController.java

+32-6
Original file line numberDiff line numberDiff line change
@@ -857,10 +857,23 @@ private Future<String> logInWithPasswordThenRedirect(
857857
* @return a future of user's details : login, displayName, email, mobile.
858858
*/
859859
private Future<JsonObject> logInWithActivationCode(final String login, final String activationCode) {
860+
Promise<JsonObject> promise = Promise.promise();
860861
// try activation with login
861-
return userAuthAccount.matchActivationCode(login, activationCode)
862-
// try activation with loginAlias
863-
.recover(throwable -> userAuthAccount.matchActivationCodeByLoginAlias(login, activationCode));
862+
userAuthAccount.matchActivationCode(login, activationCode, event1 -> {
863+
if( event1.isRight() ) {
864+
promise.complete(event1.right().getValue());
865+
} else {
866+
// try activation with loginAlias
867+
userAuthAccount.matchActivationCodeByLoginAlias(login, activationCode, event2 -> {
868+
if( event2.isRight() ) {
869+
promise.complete(event2.right().getValue());
870+
} else {
871+
promise.fail(event2.left().getValue());
872+
}
873+
});
874+
}
875+
});
876+
return promise.future();
864877
}
865878

866879
/**
@@ -870,10 +883,23 @@ private Future<JsonObject> logInWithActivationCode(final String login, final Str
870883
* @return a future of user's details : login, displayName, email, mobile.
871884
*/
872885
private Future<JsonObject> logInWithResetCode(final String login, final String resetCode) {
886+
Promise<JsonObject> promise = Promise.promise();
873887
// try reset with login
874-
return userAuthAccount.matchResetCode(login, resetCode)
875-
// try reset with loginAlias
876-
.recover(throwable -> userAuthAccount.matchResetCodeByLoginAlias(login, resetCode));
888+
userAuthAccount.matchResetCode(login, resetCode, event1 -> {
889+
if( event1.isRight() ) {
890+
promise.complete(event1.right().getValue());
891+
} else {
892+
// try reset with loginAlias
893+
userAuthAccount.matchResetCodeByLoginAlias(login, resetCode, event2 -> {
894+
if( event2.isRight() ) {
895+
promise.complete(event2.right().getValue());
896+
} else {
897+
promise.fail(event2.left().getValue());
898+
}
899+
});
900+
}
901+
});
902+
return promise.future();
877903
}
878904

879905
private void handleGetUserId(String login, String userId, HttpServerRequest request, String callback) {

auth/src/main/java/org/entcore/auth/users/DefaultUserAuthAccount.java

+23-21
Original file line numberDiff line numberDiff line change
@@ -270,17 +270,19 @@ public void needToValidateCgu(String userId, Handler<Boolean> handler) {
270270
}
271271

272272
@Override
273-
public Future<JsonObject> matchActivationCode(final String login, String potentialActivationCode) {
274-
return matchActivationCode("login", login, potentialActivationCode);
273+
public void matchActivationCode(final String login, String potentialActivationCode,
274+
final Handler<Either<String, JsonObject>> handler) {
275+
matchActivationCode("login", login, potentialActivationCode, handler);
275276
}
276277

277278
@Override
278-
public Future<JsonObject> matchActivationCodeByLoginAlias(final String login, String potentialActivationCode) {
279-
return matchActivationCode("loginAlias", login, potentialActivationCode);
279+
public void matchActivationCodeByLoginAlias(final String login, String potentialActivationCode,
280+
final Handler<Either<String, JsonObject>> handler) {
281+
matchActivationCode("loginAlias", login, potentialActivationCode, handler);
280282
}
281283

282-
private Future<JsonObject> matchActivationCode(final String loginFieldName, final String login, String potentialActivationCode) {
283-
Promise<JsonObject> promise = Promise.promise();
284+
private void matchActivationCode(final String loginFieldName, final String login, String potentialActivationCode,
285+
final Handler<Either<String, JsonObject>> handler) {
284286
String query =
285287
"MATCH (n:User) " +
286288
"WHERE n." + loginFieldName + "={login} AND n.activationCode = {activationCode} AND n.password IS NULL " +
@@ -292,25 +294,26 @@ private Future<JsonObject> matchActivationCode(final String loginFieldName, fina
292294
.put("activationCode", potentialActivationCode);
293295
neo.execute(query, params, Neo4jResult.validUniqueResultHandler( event -> {
294296
if(event.isLeft() || !event.right().getValue().getBoolean("exists", false))
295-
promise.fail("not.found");
297+
handler.handle(new Either.Left<String, JsonObject>("not.found"));
296298
else
297-
promise.complete(event.right().getValue());
299+
handler.handle(event);
298300
}));
299-
return promise.future();
300301
}
301302

302303
@Override
303-
public Future<JsonObject> matchResetCode(final String login, String potentialResetCode) {
304-
return matchResetCode("login", login, potentialResetCode);
304+
public void matchResetCode(final String login, String potentialResetCode,
305+
final Handler<Either<String, JsonObject>> handler) {
306+
matchResetCode("login", login, potentialResetCode, handler);
305307
}
306308

307309
@Override
308-
public Future<JsonObject> matchResetCodeByLoginAlias(final String login, String potentialResetCode) {
309-
return matchResetCode("loginAlias", login, potentialResetCode);
310+
public void matchResetCodeByLoginAlias(final String login, String potentialResetCode,
311+
final Handler<Either<String, JsonObject>> handler) {
312+
matchResetCode("loginAlias", login, potentialResetCode, handler);
310313
}
311314

312-
private Future<JsonObject> matchResetCode(final String loginFieldName, final String login, String potentialResetCode) {
313-
Promise<JsonObject> promise = Promise.promise();
315+
private void matchResetCode(final String loginFieldName, final String login, String potentialResetCode,
316+
final Handler<Either<String, JsonObject>> handler) {
314317
String query =
315318
"MATCH (n:User) " +
316319
"WHERE n." + loginFieldName + "={login} AND has(n.resetDate) " +
@@ -321,13 +324,12 @@ private Future<JsonObject> matchResetCode(final String loginFieldName, final Str
321324
.put("login", login)
322325
.put("resetCode", potentialResetCode)
323326
.put("nowMinusDelay", (System.currentTimeMillis() - resetCodeExpireDelay));
324-
neo.execute(query, params, Neo4jResult.validUniqueResultHandler( event -> {
325-
if(event.isLeft() || !event.right().getValue().getBoolean("exists", false))
326-
promise.fail("not.found");
327-
else
328-
promise.complete(event.right().getValue());
327+
neo.execute(query, params, Neo4jResult.validUniqueResultHandler( event -> {
328+
if(event.isLeft() || !event.right().getValue().getBoolean("exists", false))
329+
handler.handle(new Either.Left<String, JsonObject>("not.found"));
330+
else
331+
handler.handle(event);
329332
}));
330-
return promise.future();
331333
}
332334

333335
@Override

auth/src/main/java/org/entcore/auth/users/UserAuthAccount.java

+9-5
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import org.entcore.auth.pojo.SendPasswordDestination;
2323
import fr.wseduc.webutils.Either;
24-
import io.vertx.core.Future;
24+
2525
import io.vertx.core.Handler;
2626
import io.vertx.core.http.HttpServerRequest;
2727
import io.vertx.core.json.JsonArray;
@@ -56,13 +56,17 @@ void activateAccountWithRevalidateTerms(String login, String activationCode, Str
5656

5757
void needToValidateCgu(String userId, Handler<Boolean> handler);
5858

59-
Future<JsonObject> matchActivationCode(String login, String potentialActivationCode);
59+
void matchActivationCode(String login, String potentialActivationCode,
60+
Handler<Either<String, JsonObject>> handler);
6061

61-
Future<JsonObject> matchActivationCodeByLoginAlias(String loginAlias, String potentialActivationCode);
62+
void matchActivationCodeByLoginAlias(String loginAlias, String potentialActivationCode,
63+
Handler<Either<String, JsonObject>> handler);
6264

63-
Future<JsonObject> matchResetCode(String login, String potentialResetCode);
65+
void matchResetCode(String login, String potentialResetCode,
66+
Handler<Either<String, JsonObject>> handler);
6467

65-
Future<JsonObject> matchResetCodeByLoginAlias(String loginAlias, String potentialResetCode);
68+
void matchResetCodeByLoginAlias(String loginAlias, String potentialResetCode,
69+
Handler<Either<String, JsonObject>> handler);
6670

6771
void findByMail(String email, Handler<Either<String, JsonObject>> handler);
6872

auth/src/test/java/org/entcore/auth/UserAuthAccountTest.java

+12-18
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,8 @@ public void testAccountShouldMatchActivationCode(TestContext context) {
143143
test.directory().createInactiveUser("user6", "activationCode6", "user6@test.com")
144144
.onComplete(resAcUser -> {
145145
context.assertTrue(resAcUser.succeeded());
146-
authAccount.matchActivationCode("user6", "activationCode6")
147-
.onComplete(resActiv -> {
148-
context.assertNotNull(resActiv);
146+
authAccount.matchActivationCode("user6", "activationCode6", resActiv -> {
147+
context.assertTrue(resActiv.isRight());
149148
async.complete();
150149
});
151150
});
@@ -157,9 +156,8 @@ public void testAccountShouldMatchActivationCodeByAlias(TestContext context) {
157156
test.directory().createInactiveUser("user7", "userAlias7", "activationCode7", "user7@test.com")
158157
.onComplete(resAcUser -> {
159158
context.assertTrue(resAcUser.succeeded());
160-
authAccount.matchActivationCodeByLoginAlias("userAlias7", "activationCode7")
161-
.onComplete(resActiv -> {
162-
context.assertNotNull(resActiv);
159+
authAccount.matchActivationCodeByLoginAlias("userAlias7", "activationCode7", resActiv -> {
160+
context.assertTrue(resActiv.isRight());
163161
async.complete();
164162
});
165163
});
@@ -171,9 +169,8 @@ public void testAccountShouldNotMatchActivationCode(TestContext context) {
171169
test.directory().createInactiveUser("user8", "activationCode8", "user8@test.com")
172170
.onComplete(resAcUser -> {
173171
context.assertTrue(resAcUser.succeeded());
174-
authAccount.matchActivationCode("user8", "bad")
175-
.onComplete(resActiv -> {
176-
context.assertNotNull(resActiv);
172+
authAccount.matchActivationCode("user8", "bad", resActiv -> {
173+
context.assertFalse(resActiv.isRight());
177174
async.complete();
178175
});
179176
});
@@ -186,9 +183,8 @@ public void testAccountShouldMatchResetCode(TestContext context) {
186183
.compose(resAcUser -> test.directory().resetUser(resAcUser, "resetCode9"))
187184
.onComplete(resAcUser -> {
188185
context.assertTrue(resAcUser.succeeded());
189-
authAccount.matchResetCode("user9", "resetCode9")
190-
.onComplete(resActiv -> {
191-
context.assertNotNull(resActiv);
186+
authAccount.matchResetCode("user9", "resetCode9", resActiv -> {
187+
context.assertTrue(resActiv.isRight());
192188
async.complete();
193189
});
194190
});
@@ -201,9 +197,8 @@ public void testAccountShouldMatchResetCodeByAlias(TestContext context) {
201197
.compose(resAcUser -> test.directory().resetUser(resAcUser, "resetCode10"))
202198
.onComplete(resAcUser -> {
203199
context.assertTrue(resAcUser.succeeded());
204-
authAccount.matchResetCodeByLoginAlias("userAlias10", "resetCode10")
205-
.onComplete(resActiv -> {
206-
context.assertNotNull(resActiv);
200+
authAccount.matchResetCodeByLoginAlias("userAlias10", "resetCode10", resActiv -> {
201+
context.assertTrue(resActiv.isRight());
207202
async.complete();
208203
});
209204
});
@@ -216,9 +211,8 @@ public void testAccountShouldNotMatchResetCode(TestContext context) {
216211
.compose(resAcUser -> test.directory().resetUser(resAcUser, "resetCode11"))
217212
.onComplete(resAcUser -> {
218213
context.assertTrue(resAcUser.succeeded());
219-
authAccount.matchResetCode("user11", "bad")
220-
.onComplete(resActiv -> {
221-
context.assertNotNull(resActiv);
214+
authAccount.matchResetCode("user11", "bad", resActiv -> {
215+
context.assertFalse(resActiv.isRight());
222216
async.complete();
223217
});
224218
});

0 commit comments

Comments
 (0)