|
28 | 28 | from builtins import isinstance |
29 | 29 | from typing import List, Iterable |
30 | 30 |
|
| 31 | +from keycloak.urls_patterns import URL_ADMIN_GROUPS_REALM_ROLES, \ |
| 32 | + URL_ADMIN_GET_GROUPS_REALM_ROLES |
31 | 33 | from .connection import ConnectionManager |
32 | 34 | from .exceptions import raise_error_from_response, KeycloakGetError |
33 | 35 | from .keycloak_openid import KeycloakOpenID |
@@ -60,7 +62,7 @@ class KeycloakAdmin: |
60 | 62 | _custom_headers = None |
61 | 63 | _user_realm_name = None |
62 | 64 |
|
63 | | - def __init__(self, server_url, username, password, realm_name='master', client_id='admin-cli', verify=True, |
| 65 | + def __init__(self, server_url, username=None, password=None, realm_name='master', client_id='admin-cli', verify=True, |
64 | 66 | client_secret_key=None, custom_headers=None, user_realm_name=None, auto_refresh_token=None): |
65 | 67 | """ |
66 | 68 |
|
@@ -936,6 +938,47 @@ def assign_realm_roles(self, user_id, client_id, roles): |
936 | 938 | data=json.dumps(payload)) |
937 | 939 | return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) |
938 | 940 |
|
| 941 | + def assign_group_realm_roles(self, group_id, roles): |
| 942 | + """ |
| 943 | + Assign realm roles to a group |
| 944 | +
|
| 945 | + :param group_id: id of groupp |
| 946 | + :param roles: roles list or role (use GroupRoleRepresentation) |
| 947 | + :return Keycloak server response |
| 948 | + """ |
| 949 | + |
| 950 | + payload = roles if isinstance(roles, list) else [roles] |
| 951 | + params_path = {"realm-name": self.realm_name, "id": group_id} |
| 952 | + data_raw = self.raw_post(URL_ADMIN_GROUPS_REALM_ROLES.format(**params_path), |
| 953 | + data=json.dumps(payload)) |
| 954 | + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) |
| 955 | + |
| 956 | + def delete_group_realm_roles(self, group_id, roles): |
| 957 | + """ |
| 958 | + Delete realm roles of a group |
| 959 | +
|
| 960 | + :param group_id: id of group |
| 961 | + :param roles: roles list or role (use GroupRoleRepresentation) |
| 962 | + :return Keycloak server response |
| 963 | + """ |
| 964 | + |
| 965 | + payload = roles if isinstance(roles, list) else [roles] |
| 966 | + params_path = {"realm-name": self.realm_name, "id": group_id} |
| 967 | + data_raw = self.raw_delete(URL_ADMIN_GROUPS_REALM_ROLES.format(**params_path), |
| 968 | + data=json.dumps(payload)) |
| 969 | + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) |
| 970 | + |
| 971 | + def get_group_realm_roles(self, group_id): |
| 972 | + """ |
| 973 | + Get all realm roles for a group. |
| 974 | +
|
| 975 | + :param user_id: id of the group |
| 976 | + :return: Keycloak server response (array RoleRepresentation) |
| 977 | + """ |
| 978 | + params_path = {"realm-name": self.realm_name, "id": group_id} |
| 979 | + data_raw = self.raw_get(URL_ADMIN_GET_GROUPS_REALM_ROLES.format(**params_path)) |
| 980 | + return raise_error_from_response(data_raw, KeycloakGetError) |
| 981 | + |
939 | 982 | def get_client_roles_of_user(self, user_id, client_id): |
940 | 983 | """ |
941 | 984 | Get all client roles for a user. |
@@ -1103,6 +1146,20 @@ def add_mapper_to_client_scope(self, client_scope_id, payload): |
1103 | 1146 |
|
1104 | 1147 | return raise_error_from_response(data_raw, KeycloakGetError, expected_code=201) |
1105 | 1148 |
|
| 1149 | + def generate_client_secrets(self, client_id): |
| 1150 | + """ |
| 1151 | +
|
| 1152 | + Generate a new secret for the client |
| 1153 | + https://www.keycloak.org/docs-api/8.0/rest-api/index.html#_regeneratesecret |
| 1154 | +
|
| 1155 | + :param client_id: id of client (not client-id) |
| 1156 | + :return: Keycloak server response (ClientRepresentation) |
| 1157 | + """ |
| 1158 | + |
| 1159 | + params_path = {"realm-name": self.realm_name, "id": client_id} |
| 1160 | + data_raw = self.raw_post(URL_ADMIN_CLIENT_SECRETS.format(**params_path), data=None) |
| 1161 | + return raise_error_from_response(data_raw, KeycloakGetError) |
| 1162 | + |
1106 | 1163 | def get_client_secrets(self, client_id): |
1107 | 1164 | """ |
1108 | 1165 |
|
|
0 commit comments