You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2024/07/11 09:35:08 UTC

(syncope) branch 3_0_X updated: SCIM: better support for startIndex

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 3_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/3_0_X by this push:
     new b09e3c1c36 SCIM: better support for startIndex
b09e3c1c36 is described below

commit b09e3c1c36b1816eba80bfd1d942d3938378893b
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Jul 11 11:34:57 2024 +0200

    SCIM: better support for startIndex
---
 .../ext/scimv2/cxf/service/AbstractSCIMService.java       | 15 ++++++++++++---
 .../test/java/org/apache/syncope/fit/core/SCIMITCase.java | 13 +++++++++++--
 2 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/AbstractSCIMService.java b/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/AbstractSCIMService.java
index 268c006bd7..223d559712 100644
--- a/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/AbstractSCIMService.java
+++ b/ext/scimv2/scim-rest-cxf/src/main/java/org/apache/syncope/ext/scimv2/cxf/service/AbstractSCIMService.java
@@ -155,13 +155,22 @@ abstract class AbstractSCIMService<R extends SCIMResource> {
 
         SearchCondVisitor visitor = new SearchCondVisitor(type, confManager.get());
 
-        int page = request.getStartIndex() <= 1
-                ? 1
-                : (request.getStartIndex() / AnyDAO.DEFAULT_PAGE_SIZE) + 1;
         int startIndex = request.getStartIndex() <= 1 ? 1 : request.getStartIndex();
 
         int itemsPerPage = request.getCount() <= 1 ? AnyDAO.DEFAULT_PAGE_SIZE : request.getCount();
 
+        int page = request.getStartIndex() <= 1 ? 1 : (request.getStartIndex() / itemsPerPage) + 1;
+
+        /*
+         * startIndex=1 and count=10 is supported
+         * startIndex=11 and count=10 is supported
+         * startIndex=21 and count=10 is supported
+         * startIndex=2 and count=10 is not supported
+         */
+        if ((startIndex - 1) % itemsPerPage != 0) {
+            throw new BadRequestException(ErrorType.invalidValue, "Unsupported startIndex value provided");
+        }
+
         List<OrderByClause> sort;
         if (request.getSortBy() == null) {
             sort = List.of();
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java
index f28bafd5b4..9d9b091a57 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java
@@ -322,7 +322,7 @@ public class SCIMITCase extends AbstractITCase {
 
         response = webClient().path("Groups").
                 query("sortBy", "displayName").
-                query("startIndex", 2).
+                query("startIndex", 12).
                 query("count", 11).
                 get();
         assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
@@ -334,7 +334,7 @@ public class SCIMITCase extends AbstractITCase {
         });
         assertNotNull(result);
         assertTrue(result.getTotalResults() > 0);
-        assertEquals(2, result.getStartIndex());
+        assertEquals(12, result.getStartIndex());
         assertEquals(11, result.getItemsPerPage());
 
         assertFalse(result.getResources().isEmpty());
@@ -342,6 +342,15 @@ public class SCIMITCase extends AbstractITCase {
             assertNotNull(group.getId());
             assertNotNull(group.getDisplayName());
         });
+
+        response = webClient().path("Groups").
+                query("sortBy", "displayName").
+                query("startIndex", 2).
+                query("count", 11).
+                get();
+        error = response.readEntity(SCIMError.class);
+        assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), error.getStatus());
+        assertEquals(ErrorType.invalidValue, error.getScimType());
     }
 
     @Test