This is an automated email from the ASF dual-hosted git repository.

dyankiv pushed a commit to branch DATALAB-2809
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git


The following commit(s) were added to refs/heads/DATALAB-2809 by this push:
     new d9e2c4dd3 add shared status check for images
d9e2c4dd3 is described below

commit d9e2c4dd32d499a23dfad5ab28adda9e81e3e0a2
Author: Denys Yankiv <[email protected]>
AuthorDate: Tue Jun 28 13:41:02 2022 +0300

    add shared status check for images
---
 .../datalab/backendapi/resources/dto/ImageInfoRecord.java |  2 +-
 .../service/impl/ImageExploratoryServiceImpl.java         | 15 +++++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
index 4417b211a..7292b83db 100644
--- 
a/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
+++ 
b/services/self-service/src/main/java/com/epam/datalab/backendapi/resources/dto/ImageInfoRecord.java
@@ -45,7 +45,7 @@ public class ImageInfoRecord {
     private final String dockerImage;
     private final String fullName;
     private final ImageStatus status;
-    private final boolean isShared;
+    private boolean isShared;
     private final List<ClusterConfig> clusterConfig;
     private final String exploratoryURL;
     private final List<Library> libraries;
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 bbc8ad841..842e3b7ec 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
@@ -65,6 +65,7 @@ import java.time.LocalDateTime;
 import java.util.*;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static com.epam.datalab.backendapi.domain.AuditActionEnum.CREATE;
 import static com.epam.datalab.backendapi.domain.AuditResourceTypeEnum.IMAGE;
@@ -198,6 +199,7 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
                 .stream()
                 .map(p -> {
                     List<ImageInfoRecord> images = 
imageExploratoryDao.getImagesOfUser(user.getName(), p.getName());
+                    images.forEach(img -> 
img.setShared(isSharedImage(img.getFullName())));
                     images.addAll(getSharedImages(user, p.getName()));
                     return ProjectImagesInfo.builder()
                             .project(p.getName())
@@ -266,6 +268,7 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
                 .filter(img -> !img.getUser().equals(userInfo.getName()))
                 .filter(img ->
                         UserRoles.checkAccess(userInfo, RoleType.IMAGE, 
img.getFullName(), userInfo.getRoles()))
+                .peek(img -> img.setShared(true))
                 .collect(Collectors.toList());
         log.info("Shared with user {} images : {}", userInfo.getName(), 
sharedImages);
         return sharedImages;
@@ -277,6 +280,7 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
                 .filter(img -> !img.getUser().equals(userInfo.getName()))
                 .filter(img -> img.getDockerImage().equals(dockerImage) && 
img.getProject().equals(project) && img.getEndpoint().equals(endpoint))
                 .filter(img -> UserRoles.checkAccess(userInfo, RoleType.IMAGE, 
img.getFullName(), userInfo.getRoles()))
+                .peek(img -> img.setShared(true))
                 .collect(Collectors.toList());
         log.info("Found shared with user {} images {}", userInfo.getName(), 
sharedImages);
         return sharedImages;
@@ -288,8 +292,19 @@ public class ImageExploratoryServiceImpl implements 
ImageExploratoryService {
                 .filter(img -> !img.getUser().equals(userInfo.getName()))
                 .filter(img -> img.getProject().equals(project) )
                 .filter(img -> UserRoles.checkAccess(userInfo, RoleType.IMAGE, 
img.getFullName(), userInfo.getRoles()))
+                .peek(img -> img.setShared(true))
                 .collect(Collectors.toList());
         log.info("Found shared with user {} images {}", userInfo.getName(), 
sharedImages);
         return sharedImages;
     }
+
+    private boolean isSharedImage(String imageFullName){
+        String anyUser = "$anyuser";
+        List<UserRoleDTO> imageRoles = userRoleDAO.findAll().stream()
+                .filter(r -> r.getImages().contains(imageFullName))
+                .filter( r -> (r.getGroups().contains(anyUser) && 
r.getGroups().size() >= 2)
+                        || (!r.getGroups().contains(anyUser) && 
!r.getGroups().isEmpty()))
+                .collect(Collectors.toList());
+        return !imageRoles.isEmpty();
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to