Skip to content

Commit

Permalink
Merge pull request #560 from sandushi/scim-limit
Browse files Browse the repository at this point in the history
Refactor the users list limit to a common method
  • Loading branch information
sandushi committed Jul 24, 2024
2 parents 6e658d1 + c49ca30 commit 9a83268
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,10 @@ public UsersGetResponse listUsersWithGET(Node rootNode, Integer startIndex, Inte
String sortOrder, String domainName, Map<String, Boolean> 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) {
Expand Down Expand Up @@ -6484,4 +6488,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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -532,8 +532,8 @@ public Object[][] listUser() throws Exception {

@Test(dataProvider = "userInfoForFiltering")
public void testFilteringUsersWithGET(List<org.wso2.carbon.user.core.common.User> users, String filter,
int expectedResultCount, List<org.wso2.carbon.user.core.common.User>
filteredUsers) throws Exception {
Integer count, int expectedResultCount,
List<org.wso2.carbon.user.core.common.User> filteredUsers) throws Exception {

Map<String, String> scimToLocalClaimMap = new HashMap<>();
scimToLocalClaimMap.put("urn:ietf:params:scim:schemas:core:2.0:User:userName",
Expand Down Expand Up @@ -570,6 +570,8 @@ public void testFilteringUsersWithGET(List<org.wso2.carbon.user.core.common.User
when(mockRealmService.getBootstrapRealmConfiguration()).thenReturn(mockedRealmConfig);
mockStatic(IdentityUtil.class);
when(IdentityUtil.isGroupsVsRolesSeparationImprovementsEnabled()).thenReturn(false);
when(IdentityUtil.getMaximumItemPerPage()).thenReturn(2);
when(IdentityUtil.isSCIM2UserMaxItemsPerPageEnabled()).thenReturn(true);

ClaimMapping[] claimMappings = getTestClaimMappings();
when(mockedClaimManager.getAllClaimMappings(anyString())).thenReturn(claimMappings);
Expand All @@ -585,7 +587,7 @@ public void testFilteringUsersWithGET(List<org.wso2.carbon.user.core.common.User
node = filterTreeManager.buildTree();
}

UsersGetResponse result = scimUserManager.listUsersWithGET(node, 1, null, null, null, null,
UsersGetResponse result = scimUserManager.listUsersWithGET(node, Integer.valueOf(1), count, null, null, null,
requiredClaimsMap);
assertEquals(result.getUsers().size(), expectedResultCount);
}
Expand Down Expand Up @@ -613,16 +615,30 @@ public Object[][] userInfoForFiltering() {
testUser2.setUserStoreDomain("PRIMARY");
users.add(testUser2);

org.wso2.carbon.user.core.common.User testUser3 = new org.wso2.carbon.user.core.common.User(UUID.randomUUID()
.toString(), "testUser3", "testUser3");
Map<String, String> 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<org.wso2.carbon.user.core.common.User>() {{
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<org.wso2.carbon.user.core.common.User>() {{
add(testUser1);
}}},
{users, "name.givenName eq testUser", 3, 2,
new ArrayList<org.wso2.carbon.user.core.common.User>() {{
add(testUser1);
add(testUser2);
}}}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down Expand Up @@ -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;
}
}

0 comments on commit 9a83268

Please sign in to comment.