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 a87c2e5..4555fc6 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/KeycloakService.java @@ -42,6 +42,9 @@ public class KeycloakService { @ConfigProperty(name = "keycloak.realm") String realm; + @ConfigProperty(name = "email.enabled") + boolean enabled_email; + @Inject Vertx vertx; @@ -86,17 +89,26 @@ public class KeycloakService { } public Uni setClubGroupMembre(MembreModel membreModel, ClubModel club) { - return getGroupFromClub(club).chain( - clubId -> getUserFromMember(membreModel).chain( - userId -> vertx.getOrCreateContext().executeBlocking(() -> { - UserResource user = keycloak.realm(realm).users().get(userId); - user.groups().stream().filter(g -> g.getPath().startsWith("/club")) - .forEach(g -> user.leaveGroup(g.getId())); - user.joinGroup(clubId); - LOGGER.infof("Set club \"%s\" to user %s (%s)", club.getName(), userId, - user.toRepresentation().getUsername()); - return "OK"; - }))); + if (club == null) + return getUserFromMember(membreModel).chain( + userId -> vertx.getOrCreateContext().executeBlocking(() -> { + UserResource user = keycloak.realm(realm).users().get(userId); + user.groups().stream().filter(g -> g.getPath().startsWith("/club")) + .forEach(g -> user.leaveGroup(g.getId())); + return "OK"; + })); + else + return getGroupFromClub(club).chain( + clubId -> getUserFromMember(membreModel).chain( + userId -> vertx.getOrCreateContext().executeBlocking(() -> { + UserResource user = keycloak.realm(realm).users().get(userId); + user.groups().stream().filter(g -> g.getPath().startsWith("/club")) + .forEach(g -> user.leaveGroup(g.getId())); + user.joinGroup(clubId); + LOGGER.infof("Set club \"%s\" to user %s (%s)", club.getName(), userId, + user.toRepresentation().getUsername()); + return "OK"; + }))); } public Uni setEmail(String userId, String email) { @@ -206,9 +218,12 @@ public class KeycloakService { return getUser(login).orElseThrow( () -> new KeycloakException("Fail to fetch user %s".formatted(finalLogin))); }) - //.invoke(user -> keycloak.realm(realm).users().get(user.getId()) // TODO enable for production - // .executeActionsEmail(List.of(RequiredAction.VERIFY_EMAIL.name(), - // RequiredAction.UPDATE_PASSWORD.name()))) + .invoke(user -> { + if (enabled_email) + keycloak.realm(realm).users().get(user.getId()) + .executeActionsEmail(List.of(RequiredAction.VERIFY_EMAIL.name(), + RequiredAction.UPDATE_PASSWORD.name())); + }) .invoke(user -> membreModel.setUserId(user.getId())) .call(user -> membreService.setUserId(membreModel.getId(), user.getId())) .call(user -> setClubGroupMembre(membreModel, membreModel.getClub())); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 90c91bd..ee898d3 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -26,6 +26,8 @@ quarkus.oidc.roles.source=accesstoken quarkus.http.limits.max-body-size=10M +email.enabled=false + database.prefix = test2_ database.database=ffsaf database.hostname=localhost diff --git a/src/main/webapp/src/pages/admin/club/ClubList.jsx b/src/main/webapp/src/pages/admin/club/ClubList.jsx index 1b7c59e..85941c8 100644 --- a/src/main/webapp/src/pages/admin/club/ClubList.jsx +++ b/src/main/webapp/src/pages/admin/club/ClubList.jsx @@ -141,7 +141,7 @@ function MakeCentralPanel({data, visibleclub, navigate, showAffiliationState, pa function MakeRow({club, showAffiliationState, navigate}) { const rowContent = <>
- {String(club.no_affiliation).padStart(5, '0')} + {club.no_affiliation ? String(club.no_affiliation).padStart(5, '0') : "-------"}
{club.name}