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]

Reply via email to