diff --git a/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java b/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java index cd154ff95543f7b036fa46106146381b59e7c9cc..d772f7173b58e3942d40bf2dd474d4a37d6c3242 100644 --- a/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java +++ b/jams-server/src/main/java/net/jami/jams/server/core/workflows/AddUserToGroupFlow.java @@ -17,31 +17,29 @@ public class AddUserToGroupFlow { public static void addUserToGroup(String groupName, String username) { userAuthenticationModule.getAuthSources().forEach((k, v) -> { - List<UserProfile> profiles = v.searchUserProfiles(username, "LOGON_NAME"); - if (!profiles.isEmpty()) { - UserProfile profile = profiles.get(0); + UserProfile profile = v.getUserProfile(username); + List<UserProfile> groupProfiles = v.searchUserProfiles(username, "LOGON_NAME"); + if (!groupProfiles.isEmpty()) { + UserGroupMapping mapping = null; StatementList statementList = new StatementList(); - statementList.addStatement(new StatementElement("name", "=", username, "")); - - if (profile != null) { - if (profile.getGroupMemberships() == null) - profile.setGroupMemberships(new ArrayList<>()); - profile.getGroupMemberships().add(groupName); - } - - statementList = new StatementList(); statementList.addStatement(new StatementElement("username", "=", username, "")); if (dataStore.getUserGroupMappingsDao().getObjects(statementList).isEmpty()) { // if the mapping doesn't exist, create it and add the group directly. - UserGroupMapping newMapping = new UserGroupMapping(); - newMapping.setUsername(username); - newMapping.setGroups(""); - newMapping.addGroup(groupName); - dataStore.getUserGroupMappingsDao().storeObject(newMapping); + + try { + mapping = new UserGroupMapping(); + } catch (Exception e) { + e.printStackTrace(); + } + mapping.setUsername(username); + mapping.setGroups(""); + mapping.addGroup(groupName); + dataStore.getUserGroupMappingsDao().storeObject(mapping); + } else { // otherwise, update the object. - UserGroupMapping mapping = dataStore.getUserGroupMappingsDao().getObjects(statementList).get(0); + mapping = dataStore.getUserGroupMappingsDao().getObjects(statementList).get(0); mapping.addGroup(groupName); String newGroups = mapping.getGroups(); @@ -53,6 +51,13 @@ public class AddUserToGroupFlow { constraint.addStatement(st1); dataStore.getUserGroupMappingsDao().updateObject(update, constraint); } + + if (profile != null) { + if (profile.getGroupMemberships() == null) + profile.setGroupMemberships(new ArrayList<>()); + profile.getGroupMemberships().add(groupName); + dataStore.updateUserProfile(profile); + } } }); } diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java index d171bebcd5d83eb9c860b9267ab6a747f6b29edd..5fba2874f6286923fc87506a80b317eaee08251a 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/admin/group/GroupServlet.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.stream.Collectors; import static net.jami.jams.server.Server.dataStore; +import static net.jami.jams.server.Server.userAuthenticationModule; @WebServlet("/api/admin/group") @Slf4j @@ -93,13 +94,15 @@ public class GroupServlet extends HttpServlet { profiles.forEach(profile -> targetGroup.getGroupMembers().add(profile.getUsername())); + String groupMembers = req.getParameter("groupMembers"); + // if the username sent isn't already part of the group members, then we add it - if (!targetGroup.getGroupMembers().contains(req.getParameter("groupMembers"))) + if (!targetGroup.getGroupMembers().contains(groupMembers)) { + // otherwise remove the group from the user's memberships. AddUserToGroupFlow.addUserToGroup(name, req.getParameter("groupMembers")); - // otherwise remove the group from the user's memberships. - else { + } else { statementList = new StatementList(); - st = new StatementElement("username", "=", req.getParameter("groupMembers"), ""); + st = new StatementElement("username", "=", groupMembers, ""); statementList.addStatement(st); UserProfile targetProfile = dataStore.getUserProfileDao().getObjects(statementList).get(0);