Class: KeycloakAdmin::UserClient
- Inherits:
-
Client
- Object
- Client
- KeycloakAdmin::UserClient
show all
- Defined in:
- lib/keycloak-admin/client/user_client.rb
Instance Method Summary
collapse
-
#add_client_roles_on_user(user_id, client_id, role_representations) ⇒ Object
-
#add_group(user_id, group_id) ⇒ Object
-
#create!(username, email, password, email_verified, locale, attributes = {}) ⇒ Object
-
#credentials(user_id) ⇒ Object
-
#credentials_url(user_id) ⇒ Object
-
#delete(user_id) ⇒ Object
-
#execute_actions_email(user_id, actions = [], lifespan = nil, redirect_uri = nil, client_id = nil) ⇒ Object
-
#execute_actions_email_url(user_id) ⇒ Object
-
#federated_identity_url(user_id, identity_provider) ⇒ Object
-
#forgot_password(user_id, lifespan = nil) ⇒ Object
-
#get(user_id) ⇒ Object
-
#get_redirect_impersonation(user_id) ⇒ Object
-
#groups(user_id) ⇒ Object
-
#groups_url(user_id) ⇒ Object
-
#impersonate(user_id) ⇒ Object
-
#impersonation_url(user_id) ⇒ Object
-
#initialize(configuration, realm_client) ⇒ UserClient
constructor
A new instance of UserClient.
-
#link_idp(user_id, idp_id, idp_user_id, idp_username) ⇒ Object
-
#list ⇒ Object
-
#logout(user_id) ⇒ Object
-
#logout_url(user_id) ⇒ Object
-
#remove_group(user_id, group_id) ⇒ Object
-
#reset_password_url(user_id) ⇒ Object
-
#save(user_representation) ⇒ Object
-
#search(query) ⇒ Object
Query can be a string or a hash.
-
#sessions(user_id) ⇒ Object
-
#unlink_idp(user_id, idp_id) ⇒ Object
-
#update(user_id, user_representation_body) ⇒ Object
pay attention that, since Keycloak 24.0.4, partial updates of attributes are not authorized anymore.
-
#update_password(user_id, new_password) ⇒ Object
-
#user_client_role_mappings_url(user_id, client_id) ⇒ Object
-
#users_url(id = nil) ⇒ Object
Methods inherited from Client
#create_payload, #created_id, #current_token, #execute_http, #headers, #server_url
Constructor Details
#initialize(configuration, realm_client) ⇒ UserClient
Returns a new instance of UserClient.
3
4
5
6
7
|
# File 'lib/keycloak-admin/client/user_client.rb', line 3
def initialize(configuration, realm_client)
super(configuration)
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
@realm_client = realm_client
end
|
Instance Method Details
#add_client_roles_on_user(user_id, client_id, role_representations) ⇒ Object
60
61
62
63
64
65
66
|
# File 'lib/keycloak-admin/client/user_client.rb', line 60
def add_client_roles_on_user(user_id, client_id, role_representations)
execute_http do
resource(user_client_role_mappings_url(user_id, client_id)).post(
create_payload(role_representations),
)
end
end
|
#add_group(user_id, group_id) ⇒ Object
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/keycloak-admin/client/user_client.rb', line 37
def add_group(user_id, group_id)
Resource.execute(
@configuration.faraday_options.merge(
method: :put,
url: "#{users_url(user_id)}/groups/#{group_id}",
payload: create_payload({}),
headers: ,
logger: @configuration.logger
)
)
end
|
#create!(username, email, password, email_verified, locale, attributes = {}) ⇒ Object
9
10
11
12
|
# File 'lib/keycloak-admin/client/user_client.rb', line 9
def create!(username, email, password, email_verified, locale, attributes={})
user = save(build(username, email, password, email_verified, locale, attributes))
search(user.email)&.first
end
|
#credentials(user_id) ⇒ Object
130
131
132
133
134
135
|
# File 'lib/keycloak-admin/client/user_client.rb', line 130
def credentials(user_id)
response = execute_http do
resource(credentials_url(user_id)).get()
end
JSON.parse(response).map { |group_as_hash| CredentialRepresentation.from_hash(group_as_hash) }
end
|
#credentials_url(user_id) ⇒ Object
249
250
251
252
|
# File 'lib/keycloak-admin/client/user_client.rb', line 249
def credentials_url(user_id)
raise ArgumentError.new("user_id must be defined") if user_id.nil?
"#{users_url(user_id)}/credentials"
end
|
#delete(user_id) ⇒ Object
101
102
103
104
105
106
|
# File 'lib/keycloak-admin/client/user_client.rb', line 101
def delete(user_id)
execute_http do
resource(users_url(user_id)).delete()
end
true
end
|
#execute_actions_email(user_id, actions = [], lifespan = nil, redirect_uri = nil, client_id = nil) ⇒ Object
141
142
143
144
145
146
147
148
149
150
|
# File 'lib/keycloak-admin/client/user_client.rb', line 141
def execute_actions_email(user_id, actions=[], lifespan=nil, redirect_uri=nil, client_id=nil)
raise ArgumentError.new("client_id must be defined") if client_id.nil? && !redirect_uri.nil?
execute_http do
lifespan_param = lifespan.nil? ? "" : "&lifespan=#{lifespan.seconds}"
redirect_uri_param = redirect_uri.nil? ? "" : "&redirect_uri=#{redirect_uri}"
client_id_param = client_id.nil? ? "" : "client_id=#{client_id}"
Resource.put("#{execute_actions_email_url(user_id)}?#{client_id_param}#{redirect_uri_param}#{lifespan_param}", create_payload(actions), , @configuration.logger)
end
user_id
end
|
#execute_actions_email_url(user_id) ⇒ Object
239
240
241
242
|
# File 'lib/keycloak-admin/client/user_client.rb', line 239
def execute_actions_email_url(user_id)
raise ArgumentError.new("user_id must be defined") if user_id.nil?
"#{users_url(user_id)}/execute-actions-email"
end
|
#federated_identity_url(user_id, identity_provider) ⇒ Object
259
260
261
262
263
|
# File 'lib/keycloak-admin/client/user_client.rb', line 259
def federated_identity_url(user_id, identity_provider)
raise ArgumentError.new("user_id must be defined") if user_id.nil?
raise ArgumentError.new("identity_provider must be defined") if identity_provider.nil?
"#{users_url(user_id)}/federated-identity/#{identity_provider}"
end
|
#forgot_password(user_id, lifespan = nil) ⇒ Object
137
138
139
|
# File 'lib/keycloak-admin/client/user_client.rb', line 137
def forgot_password(user_id, lifespan=nil)
execute_actions_email(user_id, ["UPDATE_PASSWORD"], lifespan)
end
|
#get(user_id) ⇒ Object
68
69
70
71
72
73
|
# File 'lib/keycloak-admin/client/user_client.rb', line 68
def get(user_id)
response = execute_http do
resource(users_url(user_id)).get()
end
UserRepresentation.from_hash(JSON.parse(response))
end
|
#get_redirect_impersonation(user_id) ⇒ Object
#groups(user_id) ⇒ Object
108
109
110
111
112
113
|
# File 'lib/keycloak-admin/client/user_client.rb', line 108
def groups(user_id)
response = execute_http do
resource(groups_url(user_id)).get()
end
JSON.parse(response).map { |group_as_hash| GroupRepresentation.from_hash(group_as_hash) }
end
|
#groups_url(user_id) ⇒ Object
244
245
246
247
|
# File 'lib/keycloak-admin/client/user_client.rb', line 244
def groups_url(user_id)
raise ArgumentError.new("user_id must be defined") if user_id.nil?
"#{users_url(user_id)}/groups"
end
|
#impersonate(user_id) ⇒ Object
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
# File 'lib/keycloak-admin/client/user_client.rb', line 152
def impersonate(user_id)
impersonation = get_redirect_impersonation(user_id)
response = execute_http do
Resource.execute(
@configuration.faraday_options.merge(
method: :post,
url: impersonation.impersonation_url,
payload: impersonation.body.to_json,
headers: impersonation.,
logger: @configuration.logger
)
)
end
ImpersonationRepresentation.from_response(response, @configuration.server_domain)
end
|
#impersonation_url(user_id) ⇒ Object
254
255
256
257
|
# File 'lib/keycloak-admin/client/user_client.rb', line 254
def impersonation_url(user_id)
raise ArgumentError.new("user_id must be defined") if user_id.nil?
"#{users_url(user_id)}/impersonation"
end
|
#link_idp(user_id, idp_id, idp_user_id, idp_username) ⇒ Object
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
# File 'lib/keycloak-admin/client/user_client.rb', line 197
def link_idp(user_id, idp_id, idp_user_id, idp_username)
fed_id_rep = FederatedIdentityRepresentation.new
fed_id_rep.user_id = idp_user_id
fed_id_rep.user_name = idp_username
fed_id_rep.identity_provider = idp_id
execute_http do
Resource.execute(
@configuration.faraday_options.merge(
method: :post,
url: federated_identity_url(user_id, idp_id),
payload: fed_id_rep.to_json,
headers: ,
logger: @configuration.logger
)
)
end
end
|
#list ⇒ Object
97
98
99
|
# File 'lib/keycloak-admin/client/user_client.rb', line 97
def list
search(nil)
end
|
#logout(user_id) ⇒ Object
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
# File 'lib/keycloak-admin/client/user_client.rb', line 177
def logout(user_id)
raise ArgumentError.new("user_id must be defined") if user_id.nil?
execute_http do
Resource.execute(
@configuration.faraday_options.merge(
method: :post,
url: logout_url(user_id),
headers: ,
logger: @configuration.logger
)
)
end
true
end
|
#logout_url(user_id) ⇒ Object
265
266
267
268
269
|
# File 'lib/keycloak-admin/client/user_client.rb', line 265
def logout_url(user_id)
raise ArgumentError.new("user_id must be defined") if user_id.nil?
"#{users_url(user_id)}/logout"
end
|
#remove_group(user_id, group_id) ⇒ Object
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/keycloak-admin/client/user_client.rb', line 49
def remove_group(user_id, group_id)
Resource.execute(
@configuration.faraday_options.merge(
method: :delete,
url: "#{users_url(user_id)}/groups/#{group_id}",
headers: ,
logger: @configuration.logger
)
)
end
|
#reset_password_url(user_id) ⇒ Object
234
235
236
237
|
# File 'lib/keycloak-admin/client/user_client.rb', line 234
def reset_password_url(user_id)
raise ArgumentError.new("user_id must be defined") if user_id.nil?
"#{users_url(user_id)}/reset-password"
end
|
#save(user_representation) ⇒ Object
14
15
16
17
18
19
20
21
|
# File 'lib/keycloak-admin/client/user_client.rb', line 14
def save(user_representation)
execute_http do
resource(users_url).post(
create_payload(user_representation),
)
end
user_representation
end
|
#search(query) ⇒ Object
Query can be a string or a hash.
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/keycloak-admin/client/user_client.rb', line 81
def search(query)
= case query
when String
.merge({params: { search: query }})
when Hash
.merge({params: query })
else
end
response = execute_http do
resource(users_url).get()
end
JSON.parse(response).map { |user_as_hash| UserRepresentation.from_hash(user_as_hash) }
end
|
#sessions(user_id) ⇒ Object
168
169
170
171
172
173
174
175
|
# File 'lib/keycloak-admin/client/user_client.rb', line 168
def sessions(user_id)
raise ArgumentError.new("user_id must be defined") if user_id.nil?
response = execute_http do
resource("#{users_url(user_id)}/sessions").get()
end
JSON.parse(response).map { |session_as_hash| SessionRepresentation.from_hash(session_as_hash) }
end
|
#unlink_idp(user_id, idp_id) ⇒ Object
216
217
218
219
220
|
# File 'lib/keycloak-admin/client/user_client.rb', line 216
def unlink_idp(user_id, idp_id)
execute_http do
resource(federated_identity_url(user_id, idp_id)).delete()
end
end
|
#update(user_id, user_representation_body) ⇒ Object
pay attention that, since Keycloak 24.0.4, partial updates of attributes are not authorized anymore
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/keycloak-admin/client/user_client.rb', line 24
def update(user_id, user_representation_body)
raise ArgumentError.new("user_id must be defined") if user_id.nil?
Resource.execute(
@configuration.faraday_options.merge(
method: :put,
url: users_url(user_id),
payload: create_payload(user_representation_body),
headers: ,
logger: @configuration.logger
)
)
end
|
#update_password(user_id, new_password) ⇒ Object
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/keycloak-admin/client/user_client.rb', line 115
def update_password(user_id, new_password)
execute_http do
Resource.execute(
@configuration.faraday_options.merge(
method: :put,
url: reset_password_url(user_id),
payload: { type: "password", value: new_password, temporary: false }.to_json,
headers: ,
logger: @configuration.logger
)
)
end
user_id
end
|
#user_client_role_mappings_url(user_id, client_id) ⇒ Object
230
231
232
|
# File 'lib/keycloak-admin/client/user_client.rb', line 230
def user_client_role_mappings_url(user_id, client_id)
"#{users_url(user_id)}/role-mappings/clients/#{client_id}"
end
|
#users_url(id = nil) ⇒ Object
222
223
224
225
226
227
228
|
# File 'lib/keycloak-admin/client/user_client.rb', line 222
def users_url(id=nil)
if id
"#{@realm_client.realm_admin_url}/users/#{id}"
else
"#{@realm_client.realm_admin_url}/users"
end
end
|