diff --git a/src/Http/Controllers/ResourceController.php b/src/Http/Controllers/ResourceController.php index d5eafff..cb59f25 100644 --- a/src/Http/Controllers/ResourceController.php +++ b/src/Http/Controllers/ResourceController.php @@ -18,6 +18,7 @@ use ArieTimmerman\Laravel\SCIMServer\Tests\Model\User; use Illuminate\Contracts\Pagination\CursorPaginator; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Pagination\Cursor; use Illuminate\Support\Facades\Validator; class ResourceController extends Controller @@ -259,6 +260,14 @@ function (Builder $query) use ($filter, $resourceType) { $resourceObjects = $resourceObjects->orderBy('id'); } + if($request->input('cursor')){ + $cursor = @Cursor::fromEncoded($request->input('cursor')); + + if($cursor == null){ + throw (new SCIMException('Invalid Cursor'))->setCode(400)->setScimType('invalidCursor'); + } + } + $resourceObjects = $resourceObjects->cursorPaginate( $count, cursor: $request->input('cursor') diff --git a/tests/BasicTest.php b/tests/BasicTest.php index 51b095d..3db4154 100644 --- a/tests/BasicTest.php +++ b/tests/BasicTest.php @@ -140,6 +140,19 @@ public function testCursorPagination() $this->assertNull($response2->json('startIndex')); } + public function testCursorPaginationFailure() + { + $response1 = $this->get('/scim/v2/Users?count=60&cursor=invalid'); + + $response1->assertStatus(400); + $response1->assertJson([ + 'schemas' => ['urn:ietf:params:scim:api:messages:2.0:Error'], + 'status' => '400', + 'scimType' => 'invalidCursor' + ]); + + } + public function testPagination() { $response = $this->get('/scim/v2/Users?startIndex=21&count=20');