From 9d4b64fa853237b13b5e5d38cb2c35f342178b9f Mon Sep 17 00:00:00 2001 From: sandushi Date: Fri, 19 Jul 2024 15:15:56 +0530 Subject: [PATCH 1/2] Refactor the users list limit to a common method --- .../scim2/common/impl/SCIMUserManager.java | 24 ++++++++++++++++++ .../provider/resources/UserResource.java | 25 ------------------- 2 files changed, 24 insertions(+), 25 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 bdb80d0d..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 @@ -605,6 +605,10 @@ public UsersGetResponse listUsersWithGET(Node rootNode, Integer startIndex, Inte String sortOrder, String domainName, Map requiredAttributes) throws CharonException, NotImplementedException, BadRequestException { + // Validates the count parameter if exists. + if (count != null && IdentityUtil.isSCIM2UserMaxItemsPerPageEnabled()) { + count = validateCountParameter(count); + } // Validate NULL value for startIndex. startIndex = handleStartIndexEqualsNULL(startIndex); if (sortBy != null || sortOrder != null) { @@ -6437,4 +6441,24 @@ private String maskIfRequired(String value) { return LoggerUtils.isLogMaskingEnable ? LoggerUtils.getMaskedContent(value) : value; } + + /** + * Validate the count query parameter. + * + * @param count Requested item count. + * @return Validated count parameter. + */ + private int validateCountParameter(Integer count) { + + int maximumItemsPerPage = IdentityUtil.getMaximumItemPerPage(); + if (count > maximumItemsPerPage) { + if (log.isDebugEnabled()) { + log.debug(String.format("Given limit exceeds the maximum limit. Therefore the limit is set to %s.", + maximumItemsPerPage)); + } + return maximumItemsPerPage; + } + + return count; + } } diff --git a/components/org.wso2.carbon.identity.scim2.provider/src/main/java/org/wso2/carbon/identity/scim2/provider/resources/UserResource.java b/components/org.wso2.carbon.identity.scim2.provider/src/main/java/org/wso2/carbon/identity/scim2/provider/resources/UserResource.java index 38b89816..0dda9d9d 100644 --- a/components/org.wso2.carbon.identity.scim2.provider/src/main/java/org/wso2/carbon/identity/scim2/provider/resources/UserResource.java +++ b/components/org.wso2.carbon.identity.scim2.provider/src/main/java/org/wso2/carbon/identity/scim2/provider/resources/UserResource.java @@ -199,11 +199,6 @@ public Response getUser(@HeaderParam(SCIMProviderConstants.ACCEPT_HEADER) String throw new FormatNotSupportedException(error); } - // Validates the count parameter if exists. - if (count != null && IdentityUtil.isSCIM2UserMaxItemsPerPageEnabled()) { - count = validateCountParameter(count); - } - // obtain the user store manager UserManager userManager = IdentitySCIMManager.getInstance().getUserManager(); @@ -400,24 +395,4 @@ private void removeAskPasswordConfirmationCodeThreadLocal() { IdentityUtil.threadLocalProperties.get() .remove(IdentityRecoveryConstants.AP_CONFIRMATION_CODE_THREAD_LOCAL_PROPERTY); } - - /** - * Validate the count query parameter. - * - * @param count Requested item count. - * @return Validated count parameter. - */ - private int validateCountParameter(Integer count) { - - int maximumItemsPerPage = IdentityUtil.getMaximumItemPerPage(); - if (count > maximumItemsPerPage) { - if (LOG.isDebugEnabled()) { - LOG.debug(String.format("Given limit exceeds the maximum limit. Therefore the limit is set to %s.", - maximumItemsPerPage)); - } - return maximumItemsPerPage; - } - - return count; - } } From c49ca30f2c9574a722c4c2ab3a33ef726f31a8ad Mon Sep 17 00:00:00 2001 From: sandushi Date: Tue, 23 Jul 2024 21:30:57 +0530 Subject: [PATCH 2/2] Add unit test --- .../common/impl/SCIMUserManagerTest.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/components/org.wso2.carbon.identity.scim2.common/src/test/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManagerTest.java b/components/org.wso2.carbon.identity.scim2.common/src/test/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManagerTest.java index fa83a844..65ce01b3 100644 --- a/components/org.wso2.carbon.identity.scim2.common/src/test/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManagerTest.java +++ b/components/org.wso2.carbon.identity.scim2.common/src/test/java/org/wso2/carbon/identity/scim2/common/impl/SCIMUserManagerTest.java @@ -532,8 +532,8 @@ public Object[][] listUser() throws Exception { @Test(dataProvider = "userInfoForFiltering") public void testFilteringUsersWithGET(List users, String filter, - int expectedResultCount, List - filteredUsers) throws Exception { + Integer count, int expectedResultCount, + List filteredUsers) throws Exception { Map scimToLocalClaimMap = new HashMap<>(); scimToLocalClaimMap.put("urn:ietf:params:scim:schemas:core:2.0:User:userName", @@ -570,6 +570,8 @@ public void testFilteringUsersWithGET(List testUser3Attributes = new HashMap<>(); + testUser3Attributes.put("http://wso2.org/claims/givenname", "testUser"); + testUser3Attributes.put("http://wso2.org/claims/emailaddress", "testUser3@wso2.com"); + testUser3.setAttributes(testUser1Attributes); + testUser3.setUserStoreDomain("PRIMARY"); + users.add(testUser3); + return new Object[][]{ - {users, "name.givenName eq testUser", 2, + {users, "name.givenName eq testUser", null, 2, new ArrayList() {{ add(testUser1); add(testUser2); }}}, - {users, "name.givenName eq testUser and emails eq testUser1@wso2.com", 1, + {users, "name.givenName eq testUser and emails eq testUser1@wso2.com", null, 1, new ArrayList() {{ add(testUser1); + }}}, + {users, "name.givenName eq testUser", 3, 2, + new ArrayList() {{ + add(testUser1); + add(testUser2); }}} }; }