in custos-services/custos-integration-services/tenant-management-service/src/main/java/org/apache/custos/tenant/management/service/TenantManagementService.java [632:766]
public void updateTenantStatus(UpdateStatusRequest request, StreamObserver<UpdateStatusResponse> responseObserver) {
try {
GetCredentialRequest credentialRequest = GetCredentialRequest.newBuilder().
setId(request.getClientId())
.setType(Type.CUSTOS)
.build();
CredentialMetadata metadata = credentialStoreServiceClient.getCustosCredentialFromClientId(credentialRequest);
if (metadata != null) {
if (request.getSuperTenant()) {
metadata = metadata.toBuilder().setSuperTenant(true).build();
credentialStoreServiceClient.putCredential(metadata);
}
request = request.toBuilder().setTenantId(metadata.getOwnerId()).build();
UpdateStatusResponse response = profileClient.updateTenantStatus(request);
if (request.getStatus().equals(TenantStatus.ACTIVE)) {
Context ctx = Context.current().fork();
// Set ctx as the current context within the Runnable
UpdateStatusRequest finalRequest = request;
CredentialMetadata finalMetadata = metadata;
ctx.run(() -> {
ServiceCallback callback = new ServiceCallback() {
@Override
public void onCompleted(Object obj) {
org.apache.custos.tenant.profile.service.GetTenantRequest tenantRequest =
org.apache.custos.tenant.profile.service.GetTenantRequest
.newBuilder()
.setTenantId(finalMetadata.getOwnerId())
.build();
org.apache.custos.tenant.profile.service.GetTenantResponse tenantResponse =
profileClient.getTenant(tenantRequest);
Tenant savedTenant = tenantResponse.getTenant();
GetCredentialRequest credentialRequest = GetCredentialRequest.newBuilder()
.setOwnerId(finalMetadata.getOwnerId())
.setType(Type.IAM)
.build();
CredentialMetadata iamMeta = credentialStoreServiceClient.getCredential(credentialRequest);
GetUserManagementSATokenRequest userManagementSATokenRequest = GetUserManagementSATokenRequest
.newBuilder()
.setClientId(iamMeta.getId())
.setClientSecret(iamMeta.getSecret())
.setTenantId(finalMetadata.getOwnerId())
.build();
AuthToken token = identityClient.getUserManagementSATokenRequest(userManagementSATokenRequest);
if (token != null && token.getAccessToken() != null) {
UserSearchMetadata userSearchMetadata = UserSearchMetadata
.newBuilder()
.setUsername(savedTenant.getAdminUsername())
.build();
UserSearchRequest searchRequest = UserSearchRequest.newBuilder().
setTenantId(savedTenant.getTenantId())
.setPerformedBy(finalRequest.getUpdatedBy())
.setAccessToken(token.getAccessToken())
.setUser(userSearchMetadata)
.build();
UserRepresentation userRepresentation = iamAdminServiceClient.getUser(searchRequest);
UserProfile profile = convertToProfile(userRepresentation);
UserProfileRequest userProfileRequest = UserProfileRequest
.newBuilder()
.setProfile(profile)
.setPerformedBy(finalRequest.getUpdatedBy())
.setTenantId(finalRequest.getTenantId())
.build();
UserProfile userProfile = userProfileClient.getUser(userProfileRequest);
if (userProfile == null || userProfile.getUsername().equals("")) {
userProfileClient.createUserProfile(userProfileRequest);
} else {
userProfileClient.updateUserProfile(userProfileRequest);
}
responseObserver.onNext(response);
responseObserver.onCompleted();
} else {
String msg = "Tenant Activation task failed, cannot find IAM server credentials";
LOGGER.error(msg);
responseObserver.onError(Status.CANCELLED.withDescription(msg).asRuntimeException());
}
}
@Override
public void onError(ServiceException ex) {
String msg = "Tenant Activation task failed " + ex;
LOGGER.error(msg);
org.apache.custos.tenant.profile.service.UpdateStatusRequest updateTenantRequest =
org.apache.custos.tenant.profile.service.UpdateStatusRequest.newBuilder()
.setTenantId(finalRequest.getTenantId())
.setStatus(TenantStatus.CANCELLED)
.setUpdatedBy(Constants.SYSTEM)
.build();
profileClient.updateTenantStatus(updateTenantRequest);
responseObserver.onError(Status.CANCELLED.withDescription(msg).asRuntimeException());
}
};
ServiceChain chain = ServiceChain.newBuilder(tenantActivationTask, callback).build();
chain.serve(response);
});
} else {
responseObserver.onNext(response);
responseObserver.onCompleted();
}
} else {
String msg = "Cannot find a Tenant with given client id " + request.getTenantId();
LOGGER.error(msg);
responseObserver.onError(Status.NOT_FOUND.withDescription(msg).asRuntimeException());
}
} catch (Exception ex) {
String msg = "Tenant update task failed for tenant " + request.getTenantId();
LOGGER.error(msg,ex);
responseObserver.onError(Status.INTERNAL.withDescription(msg).withCause(ex).asRuntimeException());
}
}