From 251d0e25d694f99e9226509268a9c8e726cd53dd Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Mon, 29 Jan 2024 22:25:26 +0100 Subject: [PATCH] =?UTF-8?q?add=20Keycloak=20action,=20auto=20assigne=20clu?= =?UTF-8?q?b=20on=20cr=C3=A9ation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ffsaf/domain/service/KeycloakService.java | 33 +++++++++++-------- .../ffsaf/utils/RequiredAction.java | 5 +++ 2 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 src/main/java/fr/titionfire/ffsaf/utils/RequiredAction.java diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java index 4cbf7fe..8c0ddcd 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java @@ -3,6 +3,7 @@ package fr.titionfire.ffsaf.domain.service; import fr.titionfire.ffsaf.data.model.ClubModel; import fr.titionfire.ffsaf.data.model.MembreModel; import fr.titionfire.ffsaf.utils.KeycloakException; +import fr.titionfire.ffsaf.utils.RequiredAction; import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.unchecked.Unchecked; import io.vertx.mutiny.core.Vertx; @@ -56,7 +57,7 @@ public class KeycloakService { response.getStatusInfo().getReasonPhrase())); } - return keycloak.realm(realm).groups().group(clubGroup.getId()).toRepresentation().getSubGroups().stream() + return keycloak.realm(realm).groups().group(clubGroup.getId()).getSubGroups(0, 1000, true).stream() .filter(g -> g.getName().startsWith(club.getId() + "-")).findAny().map(GroupRepresentation::getId) .orElseThrow(() -> new KeycloakException("Fail to fetch group %s*".formatted(club.getId() + "-"))); } @@ -112,22 +113,26 @@ public class KeycloakService { String login = makeLogin(membreModel); LOGGER.infof("Creation of user %s...", login); return vertx.getOrCreateContext().executeBlocking(() -> { - UserRepresentation user = new UserRepresentation(); - user.setUsername(login); - user.setFirstName(membreModel.getFname()); - user.setLastName(membreModel.getLname()); - user.setEnabled(true); + UserRepresentation user = new UserRepresentation(); + user.setUsername(login); + user.setFirstName(membreModel.getFname()); + user.setLastName(membreModel.getLname()); + user.setEmail(membreModel.getEmail()); + user.setEnabled(true); - //user.setRequiredActions(List.of(UserModel.RequiredAction.VERIFY_EMAIL.name(), - // UserModel.RequiredAction.UPDATE_PASSWORD.name())); + user.setRequiredActions(List.of(RequiredAction.VERIFY_EMAIL.name(), + RequiredAction.UPDATE_PASSWORD.name())); - try (Response response = keycloak.realm(realm).users().create(user)) { - if (!response.getStatusInfo().equals(Response.Status.CREATED) && !response.getStatusInfo().equals(Response.Status.CONFLICT)) - throw new KeycloakException("Fail to creat user %s (reason=%s)".formatted(login, response.getStatusInfo().getReasonPhrase())); - } + try (Response response = keycloak.realm(realm).users().create(user)) { + if (!response.getStatusInfo().equals(Response.Status.CREATED) && !response.getStatusInfo().equals(Response.Status.CONFLICT)) + throw new KeycloakException("Fail to creat user %s (reason=%s)".formatted(login, response.getStatusInfo().getReasonPhrase())); + } - return getUser(login).orElseThrow(() -> new KeycloakException("Fail to fetch user %s".formatted(login))); - }).call(user -> membreService.setUserId(membreModel.getId(), user.getId())); + return getUser(login).orElseThrow(() -> new KeycloakException("Fail to fetch user %s".formatted(login))); + }) + .invoke(user -> membreModel.setUserId(user.getId())) + .call(user -> membreService.setUserId(membreModel.getId(), user.getId())) + .call(user -> setClubGroupMembre(membreModel, membreModel.getClub())); } private Optional getUser(String username) { diff --git a/src/main/java/fr/titionfire/ffsaf/utils/RequiredAction.java b/src/main/java/fr/titionfire/ffsaf/utils/RequiredAction.java new file mode 100644 index 0000000..ea4e752 --- /dev/null +++ b/src/main/java/fr/titionfire/ffsaf/utils/RequiredAction.java @@ -0,0 +1,5 @@ +package fr.titionfire.ffsaf.utils; + +public enum RequiredAction { + VERIFY_EMAIL, UPDATE_PROFILE, CONFIGURE_TOTP, UPDATE_PASSWORD, TERMS_AND_CONDITIONS +}