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 99c11ac36319f7b010cb788edd5b25807f871ded..be3f13210dd5a418dce13603993eac9adcf81c2f 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 @@ -148,4 +148,14 @@ public class UserProfile implements DatabaseObject { return null; } + @Override + public boolean equals(Object obj) { + + UserProfile profile = (UserProfile) obj; + + return (profile.getUsername().equals(this.username) && + profile.getFirstName().equals(this.firstName) && + profile.getLastName().equals(this.lastName)); + } + } 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 1f087496097edc494d4541c64f5e0080258e4d92..89309eb75526d5e603c995118d0555e3f79a2ff1 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 @@ -37,8 +37,8 @@ import net.jami.jams.common.objects.user.UserGroupMapping; import net.jami.jams.common.objects.user.UserProfile; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; import static net.jami.jams.server.Server.dataStore; import static net.jami.jams.server.Server.nameServer; @@ -59,11 +59,25 @@ public class SearchDirectoryServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { List<UserProfile> userProfiles = new ArrayList<>(); userAuthenticationModule.getAuthSources().forEach((k, v) -> { - List<UserProfile> profiles = v.searchUserProfiles(req.getParameter("queryString"), "FULL_TEXT_NAME"); - if(profiles == null || profiles.size() == 0){ - // check logon names if nothing was found - profiles = v.searchUserProfiles(req.getParameter("queryString"), "LOGON_NAME"); + + List<UserProfile> profiles; + if (req.getParameter("queryString").equals("*")) + profiles = v.searchUserProfiles(req.getParameter("queryString"), "FULL_TEXT_NAME"); + else { + profiles = 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();) { + UserProfile p = it.next(); + for (UserProfile p2: profiles2) { + if (p2.equals(p)) + it.remove(); + } + } + + + profiles.addAll(profiles2); } + profiles.parallelStream().forEach(profile -> { StatementList statementList = new StatementList(); StatementElement statementElement = new StatementElement("username", "=", profile.getUsername(), ""); @@ -89,16 +103,14 @@ public class SearchDirectoryServlet extends HttpServlet { // update user group mappings table userProfiles.forEach(profile -> { List<UserGroupMapping> mappings = dataStore.getUserGroupMappingsDao().getObjects(null); - - for(UserGroupMapping mapping: mappings) { List<String> list = new ArrayList<>(); if (mapping.getUsername().equals(profile.getUsername())) { String[] splits = mapping.getGroups().split(","); - for (int i = 0; i < splits.length; i++) { + for (int i = 0; i < splits.length; i++) list.add(splits[i]); - } + } if (!list.isEmpty())