diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java b/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java index 3ed4f1ddc26792ebdb445cb124a2e07418b4ef85..b9a67de117c6306898f77bc4603362217c2113c6 100644 --- a/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java +++ b/jams-common/src/main/java/net/jami/jams/common/objects/user/UserProfile.java @@ -157,4 +157,27 @@ public class UserProfile implements DatabaseObject { profile.getLastName().equals(this.lastName)); } + public void setDefaultValues() { + if (this.firstName == null) + this.firstName = ""; + if (this.lastName == null) + this.lastName = ""; + if (this.email == null) + this.email = ""; + if (this.profilePicture == null) + this.profilePicture = ""; + if (this.organization == null) + this.organization = ""; + if (this.phoneNumber == null) + this.phoneNumber = ""; + if (this.phoneNumberExtension == null) + this.phoneNumberExtension = ""; + if (this.faxNumber == null) + this.faxNumber = ""; + if (this.mobileNumber == null) + this.mobileNumber = ""; + if (this.groupMemberships == null) + this.groupMemberships = new ArrayList<>(); + } + } 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 d772f7173b58e3942d40bf2dd474d4a37d6c3242..ccdf15d46fb57f3ffb9b2c3a5494615ec9b632de 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 @@ -40,22 +40,27 @@ public class AddUserToGroupFlow { // otherwise, update the object. mapping = dataStore.getUserGroupMappingsDao().getObjects(statementList).get(0); - mapping.addGroup(groupName); - String newGroups = mapping.getGroups(); + if (!mapping.getGroups().contains(groupName)) { + mapping.addGroup(groupName); + String newGroups = mapping.getGroups(); - StatementList update = new StatementList(); - StatementElement st0 = new StatementElement("groups", "=", newGroups, ""); - update.addStatement(st0); - StatementList constraint = new StatementList(); - StatementElement st1 = new StatementElement("username", "=", username, ""); - constraint.addStatement(st1); - dataStore.getUserGroupMappingsDao().updateObject(update, constraint); + StatementList update = new StatementList(); + StatementElement st0 = new StatementElement("groups", "=", newGroups, ""); + update.addStatement(st0); + StatementList constraint = new StatementList(); + StatementElement st1 = new StatementElement("username", "=", username, ""); + constraint.addStatement(st1); + dataStore.getUserGroupMappingsDao().updateObject(update, constraint); + } } if (profile != null) { if (profile.getGroupMemberships() == null) profile.setGroupMemberships(new ArrayList<>()); - profile.getGroupMemberships().add(groupName); + + if (!profile.getGroupMemberships().contains(groupName)) + profile.getGroupMemberships().add(groupName); + dataStore.updateUserProfile(profile); } } diff --git a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java index 317a6637ffe559eda0f1e66433fb3cc96c29b621..b892994452169e21e78426a8e90a6fa59bd997af 100644 --- a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java +++ b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterDeviceFlow.java @@ -52,6 +52,7 @@ public class RegisterDeviceFlow { StatementList statementList = new StatementList(); statementList.addStatement(new StatementElement("username", "=", username, "")); User user = dataStore.getUserDao().getObjects(statementList).get(0); +// UserProfile userProfile = dataStore.getUserProfileDao().getObjects(statementList).get(0); UserProfile userProfile = userAuthenticationModule.getAuthSources() .get(new AuthModuleKey(user.getRealm(),user.getUserType())) .searchUserProfiles(username,"LOGON_NAME").get(0); 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 1e91297205c6046ac94edf4f7203cb196c44ffcf..77d0d0e4288b5e4eca6d24491e8d60be3393a7b6 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 @@ -171,12 +171,6 @@ public class GroupServlet extends HttpServlet { List<UserProfile> validProfiles = dataStore.getUserProfileDao().getObjects(null).stream().filter(profile -> profile.getGroupMemberships().remove(req.getParameter("groupName"))).collect(Collectors.toList()); - - - - - - validProfiles.parallelStream().forEach(profile -> { StatementList statementList = new StatementList(); @@ -207,4 +201,4 @@ public class GroupServlet extends HttpServlet { resp.sendError(500, "Could not delete the group successfully!"); } } -} +} \ No newline at end of file diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java index e58e2efa3bad90bb37f95d26253fab62fc6279d9..7c3d2fdc07178c910f687d6e827c356b77b43a62 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/api/auth/directory/SearchDirectoryServlet.java @@ -51,6 +51,7 @@ public class SearchDirectoryServlet extends HttpServlet { //The search directory function does not automatically create users, this would be costly at this point //right now, we will implement it when Jami supports lists of users. this is a work in progress as it //requires changes on the name server as well. + List<UserProfile> userProfiles = new ArrayList<>(); /** * @@ -58,26 +59,24 @@ public class SearchDirectoryServlet extends HttpServlet { @Override @JsonContent protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { - List<UserProfile> userProfiles = new ArrayList<>(); - userAuthenticationModule.getAuthSources().forEach((k, v) -> { - List<UserProfile> profiles; + userAuthenticationModule.getAuthSources().forEach((k, v) -> { if (req.getParameter("queryString").equals("*")) - profiles = v.searchUserProfiles(req.getParameter("queryString"), "FULL_TEXT_NAME"); + userProfiles = v.searchUserProfiles(req.getParameter("queryString"), "FULL_TEXT_NAME"); else { - profiles = v.searchUserProfiles(req.getParameter("queryString"), "FULL_TEXT_NAME"); + userProfiles = v.searchUserProfiles(req.getParameter("queryString"), "FULL_TEXT_NAME"); List<UserProfile> profiles2 = v.searchUserProfiles(req.getParameter("queryString"), "LOGON_NAME"); - for (Iterator<UserProfile> it = profiles.iterator(); it.hasNext(); ) { + for (Iterator<UserProfile> it = userProfiles.iterator(); it.hasNext(); ) { UserProfile p = it.next(); for (UserProfile p2 : profiles2) { if (p2.equals(p)) it.remove(); } } - profiles.addAll(profiles2); + userProfiles.addAll(profiles2); } - profiles.parallelStream().forEach(profile -> { + userProfiles.parallelStream().forEach(profile -> { StatementList statementList = new StatementList(); StatementElement statementElement = new StatementElement("username", "=", profile.getUsername(), ""); statementList.addStatement(statementElement); @@ -95,7 +94,6 @@ public class SearchDirectoryServlet extends HttpServlet { profile.setId(results.get(0).getJamiId()); } } - userProfiles.add(profile); }); }); diff --git a/ldap-connector/pom.xml b/ldap-connector/pom.xml index 46acc9bbf8a64f65d64623e5eab26f98de4c618c..e34a8ae6a18dbf7e50c37f5a49e0c18bed48a9a8 100644 --- a/ldap-connector/pom.xml +++ b/ldap-connector/pom.xml @@ -29,6 +29,12 @@ <version>${embedded.ldap.unit}</version> <scope>test</scope> </dependency> + <dependency> + <groupId>net.jami</groupId> + <artifactId>jams-server</artifactId> + <version>2.0</version> + <scope>compile</scope> + </dependency> </dependencies> <repositories> diff --git a/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java b/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java index f3ea3fac1c434c7f018d792ce1ad9a39102d1546..83beaca0c3d5ec02db479661816b9e1dbb820a41 100644 --- a/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java +++ b/ldap-connector/src/main/java/net/jami/jams/ldap/connector/service/UserProfileService.java @@ -23,6 +23,8 @@ package net.jami.jams.ldap.connector.service; import lombok.extern.slf4j.Slf4j; +import net.jami.jams.common.dao.StatementElement; +import net.jami.jams.common.dao.StatementList; import net.jami.jams.common.objects.user.UserProfile; import net.jami.jams.ldap.connector.LDAPConnector; import org.ldaptive.Connection; @@ -37,6 +39,8 @@ import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; +import static net.jami.jams.server.Server.dataStore; + @Slf4j public class UserProfileService { @@ -57,7 +61,18 @@ public class UserProfileService { SearchOperation search = new SearchOperation(connectionFactory); SearchResponse res = search.execute(buildRequest(queryString,field, exactMatch)); if (res.getEntries().size() == 0) return new ArrayList<>(); - return res.getEntries().stream().map(UserProfileService::profileFromResponse).collect(Collectors.toList()); + List<UserProfile> profilesFromResponse = res.getEntries().stream().map(UserProfileService::profileFromResponse).collect(Collectors.toList()); + for (UserProfile p: profilesFromResponse) { + + StatementList statementList = new StatementList(); + StatementElement st = new StatementElement("username", "=", p.getUsername(), ""); + statementList.addStatement(st); + + if (dataStore.getUserProfileDao().getObjects(statementList).isEmpty()) + dataStore.getUserProfileDao().storeObject(p); + } + + return profilesFromResponse; } catch (Exception e) { log.error("Could not search LDAP directory with error " + e.toString()); return null; @@ -104,6 +119,7 @@ public class UserProfileService { UserProfile.exposedMethods.get("set" + fieldMap.get(attribute)).invoke(userProfile, entry.getAttribute(attribute).getStringValue()); } } + userProfile.setDefaultValues(); return userProfile; } catch (Exception e){