in services/src/main/java/org/apache/custos/service/management/TenantManagementService.java [399:520]
public UpdateStatusResponse updateTenantStatus(UpdateStatusRequest request) {
try {
GetCredentialRequest credentialRequest = GetCredentialRequest.newBuilder().
setId(request.getClientId())
.setType(Type.CUSTOS)
.build();
CredentialMetadata metadata = credentialStoreService.getCustosCredentialFromClientId(credentialRequest);
if (metadata != null) {
if (request.getSuperTenant()) {
metadata = metadata.toBuilder().setSuperTenant(true).build();
credentialStoreService.putCredential(metadata);
}
request = request.toBuilder().setTenantId(metadata.getOwnerId()).build();
UpdateStatusResponse response = tenantProfileService.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.core.tenant.profile.api.GetTenantRequest tenantRequest = org.apache.custos.core.tenant.profile.api.GetTenantRequest
.newBuilder()
.setTenantId(finalMetadata.getOwnerId())
.build();
org.apache.custos.core.tenant.profile.api.GetTenantResponse tenantResponse = tenantProfileService.getTenant(tenantRequest);
Tenant savedTenant = tenantResponse.getTenant();
GetCredentialRequest credentialRequest = GetCredentialRequest.newBuilder()
.setOwnerId(finalMetadata.getOwnerId())
.setType(Type.IAM)
.build();
CredentialMetadata iamMeta = credentialStoreService.getCredential(credentialRequest);
GetUserManagementSATokenRequest userManagementSATokenRequest = GetUserManagementSATokenRequest
.newBuilder()
.setClientId(iamMeta.getId())
.setClientSecret(iamMeta.getSecret())
.setTenantId(finalMetadata.getOwnerId())
.build();
AuthToken token = identityService.getUserManagementServiceAccountAccessToken(userManagementSATokenRequest);
if (token != null && StringUtils.isNotBlank(token.getAccessToken())) {
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 = iamAdminService.getUser(searchRequest);
UserProfile profile = convertToProfile(userRepresentation);
UserProfileRequest userProfileRequest = UserProfileRequest.newBuilder()
.setProfile(profile)
.setPerformedBy(finalRequest.getUpdatedBy())
.setTenantId(finalRequest.getTenantId())
.build();
UserProfile userProfile = userProfileService.getUserProfile(userProfileRequest);
if (userProfile == null || StringUtils.isBlank(userProfile.getUsername())) {
userProfileService.createUserProfile(userProfileRequest);
} else {
userProfileService.updateUserProfile(userProfileRequest);
}
} else {
String msg = "Tenant Activation task failed, cannot find IAM server credentials";
LOGGER.error(msg);
throw new RuntimeException(msg);
}
}
@Override
public void onError(ServiceException ex) {
String msg = "Tenant Activation task failed " + ex;
LOGGER.error(msg);
org.apache.custos.core.tenant.profile.api.UpdateStatusRequest updateTenantRequest = org.apache.custos.core.tenant.profile.api.UpdateStatusRequest.newBuilder()
.setTenantId(finalRequest.getTenantId())
.setStatus(TenantStatus.CANCELLED)
.setUpdatedBy(Constants.SYSTEM)
.build();
tenantProfileService.updateTenantStatus(updateTenantRequest);
throw new RuntimeException(msg);
}
};
ServiceChain chain = ServiceChain.newBuilder(tenantActivationTask, callback).build();
chain.serve(response);
});
return response;
} else {
return response;
}
} else {
String msg = "Cannot find a Tenant with given client id " + request.getTenantId();
LOGGER.error(msg);
throw new EntityNotFoundException(msg);
}
} catch (Exception ex) {
String msg = "Tenant update task failed for tenant " + request.getTenantId();
LOGGER.error(msg, ex);
throw new InternalServerException(msg, ex);
}
}