From 3ad34418ae8bfdb303a12167c65c5c5eb3da053d Mon Sep 17 00:00:00 2001 From: Thisara Welmilla Date: Wed, 31 Jul 2024 10:33:22 +0530 Subject: [PATCH] Revert "Fix multi-attribute user filter with count provided." --- .../scim2/common/impl/SCIMUserManager.java | 69 +++---------------- 1 file changed, 11 insertions(+), 58 deletions(-) diff --git a/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManager.java b/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManager.java index e2175dda..18e10841 100644 --- a/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManager.java +++ b/components/org.wso2.carbon.identity.scim2.common/src/main/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManager.java @@ -1885,39 +1885,6 @@ private int calculateLimit(int limit, int numberOfFilteredUsers) { return newLimit; } - /** - * Method to update the offset when iterating a filter across all domains with multi attribute filter. - * - * @param node Condition node of the multi attribute filter - * @param offset Starting index - * @param sortBy Sort by - * @param sortOrder Sort order - * @param domainName Domain to be filtered - * @return New calculated offset - * @throws CharonException Error while filtering the domain from index 1 to offset - */ - private int calculateOffsetForMultiAttributeFilter(Node node, int offset, String sortBy, String sortOrder, - String domainName) throws CharonException, BadRequestException { - - if (log.isDebugEnabled()) { - log.debug(String.format("Checking for number of matches from the beginning to the original offset: %d for " - + "the same filter and updating the new offset.", offset)); - } - // Starting index of the filter - int initialOffset = 1; - - // Checking the number of matches till the original offset. - boolean paginationRequest = false; - Set skippedUsers = - getFilteredUsersFromMultiAttributeFiltering(node, initialOffset, offset, sortBy, sortOrder, domainName, - paginationRequest); - - int skippedUserCount = skippedUsers.size(); - - // Calculate the new offset and return - return offset - skippedUserCount; - } - /** * Method to update the offset when iterating a filter across all domains. * @@ -2162,14 +2129,14 @@ private UsersGetResponse getMultiAttributeFilteredUsers(Node node, Map 0) { - users = getMultiAttributeFilteredUsersWithMaxLimit(node, offset, sortBy, sortOrder, domainName, limit, + users = getFilteredUsersFromMultiAttributeFiltering(node, offset, limit, sortBy, sortOrder, domainName, true); + filteredUsers.addAll(getFilteredUserDetails(users, requiredAttributes)); } else { int maxLimit = getMaxLimit(domainName); - users = getMultiAttributeFilteredUsersWithMaxLimit(node, offset, sortBy, sortOrder, domainName, maxLimit, - false); + users = getMultiAttributeFilteredUsersWithMaxLimit(node, offset, sortBy, sortOrder, domainName, maxLimit); + filteredUsers.addAll(getFilteredUserDetails(users, requiredAttributes)); } - filteredUsers.addAll(getFilteredUserDetails(users, requiredAttributes)); // Check that total user count matching the client query needs to be calculated. if (isJDBCUSerStore(domainName) || isAllConfiguredUserStoresJDBC() || SCIMCommonUtils.isConsiderTotalRecordsForTotalResultOfLDAPEnabled()) { @@ -2179,7 +2146,7 @@ private UsersGetResponse getMultiAttributeFilteredUsers(Node node, Map 1) { @@ -2191,41 +2158,27 @@ private UsersGetResponse getMultiAttributeFilteredUsers(Node node, Map getMultiAttributeFilteredUsersWithMaxLimit(Node node, int offset, - String sortBy, String sortOrder, String domainName, int maxLimit, boolean paginationRequested) + String sortBy, String sortOrder, String domainName, int maxLimit) throws CharonException, BadRequestException { - Set users = new LinkedHashSet<>(); + Set users = null; if (StringUtils.isNotEmpty(domainName)) { users = getFilteredUsersFromMultiAttributeFiltering(node, offset, maxLimit, sortBy, sortOrder, domainName, false); return users; } else { AbstractUserStoreManager tempCarbonUM = carbonUM; - // If domain name are not given, then perform filtering on all available user stores. - while (tempCarbonUM != null && maxLimit > 0) { + // If pagination and domain name are not given, then perform filtering on all available user stores. + while (tempCarbonUM != null) { // If carbonUM is not an instance of Abstract User Store Manger we can't get the domain name. if (tempCarbonUM instanceof AbstractUserStoreManager) { domainName = tempCarbonUM.getRealmConfiguration().getUserStoreProperty("DomainName"); - users.addAll(getFilteredUsersFromMultiAttributeFiltering(node, offset, maxLimit, sortBy, sortOrder, - domainName, paginationRequested)); + users = getFilteredUsersFromMultiAttributeFiltering(node, offset, maxLimit, sortBy, sortOrder, + domainName, false); } // If secondary user store manager assigned to carbonUM then global variable carbonUM will contains the // secondary user store manager. tempCarbonUM = (AbstractUserStoreManager) tempCarbonUM.getSecondaryUserStoreManager(); - - // Calculating new offset and limit parameters. - int numberOfFilteredUsers = users.size(); - if (numberOfFilteredUsers <= 0 && offset > 1) { - if (log.isDebugEnabled()) { - log.debug(String.format("Filter returned no results for original offset: %d.", offset)); - } - offset = calculateOffsetForMultiAttributeFilter(node, offset, sortBy, sortOrder, domainName); - } else { - // Returned usernames size > 0 implies there are users in that domain which is larger than - // the offset. - offset = 1; - maxLimit = calculateLimit(maxLimit, numberOfFilteredUsers); - } } return users; }