You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by dy...@apache.org on 2022/09/26 09:22:17 UTC

[incubator-datalab] 01/01: show users who are added to groups in autocomplete dropdown

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 <de...@gmail.com>
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: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org