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/01 02:14:15 UTC
[airavata-custos] branch develop updated: Add getAllDirectShares
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 7a6ee0e Add getAllDirectShares
new d6ddbd0 Merge pull request #182 from isururanawaka/develop
7a6ee0e is described below
commit 7a6ee0e2a0bbb4c42cb286adccc01f1d6d730c7b
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Mon May 31 22:12:38 2021 -0400
Add getAllDirectShares
---
.../management/client/SharingManagementClient.java | 4 +
.../custos/sharing/client/SharingClient.java | 4 +
.../persistance/repository/EntityRepository.java | 4 +
.../custos/sharing/service/SharingService.java | 79 +++++
.../custos/sharing/validator/InputValidator.java | 21 +-
.../src/main/proto/SharingService.proto | 15 +-
.../user/profile/mapper/UserProfileMapper.java | 2 +-
.../user/profile/service/UserProfileService.java | 2 +-
.../src/main/proto/UserProfileService.proto | 4 +-
.../protos/SharingManagementService.proto | 7 +
.../src/main/resources/protos/SharingService.proto | 15 +-
.../main/resources/protos/UserProfileService.proto | 4 +-
.../src/main/resources/group-management-service.pb | Bin 122043 -> 122233 bytes
.../interceptors/ClientAuthInterceptorImpl.java | 1 +
.../main/resources/sharing-management-service.pb | Bin 85419 -> 87361 bytes
.../service/SharingManagementService.java | 349 +++++++++++----------
.../src/main/proto/SharingManagementService.proto | 7 +
.../service/TenantManagementService.java | 30 ++
.../src/main/resources/user-management-service.pb | Bin 123620 -> 125267 bytes
19 files changed, 366 insertions(+), 182 deletions(-)
diff --git a/custos-client-sdks/custos-java-clients/sharing-management-client/src/main/java/org/apache/custos/sharing/management/client/SharingManagementClient.java b/custos-client-sdks/custos-java-clients/sharing-management-client/src/main/java/org/apache/custos/sharing/management/client/SharingManagementClient.java
index 0d81812..a177814 100644
--- a/custos-client-sdks/custos-java-clients/sharing-management-client/src/main/java/org/apache/custos/sharing/management/client/SharingManagementClient.java
+++ b/custos-client-sdks/custos-java-clients/sharing-management-client/src/main/java/org/apache/custos/sharing/management/client/SharingManagementClient.java
@@ -269,5 +269,9 @@ public class SharingManagementClient {
return blockingStub.userHasAccess(request);
}
+ public GetAllDirectSharingsResponse getAllDirectSharings(String clientId, SharingRequest request) {
+ request = request.toBuilder().setClientId(clientId).build();
+ return blockingStub.getAllDirectSharings(request);
+ }
}
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 7226d82..fa9a88f 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
@@ -187,5 +187,9 @@ public class SharingClient {
return sharingServiceBlockingStub.userHasAccess(request);
}
+ public GetAllDirectSharingsResponse getAllDirectSharings(org.apache.custos.sharing.service.SharingRequest request){
+ return sharingServiceBlockingStub.getAllDirectSharings(request);
+ }
+
}
diff --git a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/EntityRepository.java b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/EntityRepository.java
index f6623fa..813482c 100644
--- a/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/EntityRepository.java
+++ b/custos-core-services/sharing-core-service/src/main/java/org/apache/custos/sharing/persistance/repository/EntityRepository.java
@@ -28,6 +28,10 @@ public interface EntityRepository extends JpaRepository<Entity, String>, Search
public List<Entity> findAllByExternalParentIdAndTenantId(String externalParentId, long tenantId);
+ public List<Entity> findAllByTenantId(long tenantId);
+
+
+
}
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 18f7b4f..9a60a6d 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
@@ -35,6 +35,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -1156,6 +1157,84 @@ public class SharingService extends org.apache.custos.sharing.service.SharingSer
}
+ @Override
+ public void getAllDirectSharings(SharingRequest request, StreamObserver<GetAllDirectSharingsResponse> responseObserver) {
+ try {
+ LOGGER.debug("Request received to getAllEntities in " + request.getTenantId());
+ List<org.apache.custos.sharing.persistance.model.Entity> entities = entityRepository
+ .findAllByTenantId(request.getTenantId());
+ List<org.apache.custos.sharing.persistance.model.PermissionType> permissionTypes =
+ permissionTypeRepository.findAllByTenantId(request.getTenantId());
+ List<org.apache.custos.sharing.service.Entity> arrayList = new ArrayList<>();
+ List<SharingMetadata> sharingMetadata = new ArrayList<>();
+ entities.forEach(entity -> {
+ try {
+ Entity en = EntityMapper.createEntity(entity);
+ permissionTypes.forEach(perm -> {
+ String permId = perm.getId();
+ List<String> sharingList = new ArrayList<>();
+ sharingList.add(Constants.DIRECT_CASCADING);
+ sharingList.add(Constants.DIRECT_NON_CASCADING);
+
+ List<Sharing> sharings = sharingRepository.
+ findAllByEntityAndPermissionTypeAndOwnerTypeAndSharingType(request.getTenantId(), entity.getId(),
+ permId, Constants.USER, sharingList);
+ org.apache.custos.sharing.service.SharedOwners owners = SharingMapper.getSharedOwners(sharings);
+
+ if (owners != null) {
+ owners.getOwnerIdsList().forEach(ownerId -> {
+ SharingMetadata metadata =
+ SharingMetadata.newBuilder()
+ .setEntity(en)
+ .setOwnerId(ownerId)
+ .setOwnerType(Constants.USER)
+ .setPermission(PermissionType.newBuilder()
+ .setId(perm.getExternalId()).build()).build();
+ sharingMetadata.add(metadata);
+
+ });
+
+ }
+
+ List<Sharing> sharingsGroups = sharingRepository.
+ findAllByEntityAndPermissionTypeAndOwnerTypeAndSharingType(request.getTenantId(), entity.getId(),
+ permId, Constants.GROUP, sharingList);
+ org.apache.custos.sharing.service.SharedOwners groupOwners = SharingMapper.getSharedOwners(sharingsGroups);
+
+ if (groupOwners != null) {
+ groupOwners.getOwnerIdsList().forEach(ownerId -> {
+ SharingMetadata metadata =
+ SharingMetadata.newBuilder()
+ .setEntity(en)
+ .setOwnerId(ownerId)
+ .setOwnerType(Constants.GROUP)
+ .setPermission(PermissionType.newBuilder().
+ setId(perm.getExternalId()).build()).build();
+ sharingMetadata.add(metadata);
+
+ });
+
+ }
+ });
+
+ } catch (SQLException throwables) {
+ String msg = "Error occurred while transforming entity" + entity.getId();
+ LOGGER.error(msg);
+ }
+ });
+ GetAllDirectSharingsResponse response = GetAllDirectSharingsResponse
+ .newBuilder().addAllSharedData(sharingMetadata).build();
+ responseObserver.onNext(response);
+ responseObserver.onCompleted();
+
+ } catch (Exception ex) {
+ String msg = "Error occurred while fetching all entities related to " + 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 e5ea4aa..6d533b3 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
@@ -23,11 +23,6 @@ package org.apache.custos.sharing.validator;
import org.apache.custos.core.services.commons.Validator;
import org.apache.custos.core.services.commons.exceptions.MissingParameterException;
import org.apache.custos.sharing.service.*;
-import org.apache.custos.sharing.service.EntityRequest;
-import org.apache.custos.sharing.service.EntityTypeRequest;
-import org.apache.custos.sharing.service.PermissionTypeRequest;
-import org.apache.custos.sharing.service.SearchRequest;
-import org.apache.custos.sharing.service.SharingRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -98,6 +93,9 @@ public class InputValidator implements Validator {
case "userHasAccess":
validateCheckAccessRequest(obj, methodName);
break;
+ case "getAllDirectSharings":
+ validateGetAllDirectSharings(obj, methodName);
+ break;
default:
throw new RuntimeException("Method not implemented");
}
@@ -352,5 +350,18 @@ public class InputValidator implements Validator {
return true;
}
+ private boolean validateGetAllDirectSharings(Object object, String methodName) {
+ if (object instanceof SharingRequest) {
+ SharingRequest entityRequest = (SharingRequest) object;
+ if (entityRequest.getTenantId() == 0) {
+ throw new MissingParameterException("Tenant Id not found ", null);
+ }
+
+ } else {
+ throw new RuntimeException("Unexpected input type for method " + methodName);
+ }
+ return true;
+ }
+
}
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 fca0096..b61b738 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
@@ -164,6 +164,17 @@ message SharedOwners {
repeated string owner_ids = 1;
}
+message GetAllDirectSharingsResponse {
+ repeated SharingMetadata shared_data = 1;
+}
+
+message SharingMetadata {
+ Entity entity = 1;
+ string owner_id = 2;
+ string owner_type = 3;
+ PermissionType permission = 4;
+}
+
service SharingService {
@@ -187,10 +198,12 @@ service SharingService {
rpc searchEntities (SearchRequest) returns (Entities);
+
rpc getListOfSharedUsers (SharingRequest) returns (SharedOwners);
rpc getListOfDirectlySharedUsers (SharingRequest) returns (SharedOwners);
rpc getListOfSharedGroups (SharingRequest) returns (SharedOwners);
rpc getListOfDirectlySharedGroups (SharingRequest) returns (SharedOwners);
+ rpc getAllDirectSharings (SharingRequest) returns (GetAllDirectSharingsResponse);
rpc shareEntityWithUsers (SharingRequest) returns (Status);
rpc shareEntityWithGroups (SharingRequest) returns (Status);
@@ -199,6 +212,4 @@ service SharingService {
rpc userHasAccess (SharingRequest) returns (Status);
-
-
}
\ No newline at end of file
diff --git a/custos-core-services/user-profile-core-service/src/main/java/org/apache/custos/user/profile/mapper/UserProfileMapper.java b/custos-core-services/user-profile-core-service/src/main/java/org/apache/custos/user/profile/mapper/UserProfileMapper.java
index 2e13a1e..efcd135 100644
--- a/custos-core-services/user-profile-core-service/src/main/java/org/apache/custos/user/profile/mapper/UserProfileMapper.java
+++ b/custos-core-services/user-profile-core-service/src/main/java/org/apache/custos/user/profile/mapper/UserProfileMapper.java
@@ -195,7 +195,7 @@ public class UserProfileMapper {
}
if (membershipType != null ) {
- builder.setMembershipType(DefaultGroupMembershipTypes.valueOf(membershipType));
+ builder.setMembershipType(membershipType);
}
if (profileEntity.getType() == null) {
diff --git a/custos-core-services/user-profile-core-service/src/main/java/org/apache/custos/user/profile/service/UserProfileService.java b/custos-core-services/user-profile-core-service/src/main/java/org/apache/custos/user/profile/service/UserProfileService.java
index c39af1b..1ceeabf 100644
--- a/custos-core-services/user-profile-core-service/src/main/java/org/apache/custos/user/profile/service/UserProfileService.java
+++ b/custos-core-services/user-profile-core-service/src/main/java/org/apache/custos/user/profile/service/UserProfileService.java
@@ -253,7 +253,7 @@ public class UserProfileService extends UserProfileServiceGrpc.UserProfileServic
responseObserver.onCompleted();
} catch (Exception ex) {
String msg = "Error occurred while fetching user profile for tenant " + request.getTenantId();
- LOGGER.error(msg);
+ LOGGER.error(msg,ex);
responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
}
diff --git a/custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto b/custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto
index 66197e6..feef80d 100644
--- a/custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto
+++ b/custos-core-services/user-profile-core-service/src/main/proto/UserProfileService.proto
@@ -65,7 +65,7 @@ message UserProfile {
repeated string realm_roles = 9;
int64 last_modified_at = 10;
UserTypes type = 11;
- DefaultGroupMembershipTypes membership_type = 12;
+ string membership_type = 12;
}
message UserProfileRequest {
@@ -115,7 +115,7 @@ message GroupRequest {
Group group = 2;
string performed_by = 3;
string client_id = 4;
- DefaultGroupMembershipTypes membership_type = 5;
+ string membership_type = 5;
string id = 6;
string client_sec =7;
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 594912f..978e69b 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
@@ -156,6 +156,13 @@ service SharingManagementService {
}
+ rpc getAllDirectSharings (org.apache.custos.sharing.service.SharingRequest) returns (org.apache.custos.sharing.service.GetAllDirectSharingsResponse) {
+ option (google.api.http) = {
+ get: "/sharing-management/v1.0.0/share/direct"
+ };
+
+ }
+
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"
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 fca0096..b61b738 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
@@ -164,6 +164,17 @@ message SharedOwners {
repeated string owner_ids = 1;
}
+message GetAllDirectSharingsResponse {
+ repeated SharingMetadata shared_data = 1;
+}
+
+message SharingMetadata {
+ Entity entity = 1;
+ string owner_id = 2;
+ string owner_type = 3;
+ PermissionType permission = 4;
+}
+
service SharingService {
@@ -187,10 +198,12 @@ service SharingService {
rpc searchEntities (SearchRequest) returns (Entities);
+
rpc getListOfSharedUsers (SharingRequest) returns (SharedOwners);
rpc getListOfDirectlySharedUsers (SharingRequest) returns (SharedOwners);
rpc getListOfSharedGroups (SharingRequest) returns (SharedOwners);
rpc getListOfDirectlySharedGroups (SharingRequest) returns (SharedOwners);
+ rpc getAllDirectSharings (SharingRequest) returns (GetAllDirectSharingsResponse);
rpc shareEntityWithUsers (SharingRequest) returns (Status);
rpc shareEntityWithGroups (SharingRequest) returns (Status);
@@ -199,6 +212,4 @@ service SharingService {
rpc userHasAccess (SharingRequest) returns (Status);
-
-
}
\ No newline at end of file
diff --git a/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/UserProfileService.proto b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/UserProfileService.proto
index 66197e6..feef80d 100644
--- a/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/UserProfileService.proto
+++ b/custos-integration-services/custos-integration-services-swagger/src/main/resources/protos/UserProfileService.proto
@@ -65,7 +65,7 @@ message UserProfile {
repeated string realm_roles = 9;
int64 last_modified_at = 10;
UserTypes type = 11;
- DefaultGroupMembershipTypes membership_type = 12;
+ string membership_type = 12;
}
message UserProfileRequest {
@@ -115,7 +115,7 @@ message GroupRequest {
Group group = 2;
string performed_by = 3;
string client_id = 4;
- DefaultGroupMembershipTypes membership_type = 5;
+ string membership_type = 5;
string id = 6;
string client_sec =7;
diff --git a/custos-integration-services/group-management-service-parent/group-management-service-sidecar/src/main/resources/group-management-service.pb b/custos-integration-services/group-management-service-parent/group-management-service-sidecar/src/main/resources/group-management-service.pb
index da1d054..1208f85 100644
Binary files a/custos-integration-services/group-management-service-parent/group-management-service-sidecar/src/main/resources/group-management-service.pb and b/custos-integration-services/group-management-service-parent/group-management-service-sidecar/src/main/resources/group-management-service.pb differ
diff --git a/custos-integration-services/group-management-service-parent/group-management-service/src/main/java/org/apache/custos/group/management/interceptors/ClientAuthInterceptorImpl.java b/custos-integration-services/group-management-service-parent/group-management-service/src/main/java/org/apache/custos/group/management/interceptors/ClientAuthInterceptorImpl.java
index 4ae83c8..d576b03 100644
--- a/custos-integration-services/group-management-service-parent/group-management-service/src/main/java/org/apache/custos/group/management/interceptors/ClientAuthInterceptorImpl.java
+++ b/custos-integration-services/group-management-service-parent/group-management-service/src/main/java/org/apache/custos/group/management/interceptors/ClientAuthInterceptorImpl.java
@@ -83,6 +83,7 @@ public class ClientAuthInterceptorImpl extends MultiTenantAuthInterceptor {
long tenantId = cl.getTenantId();
return (ReqT) ((GroupRequest) reqT).toBuilder()
.setClientId(oauthId)
+ .setClientSec(oauthSec)
.setTenantId(tenantId)
.setPerformedBy(cl.getPerformedBy() != null ? cl.getPerformedBy() : Constants.SYSTEM)
.build();
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 227eb2a..7274dd7 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 5a9f498..b6216f8 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
@@ -28,7 +28,6 @@ import org.apache.custos.iam.service.UserSearchRequest;
import org.apache.custos.identity.client.IdentityClient;
import org.apache.custos.identity.service.AuthToken;
import org.apache.custos.identity.service.GetUserManagementSATokenRequest;
-import org.apache.custos.identity.service.User;
import org.apache.custos.integration.services.commons.utils.InterServiceModelMapper;
import org.apache.custos.sharing.client.SharingClient;
import org.apache.custos.sharing.management.exceptions.SharingException;
@@ -365,14 +364,14 @@ public class SharingManagementService extends SharingManagementServiceImplBase {
UserProfileRequest profileRequest = UserProfileRequest.newBuilder()
.setProfile(profile).setTenantId(request.getTenantId()).build();
- GetAllGroupsResponse response = userProfileClient.getAllGroupsOfUser(profileRequest);
+ GetAllGroupsResponse response = userProfileClient.getAllGroupsOfUser(profileRequest);
- List<String> associatingIds = new ArrayList<>();
- associatingIds.add(userId);
+ List<String> associatingIds = new ArrayList<>();
+ associatingIds.add(userId);
- for (Group gr: response.getGroupsList()) {
- associatingIds.add(gr.getId());
- }
+ for (Group gr : response.getGroupsList()) {
+ associatingIds.add(gr.getId());
+ }
request = request.toBuilder().addAllAssociatingIds(associatingIds).build();
@@ -457,255 +456,271 @@ public class SharingManagementService extends SharingManagementServiceImplBase {
}
@Override
- public void shareEntityWithUsers(SharingRequest request, StreamObserver<Status> responseObserver) {
+ public void getAllDirectSharings(SharingRequest request, StreamObserver<GetAllDirectSharingsResponse> responseObserver) {
try {
- LOGGER.debug("Request received to shareEntityWithUsers in tenant " + request.getTenantId() +
- " for entity " + request.getEntity().getId());
-
- long tenantId = request.getTenantId();
-
- String clientId = request.getClientId();
-
- String clientSec = request.getClientSec();
+ LOGGER.debug("Request received to getAllDirectSharings in tenant " + request.getTenantId());
- for (String username : request.getOwnerIdList()) {
-
- validateAndGetUserProfile(username, clientId, clientSec, tenantId);
- }
-
- Status status = sharingClient.shareEntityWithUsers(request);
-
- responseObserver.onNext(status);
+ GetAllDirectSharingsResponse response = sharingClient.getAllDirectSharings(request);
+ responseObserver.onNext(response);
responseObserver.onCompleted();
-
} catch (Exception ex) {
- String msg = "Error occurred at shareEntityWithUsers " + ex.getMessage();
+ String msg = "Error occurred at getAllDirectSharings " + ex.getMessage();
LOGGER.error(msg);
responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
}
}
- @Override
- public void shareEntityWithGroups(SharingRequest request, StreamObserver<Status> responseObserver) {
- try {
- LOGGER.debug("Request received to shareEntityWithGroups in tenant " + request.getTenantId() +
- " with entity Id " + request.getEntity().getId());
+ @Override
+ public void shareEntityWithUsers (SharingRequest request, StreamObserver < Status > responseObserver){
+ try {
+ LOGGER.debug("Request received to shareEntityWithUsers in tenant " + request.getTenantId() +
+ " for entity " + request.getEntity().getId());
- long tenantId = request.getTenantId();
+ long tenantId = request.getTenantId();
- for (String groupId : request.getOwnerIdList()) {
+ String clientId = request.getClientId();
- validateAndGetGroupId(groupId, tenantId);
- }
+ String clientSec = request.getClientSec();
- Status status = sharingClient.shareEntityWithGroups(request);
+ for (String username : request.getOwnerIdList()) {
- responseObserver.onNext(status);
- responseObserver.onCompleted();
+ validateAndGetUserProfile(username, clientId, clientSec, tenantId);
+ }
- } catch (Exception ex) {
- String msg = "Error occurred at shareEntityWithGroups " + ex.getMessage();
- LOGGER.error(msg);
- responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
- }
- }
+ Status status = sharingClient.shareEntityWithUsers(request);
- @Override
- public void revokeEntitySharingFromUsers(SharingRequest request, StreamObserver<Status> responseObserver) {
- try {
- LOGGER.debug("Request received to revokeEntitySharingFromUsers in tenant " + request.getTenantId() +
- " for entity " + request.getEntity().getId());
+ responseObserver.onNext(status);
+ responseObserver.onCompleted();
- long tenantId = request.getTenantId();
- String clientId = request.getClientId();
+ } catch (Exception ex) {
+ String msg = "Error occurred at shareEntityWithUsers " + ex.getMessage();
+ LOGGER.error(msg);
+ responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
+ }
+ }
- String clientSec = request.getClientSec();
+ @Override
+ public void shareEntityWithGroups (SharingRequest request, StreamObserver < Status > responseObserver){
+ try {
+ LOGGER.debug("Request received to shareEntityWithGroups in tenant " + request.getTenantId() +
+ " with entity Id " + request.getEntity().getId());
- for (String username : request.getOwnerIdList()) {
+ long tenantId = request.getTenantId();
- validateAndGetUserProfile(username, clientId, clientSec, tenantId);
- }
+ for (String groupId : request.getOwnerIdList()) {
- Status status = sharingClient.revokeEntitySharingFromUsers(request);
+ validateAndGetGroupId(groupId, tenantId);
+ }
- responseObserver.onNext(status);
- responseObserver.onCompleted();
+ Status status = sharingClient.shareEntityWithGroups(request);
+ responseObserver.onNext(status);
+ responseObserver.onCompleted();
- } catch (Exception ex) {
- String msg = "Error occurred at revokeEntitySharingFromUsers " + ex.getMessage();
- LOGGER.error(msg);
- responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
+ } catch (Exception ex) {
+ String msg = "Error occurred at shareEntityWithGroups " + ex.getMessage();
+ LOGGER.error(msg);
+ responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
+ }
}
- }
- @Override
- public void revokeEntitySharingFromGroups(SharingRequest request, StreamObserver<Status> responseObserver) {
- try {
- LOGGER.debug("Request received to revokeEntitySharingFromGroups in tenant " + request.getTenantId() +
- " for entity " + request.getEntity().getId());
+ @Override
+ public void revokeEntitySharingFromUsers (SharingRequest request, StreamObserver < Status > responseObserver){
+ try {
+ LOGGER.debug("Request received to revokeEntitySharingFromUsers in tenant " + request.getTenantId() +
+ " for entity " + request.getEntity().getId());
- long tenantId = request.getTenantId();
+ long tenantId = request.getTenantId();
+ String clientId = request.getClientId();
- for (String username : request.getOwnerIdList()) {
+ String clientSec = request.getClientSec();
- validateAndGetGroupId(username, tenantId);
- }
+ for (String username : request.getOwnerIdList()) {
- Status status = sharingClient.revokeEntitySharingFromGroups(request);
+ validateAndGetUserProfile(username, clientId, clientSec, tenantId);
+ }
- responseObserver.onNext(status);
- responseObserver.onCompleted();
+ Status status = sharingClient.revokeEntitySharingFromUsers(request);
+ responseObserver.onNext(status);
+ responseObserver.onCompleted();
- } catch (Exception ex) {
- String msg = "Error occurred at revokeEntitySharingFromGroups " + ex.getMessage();
- LOGGER.error(msg);
- responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
- }
- }
- @Override
- public void userHasAccess(SharingRequest request, StreamObserver<Status> responseObserver) {
- try {
- LOGGER.debug("Request received to userHasAccess in tenant " + request.getTenantId() +
- " for entity " + request.getEntity().getId());
+ } catch (Exception ex) {
+ String msg = "Error occurred at revokeEntitySharingFromUsers " + ex.getMessage();
+ LOGGER.error(msg);
+ responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
+ }
+ }
- String clientId = request.getClientId();
+ @Override
+ public void revokeEntitySharingFromGroups (SharingRequest request, StreamObserver < Status > responseObserver){
+ try {
+ LOGGER.debug("Request received to revokeEntitySharingFromGroups in tenant " + request.getTenantId() +
+ " for entity " + request.getEntity().getId());
- String clientSec = request.getClientSec();
+ long tenantId = request.getTenantId();
- long tenantId = request.getTenantId();
+ for (String username : request.getOwnerIdList()) {
- UserProfile profile = UserProfile.newBuilder().setUsername(request.getOwnerId(0)).build();
+ validateAndGetGroupId(username, tenantId);
+ }
- UserProfileRequest userProfileRequest = UserProfileRequest.newBuilder()
- .setTenantId(tenantId)
- .setProfile(profile)
- .build();
- GetAllGroupsResponse response = userProfileClient.getAllGroupsOfUser(userProfileRequest);
+ Status status = sharingClient.revokeEntitySharingFromGroups(request);
- List<Group> groups = response.getGroupsList();
+ responseObserver.onNext(status);
+ responseObserver.onCompleted();
- if (groups != null && !groups.isEmpty()) {
- for (Group group : groups) {
- request = request.toBuilder().addOwnerId(group.getId()).build();
- }
+ } catch (Exception ex) {
+ String msg = "Error occurred at revokeEntitySharingFromGroups " + ex.getMessage();
+ LOGGER.error(msg);
+ responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
}
+ }
- Status status = sharingClient.userHasAccess(request);
+ @Override
+ public void userHasAccess (SharingRequest request, StreamObserver < Status > responseObserver){
+ try {
+ LOGGER.debug("Request received to userHasAccess in tenant " + request.getTenantId() +
+ " for entity " + request.getEntity().getId());
- responseObserver.onNext(status);
- responseObserver.onCompleted();
+ String clientId = request.getClientId();
- for (String username : request.getOwnerIdList()) {
+ String clientSec = request.getClientSec();
- validateAndGetUserProfile(username, clientId, clientSec, tenantId);
- }
+ long tenantId = request.getTenantId();
- } catch (Exception ex) {
- String msg = "Error occurred at userHasAccess " + ex.getMessage();
- LOGGER.error(msg);
- responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
- }
- }
+ UserProfile profile = UserProfile.newBuilder().setUsername(request.getOwnerId(0)).build();
- private String validateAndGetUserProfile(String username, String clientId, String clientSec, long tenantId) {
+ UserProfileRequest userProfileRequest = UserProfileRequest.newBuilder()
+ .setTenantId(tenantId)
+ .setProfile(profile)
+ .build();
+ GetAllGroupsResponse response = userProfileClient.getAllGroupsOfUser(userProfileRequest);
- GetUserManagementSATokenRequest userManagementSATokenRequest = GetUserManagementSATokenRequest
- .newBuilder()
- .setClientId(clientId)
- .setClientSecret(clientSec)
- .setTenantId(tenantId)
- .build();
- AuthToken token = identityClient.getUserManagementSATokenRequest(userManagementSATokenRequest);
+ List<Group> groups = response.getGroupsList();
- if (token != null && token.getAccessToken() != null) {
+ if (groups != null && !groups.isEmpty()) {
- UserSearchMetadata searchMetadata = UserSearchMetadata
- .newBuilder()
- .setUsername(username)
- .build();
+ for (Group group : groups) {
+ request = request.toBuilder().addOwnerId(group.getId()).build();
+ }
+ }
- UserSearchRequest searchRequest = UserSearchRequest
- .newBuilder()
- .setTenantId(tenantId)
- .setAccessToken(token.getAccessToken())
- .setUser(searchMetadata)
- .build();
+ Status status = sharingClient.userHasAccess(request);
+
+ responseObserver.onNext(status);
+ responseObserver.onCompleted();
+
+ for (String username : request.getOwnerIdList()) {
- CheckingResponse response = iamAdminServiceClient.isUserExist(searchRequest);
- if (!response.getIsExist()) {
- throw new SharingException("User " + username + " not found", null);
+ validateAndGetUserProfile(username, clientId, clientSec, tenantId);
+ }
+
+ } catch (Exception ex) {
+ String msg = "Error occurred at userHasAccess " + ex.getMessage();
+ LOGGER.error(msg);
+ responseObserver.onError(io.grpc.Status.INTERNAL.withDescription(msg).asRuntimeException());
}
+ }
- UserProfile userProfile = UserProfile
- .newBuilder()
- .setUsername(username)
- .build();
- UserProfileRequest request = UserProfileRequest
+ private String validateAndGetUserProfile (String username, String clientId, String clientSec,long tenantId){
+
+ GetUserManagementSATokenRequest userManagementSATokenRequest = GetUserManagementSATokenRequest
.newBuilder()
- .setProfile(userProfile)
+ .setClientId(clientId)
+ .setClientSecret(clientSec)
.setTenantId(tenantId)
.build();
+ AuthToken token = identityClient.getUserManagementSATokenRequest(userManagementSATokenRequest);
- UserProfile profile = userProfileClient.getUser(request);
+ if (token != null && token.getAccessToken() != null) {
- if (profile == null || profile.getUsername() == null || profile.getUsername().equals("")) {
+ UserSearchMetadata searchMetadata = UserSearchMetadata
+ .newBuilder()
+ .setUsername(username)
+ .build();
- UserRepresentation representation = iamAdminServiceClient.getUser(searchRequest);
+ UserSearchRequest searchRequest = UserSearchRequest
+ .newBuilder()
+ .setTenantId(tenantId)
+ .setAccessToken(token.getAccessToken())
+ .setUser(searchMetadata)
+ .build();
- UserProfile exProfile = InterServiceModelMapper.convert(representation);
+ CheckingResponse response = iamAdminServiceClient.isUserExist(searchRequest);
+ if (!response.getIsExist()) {
+ throw new SharingException("User " + username + " not found", null);
+ }
+
+ UserProfile userProfile = UserProfile
+ .newBuilder()
+ .setUsername(username)
+ .build();
- UserProfileRequest req = UserProfileRequest
+ UserProfileRequest request = UserProfileRequest
.newBuilder()
- .setProfile(exProfile)
+ .setProfile(userProfile)
.setTenantId(tenantId)
.build();
- userProfileClient.createUserProfile(req);
- return exProfile.getUsername();
+ UserProfile profile = userProfileClient.getUser(request);
- }
+ if (profile == null || profile.getUsername() == null || profile.getUsername().equals("")) {
- return profile.getUsername();
+ UserRepresentation representation = iamAdminServiceClient.getUser(searchRequest);
- } else {
+ UserProfile exProfile = InterServiceModelMapper.convert(representation);
- throw new SharingException("User management token not found ", null);
- }
+ UserProfileRequest req = UserProfileRequest
+ .newBuilder()
+ .setProfile(exProfile)
+ .setTenantId(tenantId)
+ .build();
+ userProfileClient.createUserProfile(req);
+ return exProfile.getUsername();
- }
+ }
- private String validateAndGetGroupId(String groupId, long tenantId) {
+ return profile.getUsername();
+ } else {
- Group group = Group.newBuilder().setId(groupId).build();
+ throw new SharingException("User management token not found ", null);
+ }
- GroupRequest groupRequest = GroupRequest
- .newBuilder()
- .setTenantId(tenantId)
- .setGroup(group).build();
- Group exGroup = userProfileClient.getGroup(groupRequest);
+ }
- if (exGroup == null || exGroup.getId() == null || exGroup.getId().equals("")) {
+ private String validateAndGetGroupId (String groupId,long tenantId){
- throw new SharingException("Group with Id " + groupId + " not found", null);
- }
- return exGroup.getId();
+ Group group = Group.newBuilder().setId(groupId).build();
+ GroupRequest groupRequest = GroupRequest
+ .newBuilder()
+ .setTenantId(tenantId)
+ .setGroup(group).build();
- }
+ Group exGroup = userProfileClient.getGroup(groupRequest);
+ if (exGroup == null || exGroup.getId() == null || exGroup.getId().equals("")) {
-}
+ throw new SharingException("Group with Id " + groupId + " not found", null);
+ }
+
+ return exGroup.getId();
+
+
+ }
+
+
+ }
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 594912f..978e69b 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
@@ -156,6 +156,13 @@ service SharingManagementService {
}
+ rpc getAllDirectSharings (org.apache.custos.sharing.service.SharingRequest) returns (org.apache.custos.sharing.service.GetAllDirectSharingsResponse) {
+ option (google.api.http) = {
+ get: "/sharing-management/v1.0.0/share/direct"
+ };
+
+ }
+
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"
diff --git a/custos-integration-services/tenant-management-service-parent/tenant-management-service/src/main/java/org/apache/custos/tenant/management/service/TenantManagementService.java b/custos-integration-services/tenant-management-service-parent/tenant-management-service/src/main/java/org/apache/custos/tenant/management/service/TenantManagementService.java
index 74887d3..e339edb 100644
--- a/custos-integration-services/tenant-management-service-parent/tenant-management-service/src/main/java/org/apache/custos/tenant/management/service/TenantManagementService.java
+++ b/custos-integration-services/tenant-management-service-parent/tenant-management-service/src/main/java/org/apache/custos/tenant/management/service/TenantManagementService.java
@@ -536,6 +536,36 @@ public class TenantManagementService extends TenantManagementServiceImplBase {
public void getChildTenants(GetTenantsRequest request, StreamObserver<GetAllTenantsResponse> responseObserver) {
try {
GetAllTenantsResponse response = profileClient.getAllTenants(request);
+ if (response != null && !response.getTenantList().isEmpty()) {
+ List<Tenant> tenantList = new ArrayList<>();
+
+ for (Tenant tenant : response.getTenantList()) {
+
+ GetCredentialRequest credentialRequest = GetCredentialRequest.newBuilder()
+ .setOwnerId(tenant.getTenantId())
+ .setType(Type.CUSTOS).build();
+
+ CredentialMetadata metadata = credentialStoreServiceClient.
+ getCredential(credentialRequest);
+
+
+ if (tenant.getParentTenantId() > 0) {
+ GetCredentialRequest cR = GetCredentialRequest.newBuilder()
+ .setOwnerId(tenant.getParentTenantId())
+ .setType(Type.CUSTOS).build();
+
+ CredentialMetadata parentMetadata = credentialStoreServiceClient.
+ getCredential(cR);
+ tenant = tenant.toBuilder().setParentClientId(parentMetadata.getId()).build();
+ }
+
+ tenant = tenant.toBuilder().setClientId(metadata.getId()).build();
+ tenantList.add(tenant);
+
+ }
+
+ response = response.toBuilder().clearTenant().addAllTenant(tenantList).build();
+ }
responseObserver.onNext(response);
responseObserver.onCompleted();
} catch (Exception ex) {
diff --git a/custos-integration-services/user-management-service-parent/user-management-service-sidecar/src/main/resources/user-management-service.pb b/custos-integration-services/user-management-service-parent/user-management-service-sidecar/src/main/resources/user-management-service.pb
index baccaa2..b4aa501 100644
Binary files a/custos-integration-services/user-management-service-parent/user-management-service-sidecar/src/main/resources/user-management-service.pb and b/custos-integration-services/user-management-service-parent/user-management-service-sidecar/src/main/resources/user-management-service.pb differ