You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by is...@apache.org on 2021/09/01 18:00:16 UTC

[airavata-data-lake] branch master updated: Auto sharing of resource with admin group

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

isjarana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-data-lake.git


The following commit(s) were added to refs/heads/master by this push:
     new d4bed54  Auto sharing of resource with admin group
     new 9b6318c  Merge pull request #48 from isururanawaka/sharing_service_impl
d4bed54 is described below

commit d4bed545696396feab0c0d9100f2c1e7fd1c039a
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Wed Sep 1 13:59:06 2021 -0400

    Auto sharing of resource with admin group
---
 .../datalake/orchestrator/Configuration.java       | 42 ++++++++++++++++++++
 .../orchestrator/connectors/DRMSConnector.java     | 24 +++++++++++
 .../handlers/async/OrchestratorEventProcessor.java | 46 ++++++++++++++++------
 .../drms/api/handlers/SharingServiceHandler.java   |  4 +-
 4 files changed, 101 insertions(+), 15 deletions(-)

diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
index 52494e5..8e6ca47 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/Configuration.java
@@ -20,6 +20,8 @@ public class Configuration {
         this.messageFilter = messageFilter;
     }
 
+    public TenantConfigs tenantConfigs;
+
     public Configuration() {
 
     }
@@ -60,6 +62,14 @@ public class Configuration {
         this.outboundEventProcessor = outboundEventProcessor;
     }
 
+    public TenantConfigs getTenantConfigs() {
+        return tenantConfigs;
+    }
+
+    public void setTenantConfigs(TenantConfigs tenantConfigs) {
+        this.tenantConfigs = tenantConfigs;
+    }
+
     public static class Consumer {
 
         private String brokerURL;
@@ -219,4 +229,36 @@ public class Configuration {
     }
 
 
+    public static class TenantConfigs {
+
+        private String tenantId;
+        private String userGroup;
+        private String adminGroup;
+
+        public String getTenantId() {
+            return tenantId;
+        }
+
+        public void setTenantId(String tenantId) {
+            this.tenantId = tenantId;
+        }
+
+        public String getUserGroup() {
+            return userGroup;
+        }
+
+        public void setUserGroup(String userGroup) {
+            this.userGroup = userGroup;
+        }
+
+        public String getAdminGroup() {
+            return adminGroup;
+        }
+
+        public void setAdminGroup(String adminGroup) {
+            this.adminGroup = adminGroup;
+        }
+    }
+
+
 }
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/connectors/DRMSConnector.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/connectors/DRMSConnector.java
index 96fac88..350aee8 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/connectors/DRMSConnector.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/connectors/DRMSConnector.java
@@ -7,6 +7,7 @@ import org.apache.airavata.datalake.drms.AuthenticatedUser;
 import org.apache.airavata.datalake.drms.DRMSServiceAuthToken;
 import org.apache.airavata.datalake.drms.resource.GenericResource;
 import org.apache.airavata.datalake.drms.sharing.DRMSSharingServiceGrpc;
+import org.apache.airavata.datalake.drms.sharing.ShareEntityWithGroupRequest;
 import org.apache.airavata.datalake.drms.sharing.ShareEntityWithUserRequest;
 import org.apache.airavata.datalake.drms.storage.*;
 import org.apache.airavata.datalake.orchestrator.Configuration;
@@ -77,6 +78,29 @@ public class DRMSConnector implements AbstractConnector<Configuration> {
 
     }
 
