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/06/14 20:12:15 UTC
[airavata-custos] branch develop updated: fix for #205
This is an automated email from the ASF dual-hosted git repository.
isjarana pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-custos.git
The following commit(s) were added to refs/heads/develop by this push:
new b94c7c8 fix for #205
new 5705412 Merge pull request #206 from isururanawaka/develop
b94c7c8 is described below
commit b94c7c8b172c02777e2068750402ecc2d2d3c9fc
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Mon Jun 14 16:11:25 2021 -0400
fix for #205
---
.../custos/sharing/client/SharingClient.java | 4 ++
.../custos/sharing/mapper/SharingMapper.java | 35 +++++++++++-
.../persistance/repository/SharingRepository.java | 21 ++++----
.../custos/sharing/service/SharingService.java | 59 +++++++++++++++++++--
.../custos/sharing/validator/InputValidator.java | 15 +++---
.../src/main/proto/SharingService.proto | 5 ++
.../protos/SharingManagementService.proto | 9 ++++
.../src/main/resources/protos/SharingService.proto | 5 ++
.../main/resources/sharing-management-service.pb | Bin 87361 -> 88031 bytes
.../service/SharingManagementService.java | 19 ++++++-
.../src/main/proto/SharingManagementService.proto | 9 ++++
11 files changed, 159 insertions(+), 22 deletions(-)
diff --git a/custos-core-services-client-stubs/sharing-core-service-client-stub/src/main/java/org/apache/custos/sharing/client/SharingClient.java b/custos-core-services-client-stubs/sharing-core-service-client-stub/src/main/java/org/apache/custos/sharing/client/SharingClient.java
index fa9a88f..34d9551 100644
--- a/custos-core-services-client-stubs/sharing-core-service-client-stub/src/main/java/org/apache/custos/sharing/client/SharingClient.java
+++ b/custos-core-services-client-stubs/sharing-core-service-client-stub/src/main/java/org/apache/custos/sharing/client/SharingClient.java
@@ -191,5 +191,9 @@ public class SharingClient {
return sharingServiceBlockingStub.getAllDirectSharings(request);
}
+ public GetAllSharingsResponse getAllSharings(org.apache.custos.sharing.service.SharingRequest request){
+ return sharingServiceBlockingStub.getAllSharings(request);
+ }
+
}
diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/mapper/SharingMapper.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/mapper/SharingMapper.java
index fd1ac13..651bc17 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/mapper/SharingMapper.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/mapper/SharingMapper.java
@@ -23,11 +23,14 @@ import org.apache.custos.sharing.persistance.model.Entity;
import org.apache.custos.sharing.persistance.model.PermissionType;
import org.apache.custos.sharing.persistance.model.Sharing;
import org.apache.custos.sharing.service.SharedOwners;
+import org.apache.custos.sharing.service.SharingMetadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import java.util.stream.Collectors;
public class SharingMapper {
@@ -90,9 +93,39 @@ public class SharingMapper {
map(shr -> shr.getAssociatingId()).collect(Collectors.toList());
}
-
return builder.addAllOwnerIds(ownerIds).build();
}
+ public static Optional<List<SharingMetadata>> getSharingMetadata(List<Sharing> sharingList) {
+ if (sharingList != null && !sharingList.isEmpty()) {
+
+ return Optional.ofNullable(sharingList.stream().
+ map(shr -> {
+ try {
+ SharingMetadata metadata = SharingMetadata.newBuilder()
+ .setPermission(org.apache.custos.sharing.service.PermissionType.newBuilder().
+ setId(shr.getPermissionType().getExternalId())
+ .setName(shr.getPermissionType().getName()
+ ).setDescription(shr.getPermissionType().getDescription()).
+ setCreatedAt(shr.getCreatedAt().getTime())
+ .setUpdatedAt(shr.getLastModifiedAt().getTime()).build())
+ .setOwnerType(shr.getAssociatingIdType())
+ .setOwnerId(shr.getAssociatingId())
+ .setEntity(EntityMapper.createEntity(shr.getEntity()))
+ .build();
+ return metadata;
+ } catch (SQLException throwables) {
+ String msg = "Error occurred while creating metadata " + throwables.getMessage();
+ LOGGER.error(msg, throwables);
+ }
+ ;
+ return null;
+ }).collect(Collectors.toList()));
+
+ }
+ return Optional.empty();
+
+ }
+
}
diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java
index 9fd258b..4604da4 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/SharingRepository.java
@@ -52,12 +52,17 @@ public interface SharingRepository extends JpaRepository<Sharing, String> {
(long tenantId, String entityId, String permissionTypeId, String associatingIdType);
@Query(value = "select * from sharing s where s.tenant_id = ?1 and s.entity_id = ?2 " +
+ " and s.associating_id_type = ?3", nativeQuery = true)
+ public List<Sharing> findAllByEntityAndOwnerType
+ (long tenantId, String entityId, String associatingIdType);
+
+
+ @Query(value = "select * from sharing s where s.tenant_id = ?1 and s.entity_id = ?2 " +
"and s.permission_type_id = ?3 and s.associating_id_type = ?4 and s.sharing_type IN ?5", nativeQuery = true)
public List<Sharing> findAllByEntityAndPermissionTypeAndOwnerTypeAndSharingType
(long tenantId, String entityId, String permissionTypeId, String associatingIdType, List<String> sharingList);
-
@Transactional
public List<Sharing> deleteAllByInheritedParentIdAndPermissionTypeIdAndTenantIdAndSharingTypeAndAssociatingId(
String inheritedParentId, String permissionTypeId, long tenantId, String sharingType, String associatedId);
@@ -69,18 +74,16 @@ public interface SharingRepository extends JpaRepository<Sharing, String> {
@Query(value = "select * from sharing s where s.tenant_id = ?1 and s.entity_id = ?2 " +
"and s.permission_type_id IN ?3 and s.associating_id IN ?4", nativeQuery = true)
- public List<Sharing> findAllSharingOfEntityForGroupsUnderPermissions(long tenantId, String entityId,
- List<String> permissionTypes,
- List<String> associatedIds);
+ public List<Sharing> findAllSharingOfEntityForGroupsUnderPermissions(long tenantId, String entityId,
+ List<String> permissionTypes,
+ List<String> associatedIds);
@Query(value = "select * from sharing s where s.tenant_id = ?1 and s.associating_id IN ?2 " +
"and s.entity_id IN ?3", nativeQuery = true)
- public List<Sharing> findAllSharingEntitiesForUsers(long tenantId,
- List<String> associatedIds,
- List<String> entityIds);
-
-
+ public List<Sharing> findAllSharingEntitiesForUsers(long tenantId,
+ List<String> associatedIds,
+ List<String> entityIds);
}
diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java
index 14496a8..f2c63bc 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/service/SharingService.java
@@ -788,17 +788,17 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
try {
LOGGER.debug("Request received to getListOfSharedUsers " + request.getTenantId() + " for entity "
+ request.getEntity().getId());
-
+ List<Sharing> sharings = null;
long tenantId = request.getTenantId();
String entityId = request.getEntity().getId();
String internalEntityId = entityId + "@" + tenantId;
+
String permisstionType = request.getPermissionType().getId();
String internalPermissionTypeId = request.getPermissionType().getId() + "@" + tenantId;
-
Optional<org.apache.custos.sharing.persistance.model.PermissionType> permissionType =
permissionTypeRepository.findById(internalPermissionTypeId);
@@ -821,7 +821,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
Optional<org.apache.custos.sharing.persistance.model.PermissionType> optionalPermissionType =
permissionTypeRepository.findByExternalIdAndTenantId(Constants.OWNER, tenantId);
- List<Sharing> sharings = null;
+
if (optionalPermissionType.get().equals(internalPermissionTypeId)) {
List<String> sharingList = new ArrayList<>();
sharingList.add(Constants.DIRECT_CASCADING);
@@ -837,6 +837,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
internalPermissionTypeId, Constants.USER);
}
+
org.apache.custos.sharing.service.SharedOwners owners = SharingMapper.getSharedOwners(sharings);
responseObserver.onNext(owners);
@@ -923,6 +924,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
String entityId = request.getEntity().getId();
String internalEntityId = entityId + "@" + tenantId;
+ List<Sharing> sharings = null;
String permisstionType = request.getPermissionType().getId();
@@ -948,7 +950,7 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
return;
}
- List<Sharing> sharings = sharingRepository.
+ sharings = sharingRepository.
findAllByEntityAndPermissionTypeAndOwnerType(tenantId, internalEntityId,
internalPermissionTypeId, Constants.GROUP);
@@ -1236,6 +1238,55 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
}
+
+ @Override
+ public void getAllSharings(SharingRequest request, StreamObserver<GetAllSharingsResponse> responseObserver) {
+ try {
+ List<org.apache.custos.sharing.service.Entity> arrayList = new ArrayList<>();
+ List<org.apache.custos.sharing.persistance.model.Entity> entities = new ArrayList<>();
+ List<SharingMetadata> sharingMetadata = new ArrayList<>();
+ if (request.hasEntity() && !request.getEntity().getId().isEmpty()) {
+ arrayList.add(request.getEntity());
+ String entityId = request.getEntity().getId() + "@" + request.getTenantId();
+ Optional<org.apache.custos.sharing.persistance.model.Entity> entityOptional = entityRepository.findById(entityId);
+ if (entityOptional.isEmpty()) {
+ String msg = "Entity " + request.getEntity().getId() + " not found ";
+ LOGGER.error(msg);
+ responseObserver.onError(io.grpc.Status.NOT_FOUND.withDescription(msg).asRuntimeException());
+ return;
+ }
+ entities.add(entityOptional.get());
+ } else {
+ entities = entityRepository
+ .findAllByTenantId(request.getTenantId());
+ }
+ entities.forEach(entity -> {
+ List<Sharing> userSharings = sharingRepository.
+ findAllByEntityAndOwnerType(request.getTenantId(), entity.getId(), Constants.USER);
+ List<Sharing> groupSharings = sharingRepository.
+ findAllByEntityAndOwnerType(request.getTenantId(), entity.getId(), Constants.GROUP);
+ Optional<List<SharingMetadata>> optionalUserSharings = SharingMapper.getSharingMetadata(userSharings);
+ Optional<List<SharingMetadata>> optionalGroupSharings = SharingMapper.getSharingMetadata(groupSharings);
+ if (optionalUserSharings.isPresent()) {
+ sharingMetadata.addAll(optionalUserSharings.get());
+ }
+ if (optionalGroupSharings.isPresent()) {
+ sharingMetadata.addAll(optionalGroupSharings.get());
+ }
+
+ });
+ GetAllSharingsResponse response = GetAllSharingsResponse
+ .newBuilder().addAllSharedData(sharingMetadata).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+
+ } catch (Exception ex) {
+ String msg = "Error occurred while fetching all sharings " + request.getTenantId();
+ LOGGER.error(msg);
+ responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
+ }
+ }
+
private boolean addCascadingPermissionForEntity
(org.apache.custos.sharing.persistance.model.Entity entity, String internalParentId, long tenantId) {
List<String> newSharingTypes = new ArrayList<>();
diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/validator/InputValidator.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/validator/InputValidator.java
index 01463ef..2d2276b 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/validator/InputValidator.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/validator/InputValidator.java
@@ -94,6 +94,7 @@ public class InputValidator implements Validator {
validateCheckAccessRequest(obj, methodName);
break;
case "getAllDirectSharings":
+ case "getAllSharings":
validateGetAllDirectSharings(obj, methodName);
break;
default:
@@ -261,13 +262,13 @@ public class InputValidator implements Validator {
throw new MissingParameterException("Entity id is not found ", null);
}
- if (entityRequest.getPermissionType() == null) {
- throw new MissingParameterException("Permission Type is not found ", null);
- }
-
- if (entityRequest.getPermissionType().getId() == null || entityRequest.getPermissionType().getId().equals("")) {
- throw new MissingParameterException("Permission Type Id is not found ", null);
- }
+// if (entityRequest.getPermissionType() == null) {
+// throw new MissingParameterException("Permission Type is not found ", null);
+// }
+//
+// if (entityRequest.getPermissionType().getId() == null || entityRequest.getPermissionType().getId().equals("")) {
+// throw new MissingParameterException("Permission Type Id is not found ", null);
+// }
} else {
diff --git a/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto b/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
index b61b738..ca7023b 100644
--- a/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
+++ b/custos-core-services/sharing-core-service/src/main/proto/SharingService.proto
@@ -168,6 +168,10 @@ message GetAllDirectSharingsResponse {
repeated SharingMetadata shared_data = 1;
}
+message GetAllSharingsResponse {
+ repeated SharingMetadata shared_data = 1;
+}
+
message SharingMetadata {
Entity entity = 1;
string owner_id = 2;
@@ -204,6 +208,7 @@ service SharingService {
rpc getListOfSharedGroups (SharingRequest) returns (SharedOwners);
rpc getListOfDirectlySharedGroups (SharingRequest) returns (SharedOwners);
rpc getAllDirectSharings (SharingRequest) returns (GetAllDirectSharingsResponse);
+ rpc getAllSharings (SharingRequest) returns (GetAllSharingsResponse);
rpc shareEntityWithUsers (SharingRequest) returns (Status);
rpc shareEntityWithGroups (SharingRequest) returns (Status);
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto
index 978e69b..961f1aa 100644
--- a/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingManagementService.proto
@@ -163,6 +163,13 @@ service SharingManagementService {
}
+ rpc getAllSharings (org.apache.custos.sharing.service.SharingRequest) returns (org.apache.custos.sharing.service.GetAllSharingsResponse) {
+ option (google.api.http) = {
+ get: "/sharing-management/v1.0.0/share"
+ };
+
+ }
+
rpc shareEntityWithUsers (org.apache.custos.sharing.service.SharingRequest) returns (org.apache.custos.sharing.service.Status) {
option (google.api.http) = {
post: "/sharing-management/v1.0.0/users/share"
@@ -194,4 +201,6 @@ service SharingManagementService {
}
+
+
}
\ No newline at end of file
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto
index b61b738..ca7023b 100644
--- a/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/SharingService.proto
@@ -168,6 +168,10 @@ message GetAllDirectSharingsResponse {
repeated SharingMetadata shared_data = 1;
}
+message GetAllSharingsResponse {
+ repeated SharingMetadata shared_data = 1;
+}
+
message SharingMetadata {
Entity entity = 1;
string owner_id = 2;
@@ -204,6 +208,7 @@ service SharingService {
rpc getListOfSharedGroups (SharingRequest) returns (SharedOwners);
rpc getListOfDirectlySharedGroups (SharingRequest) returns (SharedOwners);
rpc getAllDirectSharings (SharingRequest) returns (GetAllDirectSharingsResponse);
+ rpc getAllSharings (SharingRequest) returns (GetAllSharingsResponse);
rpc shareEntityWithUsers (SharingRequest) returns (Status);
rpc shareEntityWithGroups (SharingRequest) returns (Status);
diff --git a/custos-integration-services/sharing-management-service-parent/sharing-management-service-sidecar/src/main/resources/sharing-management-service.pb b/custos-integration-services/sharing-management-service-parent/sharing-management-service-sidecar/src/main/resources/sharing-management-service.pb
index 7274dd7..afb2520 100644
Binary files a/custos-integration-services/sharing-management-service-parent/sharing-management-service-sidecar/src/main/resources/sharing-management-service.pb and b/custos-integration-services/sharing-management-service-parent/sharing-management-service-sidecar/src/main/resources/sharing-management-service.pb differ
diff --git a/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/java/org/apache/custos/sharing/management/service/SharingManagementService.java b/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/java/org/apache/custos/sharing/management/service/SharingManagementService.java
index 4809a61..50cc535 100644
--- a/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/java/org/apache/custos/sharing/management/service/SharingManagementService.java
+++ b/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/java/org/apache/custos/sharing/management/service/SharingManagementService.java
@@ -347,7 +347,7 @@ public class SharingManagementService extends SharingManagementServiceImplBase {
LOGGER.debug("Request received to deleteEntity in tenant " + request.getTenantId() +
" with entity Id " + request.getEntity().getId());
- Entity exEntity = sharingClient.getEntity(request);
+ Entity exEntity = sharingClient.getEntity(request);
Status status = sharingClient.deleteEntity(request);
Map<String, String> value = new HashMap<>();
value.put("ENTITY_ID", request.getEntity().getId());
@@ -484,6 +484,23 @@ public class SharingManagementService extends SharingManagementServiceImplBase {
}
}
+
+ @Override
+ public void getAllSharings(SharingRequest request, StreamObserver<GetAllSharingsResponse> responseObserver) {
+ try {
+ LOGGER.debug("Request received to getAllSharings in tenant " + request.getTenantId());
+
+ GetAllSharingsResponse response = sharingClient.getAllSharings(request);
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+
+ } catch (Exception ex) {
+ String msg = "Error occurred at getAllSharings " + ex.getMessage();
+ LOGGER.error(msg);
+ responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
+ }
+ }
+
@Override
public void shareEntityWithUsers(SharingRequest request, StreamObserver<Status> responseObserver) {
try {
diff --git a/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto b/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto
index 978e69b..961f1aa 100644
--- a/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto
+++ b/custos-integration-services/sharing-management-service-parent/sharing-management-service/src/main/proto/SharingManagementService.proto
@@ -163,6 +163,13 @@ service SharingManagementService {
}
+ rpc getAllSharings (org.apache.custos.sharing.service.SharingRequest) returns (org.apache.custos.sharing.service.GetAllSharingsResponse) {
+ option (google.api.http) = {
+ get: "/sharing-management/v1.0.0/share"
+ };
+
+ }
+
rpc shareEntityWithUsers (org.apache.custos.sharing.service.SharingRequest) returns (org.apache.custos.sharing.service.Status) {
option (google.api.http) = {
post: "/sharing-management/v1.0.0/users/share"
@@ -194,4 +201,6 @@ service SharingManagementService {
}
+
+
}
\ No newline at end of file