Skip to content

Commit 84f1b30

Browse files
author
Peter Slump
authored
Merge pull request #14 from m2p-consulting/query-users
Allow to query registered users
2 parents 7c0c504 + 6dd8bb8 commit 84f1b30

2 files changed

Lines changed: 68 additions & 0 deletions

File tree

src/keycloak/admin/users.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,45 @@ def create(self, username, **kwargs):
5353
),
5454
data=json.dumps(payload)
5555
)
56+
57+
def all(self):
58+
"""
59+
Return all registered users
60+
61+
http://www.keycloak.org/docs-api/3.4/rest-api/index.html#_users_resource
62+
"""
63+
return self._client.get(
64+
url=self._client.get_full_url(
65+
self.get_path('collection', realm=self._realm_name)
66+
)
67+
)
68+
69+
def by_id(self, user_id):
70+
return User(realm_name=self._realm_name,
71+
user_id=user_id, client=self._client)
72+
73+
74+
class User(KeycloakAdminBase):
75+
_paths = {
76+
'single': '/auth/admin/realms/{realm}/users/{user_id}'
77+
}
78+
79+
def __init__(self, realm_name, user_id, *args, **kwargs):
80+
self._realm_name = realm_name
81+
self._user_id = user_id
82+
83+
super(User, self).__init__(*args, **kwargs)
84+
85+
def get(self):
86+
"""
87+
Return registered user with the given user id.
88+
89+
http://www.keycloak.org/docs-api/3.4/rest-api/index.html#_users_resource
90+
"""
91+
return self._client.get(
92+
url=self._client.get_full_url(
93+
self.get_path(
94+
'single', realm=self._realm_name, user_id=self._user_id
95+
)
96+
)
97+
)

tests/keycloak/admin/test_users.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,29 @@ def test_create(self):
3838
'Content-Type': 'application/json'
3939
}
4040
)
41+
42+
def test_get_collection(self):
43+
self.admin.realms.by_name('realm-name').users.all()
44+
self.realm.client.get_full_url.assert_called_once_with(
45+
'/auth/admin/realms/realm-name/users'
46+
)
47+
self.realm.client.get.assert_called_once_with(
48+
url=self.realm.client.get_full_url.return_value,
49+
headers={
50+
'Authorization': 'Bearer some-token',
51+
'Content-Type': 'application/json'
52+
}
53+
)
54+
55+
def test_get_single(self):
56+
self.admin.realms.by_name('realm-name').users.by_id('an-id').get()
57+
self.realm.client.get_full_url.assert_called_once_with(
58+
'/auth/admin/realms/realm-name/users/an-id'
59+
)
60+
self.realm.client.get.assert_called_once_with(
61+
url=self.realm.client.get_full_url.return_value,
62+
headers={
63+
'Authorization': 'Bearer some-token',
64+
'Content-Type': 'application/json'
65+
}
66+
)

0 commit comments

Comments
 (0)