This is an automated email from the ASF dual-hosted git repository. dyankiv pushed a commit to branch DATALAB-3051 in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git
commit 36d106e7f46fbcf4c4c5c717a54e73da09e4b07f Author: Denys Yankiv <[email protected]> AuthorDate: Mon Sep 26 12:21:39 2022 +0300 show users who are added to groups in autocomplete dropdown --- .../com/epam/datalab/backendapi/dao/SecurityDAO.java | 11 +++++++---- .../service/impl/ImageExploratoryServiceImpl.java | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/SecurityDAO.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/SecurityDAO.java index 85e836e83..2522036c1 100644 --- a/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/SecurityDAO.java +++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/dao/SecurityDAO.java @@ -39,10 +39,7 @@ import java.util.Set; import java.util.stream.Collectors; import static com.epam.datalab.backendapi.dao.MongoCollections.ROLES; -import static com.mongodb.client.model.Filters.and; -import static com.mongodb.client.model.Filters.eq; -import static com.mongodb.client.model.Filters.gte; -import static com.mongodb.client.model.Filters.ne; +import static com.mongodb.client.model.Filters.*; import static com.mongodb.client.model.Projections.exclude; import static com.mongodb.client.model.Projections.fields; import static com.mongodb.client.model.Projections.include; @@ -109,6 +106,12 @@ public class SecurityDAO extends BaseDAO { .map(d -> convertFromDocument((Document) d.get(TOKEN_RESPONSE), AccessTokenResponse.class)); } + public Set<String> getUserNames(String name){ + return stream(find(SECURITY_COLLECTION, regex(ID, name,"i"))) + .map(document -> document.getString(ID)) + .collect(Collectors.toSet()); + } + @SuppressWarnings("unchecked") private Set<String> toUsers(Document d) { final Object users = d.get("users"); diff --git a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java index b0b5bc7dc..5d45e3cff 100644 --- a/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java +++ b/services/self-service/src/main/java/com/epam/datalab/backendapi/service/impl/ImageExploratoryServiceImpl.java @@ -101,6 +101,9 @@ public class ImageExploratoryServiceImpl implements ImageExploratoryService { @Inject private UserSettingsDAO userSettingsDAO; + @Inject + private SecurityDAO securityDAO; + @Audit(action = CREATE, type = IMAGE) @Override public String createImage(@User UserInfo user, @Project String project, @ResourceName String exploratoryName, String imageName, String imageDescription, @Info String info) { @@ -316,10 +319,22 @@ public class ImageExploratoryServiceImpl implements ImageExploratoryService { @Override public Set<SharedWithDTO> getUsersAndGroupsForSharing(String userName, String imageName, String project, String endpoint, String value) { Set<SharedWithDTO> sharedWith = getImageSharingInfo(userName, imageName, project, endpoint); - Set<SharedWithDTO> canBeSharedWith = userSettingsDAO.getUserNames(value).stream() + + // Find users in groups + Map<String, Set<String>> groupsAndUsers = securityDAO.getGroups(); + final Set<String> usersInGroups = new HashSet<>(); + groupsAndUsers.entrySet().stream().forEach(entry -> usersInGroups.addAll(entry.getValue())); + Set<String> usersFiltered = usersInGroups.stream() + .filter(name -> name.toLowerCase().contains(value.toLowerCase())).collect(Collectors.toSet()); + // Find users who logged in + usersFiltered.addAll(securityDAO.getUserNames(value)); + + Set<SharedWithDTO> canBeSharedWith = usersFiltered.stream() .map(s -> new SharedWithDTO(SharedWithDTO.Type.USER, s)).collect(Collectors.toSet()); + canBeSharedWith.addAll(userGroupDAO.getGroupNames(value).stream() .map(s -> new SharedWithDTO(SharedWithDTO.Type.GROUP, s)).collect(Collectors.toSet())); + canBeSharedWith.removeAll(sharedWith); return new TreeSet<>(canBeSharedWith); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
