add Keycloak action, auto assigne club on création

This commit is contained in:
Thibaut Valentin 2024-01-29 22:25:26 +01:00
parent 978c055834
commit 251d0e25d6
2 changed files with 24 additions and 14 deletions

View File

@ -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() + "-")));
}
@ -116,10 +117,11 @@ public class KeycloakService {
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))
@ -127,7 +129,10 @@ public class KeycloakService {
}
return getUser(login).orElseThrow(() -> new KeycloakException("Fail to fetch user %s".formatted(login)));
}).call(user -> membreService.setUserId(membreModel.getId(), user.getId()));
})
.invoke(user -> membreModel.setUserId(user.getId()))
.call(user -> membreService.setUserId(membreModel.getId(), user.getId()))
.call(user -> setClubGroupMembre(membreModel, membreModel.getClub()));
}
private Optional<UserRepresentation> getUser(String username) {

View File

@ -0,0 +1,5 @@
package fr.titionfire.ffsaf.utils;
public enum RequiredAction {
VERIFY_EMAIL, UPDATE_PROFILE, CONFIGURE_TOTP, UPDATE_PASSWORD, TERMS_AND_CONDITIONS
}