From f6cada728f39b0cf56ef69b947591ab5501e5de2 Mon Sep 17 00:00:00 2001
From: Arie Peterson <arie@greenhost.nl>
Date: Wed, 11 Oct 2023 10:29:23 +0200
Subject: [PATCH] Fix kratos pagination when listing identities

---
 backend/areas/users/user_service.py |  9 ++++++---
 backend/helpers/kratos_user.py      | 18 ++++++++++++------
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/backend/areas/users/user_service.py b/backend/areas/users/user_service.py
index d899e3ea..b5e7681e 100644
--- a/backend/areas/users/user_service.py
+++ b/backend/areas/users/user_service.py
@@ -22,10 +22,13 @@ kratos_identity_api = identity_api.IdentityApi(kratos_client)
 class UserService:
     @staticmethod
     def get_users():
-        page = 1
+        page = 0
         userList = []
-        while page > 0:
-            res = KratosApi.get("/admin/identities?per_page=1000&page={}".format(page)).json()
+        while page >= 0:
+            if page == 0:
+                res = KratosApi.get("/admin/identities?per_page=1000").json()
+            else:
+                res = KratosApi.get("/admin/identities?per_page=1000&page={}".format(page)).json()
             for r in res:
                 # removed the app role assignment function, passing simple user data
                 # userList.append(UserService.__insertAppRoleToUser(r["id"], r))
diff --git a/backend/helpers/kratos_user.py b/backend/helpers/kratos_user.py
index d5f50d11..13a10e3a 100644
--- a/backend/helpers/kratos_user.py
+++ b/backend/helpers/kratos_user.py
@@ -133,9 +133,12 @@ class KratosUser():
         kratos_id = None
 
         # Get out user ID by iterating over all available IDs
-        page = 1
-        while page > 0:
-            data = api.list_identities(per_page=1000, page=page)
+        page = 0
+        while page >= 0:
+            if page == 0:
+                data = api.list_identities(per_page=1000)
+            else:
+                data = api.list_identities(per_page=1000, page=page)
             for kratos_obj in data:
                 # Unique identifier we use
                 if kratos_obj.traits['email'] == email:
@@ -158,9 +161,12 @@ class KratosUser():
         kratos_id = None
         return_list = []
         # Get out user ID by iterating over all available ID
-        page = 1
-        while page > 0:
-            data = api.list_identities(per_page=1000, page=page)
+        page = 0
+        while page >= 0:
+            if page == 0:
+                data = api.list_identities(per_page=1000)
+            else:
+                data = api.list_identities(per_page=1000, page=page)
             for kratos_obj in data:
                 kratos_id = str(kratos_obj.id)
                 return_list.append(KratosUser(api, kratos_id))
-- 
GitLab