Browse Source

Merge pull request #357 from marcospereirampj/351-create_client-client-name-is-neither-mandatory-nor-unique-per-realm-clientid-does-not-need-to-be-a-uuid

fix: check client existence based on clientId
319-any-information-on-which-versions-of-keycloak-are-supported v2.0.0
Richard Nemeth 2 years ago
committed by GitHub
parent
commit
68574e17d1
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      src/keycloak/keycloak_admin.py
  2. 10
      tests/test_keycloak_admin.py
  3. 4
      tests/test_keycloak_openid.py

8
src/keycloak/keycloak_admin.py

@ -1046,19 +1046,19 @@ class KeycloakAdmin:
data_raw = self.raw_get(urls_patterns.URL_ADMIN_CLIENT.format(**params_path))
return raise_error_from_response(data_raw, KeycloakGetError)
def get_client_id(self, client_name):
def get_client_id(self, client_id):
"""Get internal keycloak client id from client-id.
This is required for further actions against this client.
:param client_name: name in ClientRepresentation
:param client_id: clientId in ClientRepresentation
https://www.keycloak.org/docs-api/18.0/rest-api/index.html#_clientrepresentation
:return: client_id (uuid as string)
"""
clients = self.get_clients()
for client in clients:
if client_name == client.get("name") or client_name == client.get("clientId"):
if client_id == client.get("clientId"):
return client["id"]
return None
@ -1237,7 +1237,7 @@ class KeycloakAdmin:
:return: Client ID
"""
if skip_exists:
client_id = self.get_client_id(client_name=payload["name"])
client_id = self.get_client_id(client_id=payload["clientId"])
if client_id is not None:
return client_id

10
tests/test_keycloak_admin.py

@ -655,8 +655,8 @@ def test_clients(admin: KeycloakAdmin, realm: str):
assert len(admin.get_clients()) == 7
# Test get client id
assert admin.get_client_id(client_name="test-client") == client_id
assert admin.get_client_id(client_name="does-not-exist") is None
assert admin.get_client_id(client_id="test-client") == client_id
assert admin.get_client_id(client_id="does-not-exist") is None
# Test update client
res = admin.update_client(client_id=client_id, payload={"name": "test-client-change"})
@ -856,7 +856,7 @@ def test_clients(admin: KeycloakAdmin, realm: str):
assert err.match('404: b\'{"error":"Could not find client"}\'')
secrets = admin.get_client_secrets(
client_id=admin.get_client_id(client_name="test-confidential")
client_id=admin.get_client_id(client_id="test-confidential")
)
assert secrets == {"type": "secret", "value": "test-secret"}
@ -865,11 +865,11 @@ def test_clients(admin: KeycloakAdmin, realm: str):
assert err.match('404: b\'{"error":"Could not find client"}\'')
res = admin.generate_client_secrets(
client_id=admin.get_client_id(client_name="test-confidential")
client_id=admin.get_client_id(client_id="test-confidential")
)
assert res
assert (
admin.get_client_secrets(client_id=admin.get_client_id(client_name="test-confidential"))
admin.get_client_secrets(client_id=admin.get_client_id(client_id="test-confidential"))
== res
)

4
tests/test_keycloak_openid.py

@ -163,10 +163,10 @@ def test_exchange_token(
admin.realm_name = oid.realm_name
admin.assign_client_role(
user_id=admin.get_user_id(username=username),
client_id=admin.get_client_id(client_name="realm-management"),
client_id=admin.get_client_id(client_id="realm-management"),
roles=[
admin.get_client_role(
client_id=admin.get_client_id(client_name="realm-management"),
client_id=admin.get_client_id(client_id="realm-management"),
role_name="impersonation",
)
],

Loading…
Cancel
Save