Class: KeycloakAdmin::UserClient

Inherits:
Client
  • Object
show all
Defined in:
lib/keycloak-admin/client/user_client.rb

Instance Method Summary collapse

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.

Raises:

  • (ArgumentError)


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



55
56
57
58
59
60
61
# File 'lib/keycloak-admin/client/user_client.rb', line 55

def add_client_roles_on_user(user_id, client_id, role_representations)
  execute_http do
    RestClient::Resource.new(user_client_role_mappings_url(user_id, client_id), @configuration.rest_client_options).post(
      create_payload(role_representations), headers
    )
  end
end

#add_group(user_id, group_id) ⇒ Object



34
35
36
37
38
39
40
41
42
43
# File 'lib/keycloak-admin/client/user_client.rb', line 34

def add_group(user_id, group_id)
  RestClient::Request.execute(
    @configuration.rest_client_options.merge(
      method: :put,
      url: "#{users_url(user_id)}/groups/#{group_id}",
      payload: {},
      headers: headers
    )
  )
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

#delete(user_id) ⇒ Object



96
97
98
99
100
101
# File 'lib/keycloak-admin/client/user_client.rb', line 96

def delete(user_id)
  execute_http do
    RestClient::Resource.new(users_url(user_id), @configuration.rest_client_options).delete(headers)
  end
  true
end

#execute_actions_email(user_id, actions = [], lifespan = nil) ⇒ Object



128
129
130
131
132
133
134
# File 'lib/keycloak-admin/client/user_client.rb', line 128

def execute_actions_email(user_id, actions=[], lifespan=nil)
  execute_http do
    lifespan_param = lifespan.nil? ? "" : "lifespan=#{lifespan.seconds}"
    RestClient.put("#{execute_actions_email_url(user_id)}?#{lifespan_param}", create_payload(actions), headers)
  end
  user_id
end

#execute_actions_email_url(user_id) ⇒ Object

Raises:

  • (ArgumentError)


196
197
198
199
# File 'lib/keycloak-admin/client/user_client.rb', line 196

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

Raises:

  • (ArgumentError)


211
212
213
214
215
# File 'lib/keycloak-admin/client/user_client.rb', line 211

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



124
125
126
# File 'lib/keycloak-admin/client/user_client.rb', line 124

def forgot_password(user_id, lifespan=nil)
  execute_actions_email(user_id, ["UPDATE_PASSWORD"], lifespan)
end

#get(user_id) ⇒ Object



63
64
65
66
67
68
# File 'lib/keycloak-admin/client/user_client.rb', line 63

def get(user_id)
  response = execute_http do
    RestClient::Resource.new(users_url(user_id), @configuration.rest_client_options).get(headers)
  end
  UserRepresentation.from_hash(JSON.parse(response))
end

#get_redirect_impersonation(user_id) ⇒ Object



151
152
153
# File 'lib/keycloak-admin/client/user_client.rb', line 151

def get_redirect_impersonation(user_id)
  ImpersonationRedirectionRepresentation.from_url(impersonation_url(user_id), headers)
end

#groups(user_id) ⇒ Object



103
104
105
106
107
108
# File 'lib/keycloak-admin/client/user_client.rb', line 103

def groups(user_id)
  response = execute_http do
    RestClient::Resource.new(groups_url(user_id), @configuration.rest_client_options).get(headers)
  end
  JSON.parse(response).map { |group_as_hash| GroupRepresentation.from_hash(group_as_hash) }
end

#groups_url(user_id) ⇒ Object

Raises:

  • (ArgumentError)


201
202
203
204
# File 'lib/keycloak-admin/client/user_client.rb', line 201

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



136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/keycloak-admin/client/user_client.rb', line 136

def impersonate(user_id)
  impersonation = get_redirect_impersonation(user_id)
  response = execute_http do
    RestClient::Request.execute(
      @configuration.rest_client_options.merge(
        method: :post,
        url: impersonation.impersonation_url,
        payload: impersonation.body.to_json,
        headers: impersonation.headers
      )
    )
  end
  ImpersonationRepresentation.from_response(response, @configuration.server_domain)
end

#impersonation_url(user_id) ⇒ Object

Raises:

  • (ArgumentError)


206
207
208
209
# File 'lib/keycloak-admin/client/user_client.rb', line 206

def impersonation_url(user_id)
  raise ArgumentError.new("user_id must be defined") if user_id.nil?
  "#{users_url(user_id)}/impersonation"
end


155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/keycloak-admin/client/user_client.rb', line 155

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
    RestClient::Request.execute(
      @configuration.rest_client_options.merge(
        method: :post,
        url: federated_identity_url(user_id, idp_id),
        payload: fed_id_rep.to_json,
        headers: headers
      )
    )
  end
end

#listObject



92
93
94
# File 'lib/keycloak-admin/client/user_client.rb', line 92

def list
  search(nil)
end

#remove_group(user_id, group_id) ⇒ Object



45
46
47
48
49
50
51
52
53
# File 'lib/keycloak-admin/client/user_client.rb', line 45

def remove_group(user_id, group_id)
  RestClient::Request.execute(
    @configuration.rest_client_options.merge(
      method: :delete,
      url: "#{users_url(user_id)}/groups/#{group_id}",
      headers: headers
    )
  )
end

#reset_password_url(user_id) ⇒ Object

Raises:

  • (ArgumentError)


191
192
193
194
# File 'lib/keycloak-admin/client/user_client.rb', line 191

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
    RestClient::Resource.new(users_url, @configuration.rest_client_options).post(
      create_payload(user_representation), headers
    )
  end
  user_representation
end

#search(query) ⇒ Object

Query can be a string or a hash.



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/keycloak-admin/client/user_client.rb', line 76

def search(query)
  derived_headers = case query
                    when String
                      headers.merge({params: { search: query }})
                    when Hash
                      headers.merge({params: query })
                    else
                      headers
                    end

  response = execute_http do
    RestClient::Resource.new(users_url, @configuration.rest_client_options).get(derived_headers)
  end
  JSON.parse(response).map { |user_as_hash| UserRepresentation.from_hash(user_as_hash) }
end


173
174
175
176
177
# File 'lib/keycloak-admin/client/user_client.rb', line 173

def unlink_idp(user_id, idp_id)
  execute_http do
    RestClient::Resource.new(federated_identity_url(user_id, idp_id), @configuration.rest_client_options).delete(headers)
  end
end

#update(user_id, user_representation_body) ⇒ Object



23
24
25
26
27
28
29
30
31
32
# File 'lib/keycloak-admin/client/user_client.rb', line 23

def update(user_id, user_representation_body)
  RestClient::Request.execute(
    @configuration.rest_client_options.merge(
      method: :put,
      url: users_url(user_id),
      payload: create_payload(user_representation_body),
      headers: headers
    )
  )
end

#update_password(user_id, new_password) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/keycloak-admin/client/user_client.rb', line 110

def update_password(user_id, new_password)
  execute_http do
    RestClient::Request.execute(
      @configuration.rest_client_options.merge(
        method: :put,
        url: reset_password_url(user_id),
        payload: { type: 'password', value: new_password, temporary: false }.to_json,
        headers: headers
      )
    )
  end
  user_id
end

#user_client_role_mappings_url(user_id, client_id) ⇒ Object



187
188
189
# File 'lib/keycloak-admin/client/user_client.rb', line 187

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



179
180
181
182
183
184
185
# File 'lib/keycloak-admin/client/user_client.rb', line 179

def users_url(id=nil)
  if id
    "#{@realm_client.realm_admin_url}/users/#{id}"
  else
    "#{@realm_client.realm_admin_url}/users"
  end
end