in services/src/main/java/org/apache/custos/service/iam/IamAdminService.java [687:761]
public RegisterUsersResponse registerAndEnableUsers(RegisterUsersRequest request) {
try {
LOGGER.debug("Request received to registerMultipleUsers for " + request.getTenantId());
List<org.apache.custos.core.iam.api.UserRepresentation> userRepresentations = request.getUsersList();
List<org.apache.custos.core.iam.api.UserRepresentation> failedList = new ArrayList<>();
for (org.apache.custos.core.iam.api.UserRepresentation userRepresentation : userRepresentations) {
try {
keycloakClient.createUser(String.valueOf(request.getTenantId()),
userRepresentation.getUsername(),
userRepresentation.getPassword(),
userRepresentation.getFirstName(),
userRepresentation.getLastName(),
userRepresentation.getEmail(),
userRepresentation.getTemporaryPassword(),
request.getAccessToken());
keycloakClient.enableUserAccount(String.valueOf(request.getTenantId()),
request.getAccessToken(), userRepresentation.getUsername().toLowerCase());
List<String> userList = new ArrayList<>();
userList.add(userRepresentation.getUsername());
if (!userRepresentation.getRealmRolesList().isEmpty()) {
keycloakClient.addRolesToUsers(request.getAccessToken(), String.valueOf(request.getTenantId()), userList, userRepresentation.getRealmRolesList(),
request.getClientId(), false);
}
if (!userRepresentation.getClientRolesList().isEmpty()) {
keycloakClient.addRolesToUsers(request.getAccessToken(), String.valueOf(request.getTenantId()), userList, userRepresentation.getClientRolesList(),
request.getClientId(), true);
}
if (!userRepresentation.getAttributesList().isEmpty()) {
Map<String, List<String>> map = new HashMap<>();
for (UserAttribute attribute : userRepresentation.getAttributesList()) {
if (attribute.getKey().equals(Constants.REALM_AGENT)) {
// Constants.REALM_AGENT cannot be used as a valid attribute
continue;
}
map.put(attribute.getKey(), attribute.getValuesList());
}
keycloakClient.addUserAttributes(String.valueOf(request.getTenantId()), request.getAccessToken(), map, userList);
}
} catch (UnauthorizedException ex) {
String msg = " Error occurred while adding user " + userRepresentation.getUsername() +
" to realm" + request.getTenantId();
LOGGER.error(msg);
throw new RuntimeException(msg, ex);
} catch (Exception ex) {
if (ex.getMessage().contains("Unauthorized")) {
throw new RuntimeException("Unauthorized request", ex);
}
LOGGER.error(" Error occurred while adding user " + userRepresentation.getUsername() + " to realm" + request.getTenantId());
failedList.add(userRepresentation);
}
}
if (failedList.isEmpty()) {
statusUpdater.updateStatus(IAMOperations.REGISTER_ENABLE_USERS.name(), OperationStatus.FAILED, request.getTenantId(), request.getPerformedBy());
}
return RegisterUsersResponse.newBuilder().setAllUseresRegistered(failedList.isEmpty()).addAllFailedUsers(failedList).build();
} catch (Exception ex) {
statusUpdater.updateStatus(IAMOperations.REGISTER_ENABLE_USERS.name(), OperationStatus.FAILED, request.getTenantId(), String.valueOf(request.getTenantId()));
String msg = " Register multiple users failed for " + request.getTenantId();
throw new RuntimeException(msg, ex);
}
}