public RegisterUsersResponse registerAndEnableUsers()

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);
        }
    }