+
+    public void shareWithGroup(String authToken, String tenantId, String admin, String groupId, String resourceId,
+                               String permission) throws Exception {
+
+        DRMSServiceAuthToken serviceAuthToken = DRMSServiceAuthToken.newBuilder()
+                .setAccessToken(authToken)
+                .setAuthCredentialType(AuthCredentialType.AGENT_ACCOUNT_CREDENTIAL)
+                .setAuthenticatedUser(AuthenticatedUser.newBuilder()
+                        .setUsername(admin)
+                        .setTenantId(tenantId)
+                        .build())
+                .build();
+
+        ShareEntityWithGroupRequest.Builder shareBuilder = ShareEntityWithGroupRequest.newBuilder()
+                .setAuthToken(serviceAuthToken)
+                .setEntityId(resourceId)
+                .setSharedGroupId(groupId)
+                .setPermissionId(permission);
+
+        this.sharingServiceBlockingStub.shareEntityWithGroup(shareBuilder.build());
+
+    }
+
     public Optional<TransferMapping> getActiveTransferMapping(String authToken, String tenantId,
                                                               String user, String hostName) throws Exception {
 
diff --git a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/async/OrchestratorEventProcessor.java b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/async/OrchestratorEventProcessor.java
index af8bac0..da70561 100644
--- a/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/async/OrchestratorEventProcessor.java
+++ b/data-orchestrator/data-orchestrator-service/data-orchestrator-api-server/src/main/java/org/apache/airavata/datalake/orchestrator/handlers/async/OrchestratorEventProcessor.java
@@ -57,8 +57,9 @@ public class OrchestratorEventProcessor implements Runnable {
         this.configuration = configuration;
     }
 
-    private List<GenericResource> createResourceRecursively(String storageId, String basePath, String resourcePath, String resourceType, String user)
-            throws Exception{
+    private List<GenericResource> createResourceRecursively(String storageId, String basePath,
+                                                            String resourcePath, String resourceType, String user)
+            throws Exception {
 
         List<GenericResource> resourceList = new ArrayList<>();
 
@@ -66,7 +67,7 @@ public class OrchestratorEventProcessor implements Runnable {
 
         String[] splitted = resourcePath.substring(basePath.length()).split("/");
 
-        String currentPath = basePath.endsWith("/")? basePath.substring(0, basePath.length() -1): basePath;
+        String currentPath = basePath.endsWith("/") ? basePath.substring(0, basePath.length() - 1) : basePath;
         String parentId = storageId;
         for (int i = 0; i < splitted.length - 1; i++) {
             String resourceName = splitted[i];
@@ -86,13 +87,13 @@ public class OrchestratorEventProcessor implements Runnable {
             }
         }
 
-        currentPath = currentPath + "/" + splitted[splitted.length -1];
+        currentPath = currentPath + "/" + splitted[splitted.length - 1];
 
         Optional<GenericResource> optionalGenericResource =
                 this.drmsConnector.createResource(notificationEvent.getAuthToken(),
                         notificationEvent.getTenantId(),
                         Utils.getId(storageId + ":" + currentPath),
-                        splitted[splitted.length -1], currentPath,
+                        splitted[splitted.length - 1], currentPath,
                         parentId, resourceType, parentType, user);
 
         if (optionalGenericResource.isPresent()) {
@@ -106,11 +107,21 @@ public class OrchestratorEventProcessor implements Runnable {
     }
 
 
-    private void shareResources(List<GenericResource> resourceList, String admin, String user, String permission) throws Exception {
+    private void shareResourcesWithUsers(List<GenericResource> resourceList, String admin, String user, String permission) throws Exception {
         for (GenericResource resource : resourceList) {
             logger.info("Sharing resource {} with path {} with user {}",
                     resource.getResourceId(), resource.getResourcePath(), user);
-            this.drmsConnector.shareWithUser(notificationEvent.getAuthToken(), notificationEvent.getTenantId(), admin, user, resource.getResourceId(), permission);
+            this.drmsConnector.shareWithUser(notificationEvent.getAuthToken(), notificationEvent.getTenantId(),
+                    admin, user, resource.getResourceId(), permission);
+        }
+    }
+
+    private void shareResourcesWithGroups(List<GenericResource> resourceList, String admin, String group, String permission) throws Exception {
+        for (GenericResource resource : resourceList) {
+            logger.info("Sharing resource {} with path {} with group {}",
+                    resource.getResourceId(), resource.getResourcePath(), group);
+            this.drmsConnector.shareWithGroup(notificationEvent.getAuthToken(), notificationEvent.getTenantId(),
+                    admin, group, resource.getResourceId(), permission);
         }
     }
 
@@ -134,7 +145,7 @@ public class OrchestratorEventProcessor implements Runnable {
             String owner = splitted[1].split("_")[0];
 
             Map<String, String> ownerRules = new HashMap<>();
-            ownerRules.put(adminUser, "ADMIN");
+            ownerRules.put(adminUser, "VIEWER");
             ownerRules.put(splitted[1], "OWNER");
 
             Optional<TransferMapping> optionalTransferMapping = drmsConnector.getActiveTransferMapping(
@@ -159,9 +170,18 @@ public class OrchestratorEventProcessor implements Runnable {
                     notificationEvent.getResourcePath(),
                     "COLLECTION", adminUser);
 
-            shareResources(Collections.singletonList(resourceList.get(resourceList.size() -1)), adminUser, owner, "ADMIN");
+            shareResourcesWithUsers(Collections.singletonList(resourceList.get(resourceList.size() - 1)),
+                    adminUser, owner, "VIEWER");
+
+            shareResourcesWithGroups(Collections.singletonList(resourceList.get(resourceList.size() - 1)), adminUser,
+                    configuration.getTenantConfigs().getAdminGroup(),
+                    "EDITOR");
+
+//            shareResourcesWithGroups(Collections.singletonList(resourceList.get(resourceList.size() - 1)), adminUser,
+//                    configuration.getTenantConfigs().getUserGroup(),
+//                    "VIEWER");
 
-            GenericResource resourceObj = resourceList.get(resourceList.size() -1);
+            GenericResource resourceObj = resourceList.get(resourceList.size() - 1);
 
             Optional<AnyStoragePreference> sourceSPOp = this.drmsConnector.getStoragePreference(
                     notificationEvent.getAuthToken(), adminUser,
@@ -207,7 +227,7 @@ public class OrchestratorEventProcessor implements Runnable {
                     .setMftAuthorizationToken(mftAuth)
                     .setResourceId(resourceObj.getResourceId());
 
-            switch (sourceSP.getStorageCase()){
+            switch (sourceSP.getStorageCase()) {
                 case SSH_STORAGE_PREFERENCE:
                     resourceMetadataReq.setResourceType("SCP");
                     resourceMetadataReq.setResourceToken(sourceSP.getSshStoragePreference().getCredentialToken());
@@ -227,7 +247,7 @@ public class OrchestratorEventProcessor implements Runnable {
                 logger.info("Registering file {} for source storage {}", fileMetadata.getResourcePath(), sourceStorageId);
                 resourceList = createResourceRecursively(sourceStorageId, notificationEvent.getBasePath(),
                         fileMetadata.getResourcePath(), "FILE", adminUser);
-                GenericResource fileResource = resourceList.get(resourceList.size() -1);
+                GenericResource fileResource = resourceList.get(resourceList.size() - 1);
 
                 resourceIDsToProcess.add(fileResource.getResourceId());
             }
@@ -244,7 +264,7 @@ public class OrchestratorEventProcessor implements Runnable {
             resourceList = createResourceRecursively(destinationStorageId, notificationEvent.getBasePath(),
                     notificationEvent.getResourcePath(), "FILE", adminUser);
 
-            GenericResource destinationResource = resourceList.get(resourceList.size() -1);
+            GenericResource destinationResource = resourceList.get(resourceList.size() - 1);
 
             System.out.println(destinationResource);
 
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/SharingServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/SharingServiceHandler.java
index 31e01af..43b7f27 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/SharingServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/SharingServiceHandler.java
@@ -34,7 +34,7 @@ public class SharingServiceHandler extends DRMSSharingServiceGrpc.DRMSSharingSer
 
             SharingManagementClient sharingManagementClient = custosClientProvider.getSharingManagementClient();
             Entity entity = Entity.newBuilder().setId(request.getEntityId()).build();
-            PermissionType permissionTypeEditor = PermissionType.newBuilder().setId("EDITOR").build();
+            PermissionType permissionTypeEditor = PermissionType.newBuilder().setId(request.getPermissionId()).build();
             PermissionType permissionTypeAdmin = PermissionType.newBuilder().setId("ADMIN").build();
 
             SharingRequest sharingRequestEditor = SharingRequest
@@ -88,7 +88,7 @@ public class SharingServiceHandler extends DRMSSharingServiceGrpc.DRMSSharingSer
 
             SharingManagementClient sharingManagementClient = custosClientProvider.getSharingManagementClient();
             Entity entity = Entity.newBuilder().setId(request.getEntityId()).build();
-            PermissionType permissionTypeEditor = PermissionType.newBuilder().setId("EDITOR").build();
+            PermissionType permissionTypeEditor = PermissionType.newBuilder().setId(request.getPermissionId()).build();
             PermissionType permissionTypeAdmin = PermissionType.newBuilder().setId("ADMIN").build();
 
             SharingRequest sharingRequestEditor = SharingRequest