keycloak-admin 0.6.5 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -1
  3. data/CHANGELOG.md +65 -0
  4. data/Dockerfile +1 -1
  5. data/Gemfile.lock +13 -4
  6. data/README.md +160 -9
  7. data/keycloak-admin.gemspec +3 -0
  8. data/lib/keycloak-admin.rb +13 -0
  9. data/lib/keycloak-admin/client/client.rb +13 -3
  10. data/lib/keycloak-admin/client/client_client.rb +24 -0
  11. data/lib/keycloak-admin/client/client_role_mappings_client.rb +32 -0
  12. data/lib/keycloak-admin/client/group_client.rb +46 -0
  13. data/lib/keycloak-admin/client/realm_client.rb +54 -0
  14. data/lib/keycloak-admin/client/role_client.rb +32 -0
  15. data/lib/keycloak-admin/client/role_mapper_client.rb +20 -0
  16. data/lib/keycloak-admin/client/token_client.rb +6 -1
  17. data/lib/keycloak-admin/client/user_client.rb +23 -6
  18. data/lib/keycloak-admin/configuration.rb +1 -1
  19. data/lib/keycloak-admin/representation/camel_json.rb +1 -1
  20. data/lib/keycloak-admin/representation/client_representation.rb +16 -0
  21. data/lib/keycloak-admin/representation/group_representation.rb +15 -0
  22. data/lib/keycloak-admin/representation/realm_representation.rb +14 -0
  23. data/lib/keycloak-admin/representation/representation.rb +6 -1
  24. data/lib/keycloak-admin/representation/role_representation.rb +17 -0
  25. data/lib/keycloak-admin/representation/user_representation.rb +13 -13
  26. data/lib/keycloak-admin/resource/base_role_containing_resource.rb +26 -0
  27. data/lib/keycloak-admin/resource/group_resource.rb +7 -0
  28. data/lib/keycloak-admin/resource/user_resource.rb +7 -0
  29. data/lib/keycloak-admin/version.rb +1 -1
  30. data/spec/client/client_client_spec.rb +53 -0
  31. data/spec/client/client_role_mappings_client_spec.rb +82 -0
  32. data/spec/client/client_spec.rb +28 -0
  33. data/spec/client/group_client_spec.rb +125 -0
  34. data/spec/client/realm_client_spec.rb +108 -0
  35. data/spec/client/role_client_spec.rb +83 -0
  36. data/spec/client/role_mapper_client_spec.rb +47 -0
  37. data/spec/client/token_client_spec.rb +32 -1
  38. data/spec/client/user_client_spec.rb +147 -0
  39. data/spec/configuration_spec.rb +2 -0
  40. data/spec/representation/user_representation_spec.rb +15 -0
  41. data/spec/resource/group_resource_spec.rb +14 -0
  42. data/spec/resource/user_resource_spec.rb +14 -0
  43. data/spec/spec_helper.rb +7 -0
  44. metadata +40 -5
@@ -0,0 +1,83 @@
1
+ RSpec.describe KeycloakAdmin::RoleClient do
2
+ describe "#roles_url" do
3
+ let(:realm_name) { "valid-realm" }
4
+ let(:role_id) { nil }
5
+
6
+ before(:each) do
7
+ @built_url = KeycloakAdmin.realm(realm_name).roles.roles_url(role_id)
8
+ end
9
+
10
+ context "when role_id is not defined" do
11
+ let(:role_id) { nil }
12
+ it "return a proper url without role id" do
13
+ expect(@built_url).to eq "http://auth.service.io/auth/admin/realms/valid-realm/roles"
14
+ end
15
+ end
16
+
17
+ context "when role_id is defined" do
18
+ let(:role_id) { "95985b21-d884-4bbd-b852-cb8cd365afc2" }
19
+ it "return a proper url with the role id" do
20
+ expect(@built_url).to eq "http://auth.service.io/auth/admin/realms/valid-realm/roles/95985b21-d884-4bbd-b852-cb8cd365afc2"
21
+ end
22
+ end
23
+ end
24
+
25
+ describe "#list" do
26
+ let(:realm_name) { "valid-realm" }
27
+
28
+ before(:each) do
29
+ @role_client = KeycloakAdmin.realm(realm_name).roles
30
+
31
+ stub_token_client
32
+ allow_any_instance_of(RestClient::Resource).to receive(:get).and_return '[{"id":"test_role_id","name":"test_role_name"}]'
33
+ end
34
+
35
+ it "lists roles" do
36
+ roles = @role_client.list
37
+ expect(roles.length).to eq 1
38
+ expect(roles[0].name).to eq "test_role_name"
39
+ end
40
+
41
+ it "passes rest client options" do
42
+ rest_client_options = {verify_ssl: OpenSSL::SSL::VERIFY_NONE}
43
+ allow_any_instance_of(KeycloakAdmin::Configuration).to receive(:rest_client_options).and_return rest_client_options
44
+
45
+ expect(RestClient::Resource).to receive(:new).with(
46
+ "http://auth.service.io/auth/admin/realms/valid-realm/roles", rest_client_options).and_call_original
47
+
48
+ roles = @role_client.list
49
+ expect(roles.length).to eq 1
50
+ expect(roles[0].name).to eq "test_role_name"
51
+ end
52
+ end
53
+
54
+ describe "#save" do
55
+ let(:realm_name) { "valid-realm" }
56
+ let(:role) { KeycloakAdmin::RoleRepresentation.from_hash(
57
+ "name" => "test_role_name",
58
+ "composite" => false,
59
+ "clientRole" => false
60
+ )}
61
+
62
+ before(:each) do
63
+ @role_client = KeycloakAdmin.realm(realm_name).roles
64
+
65
+ stub_token_client
66
+ expect_any_instance_of(RestClient::Resource).to receive(:post).with(role.to_json, anything)
67
+ end
68
+
69
+ it "saves a role" do
70
+ @role_client.save(role)
71
+ end
72
+
73
+ it "passes rest client options" do
74
+ rest_client_options = {verify_ssl: OpenSSL::SSL::VERIFY_NONE}
75
+ allow_any_instance_of(KeycloakAdmin::Configuration).to receive(:rest_client_options).and_return rest_client_options
76
+
77
+ expect(RestClient::Resource).to receive(:new).with(
78
+ "http://auth.service.io/auth/admin/realms/valid-realm/roles", rest_client_options).and_call_original
79
+
80
+ @role_client.save(role)
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,47 @@
1
+ RSpec.describe KeycloakAdmin::RoleMapperClient do
2
+ describe "#available_url" do
3
+ let(:realm_name) { "valid-realm" }
4
+ let(:user_id) { "test_user" }
5
+
6
+ before(:each) do
7
+ @built_url = KeycloakAdmin.realm(realm_name).user(user_id).role_mapper.realm_level_url
8
+ end
9
+
10
+ it "return a proper url" do
11
+ expect(@built_url).to eq "http://auth.service.io/auth/admin/realms/valid-realm/users/test_user/role-mappings/realm"
12
+ end
13
+ end
14
+
15
+ describe "#save_realm_level" do
16
+ let(:realm_name) { "valid-realm" }
17
+ let(:user_id) { "test_user" }
18
+ let(:role_list) { [
19
+ KeycloakAdmin::RoleRepresentation.from_hash(
20
+ "name" => "test_role_name",
21
+ "composite" => false,
22
+ "clientRole" => false
23
+ )
24
+ ] }
25
+
26
+ before(:each) do
27
+ @role_mapper_client = KeycloakAdmin.realm(realm_name).user(user_id).role_mapper
28
+
29
+ stub_token_client
30
+ expect_any_instance_of(RestClient::Resource).to receive(:post).with(role_list.to_json, anything)
31
+ end
32
+
33
+ it "saves realm-elevel role mappings" do
34
+ @role_mapper_client.save_realm_level(role_list)
35
+ end
36
+
37
+ it "passes rest client options" do
38
+ rest_client_options = {verify_ssl: OpenSSL::SSL::VERIFY_NONE}
39
+ allow_any_instance_of(KeycloakAdmin::Configuration).to receive(:rest_client_options).and_return rest_client_options
40
+
41
+ expect(RestClient::Resource).to receive(:new).with(
42
+ "http://auth.service.io/auth/admin/realms/valid-realm/users/test_user/role-mappings/realm", rest_client_options).and_call_original
43
+
44
+ @role_mapper_client.save_realm_level(role_list)
45
+ end
46
+ end
47
+ end
@@ -30,8 +30,39 @@ RSpec.describe KeycloakAdmin::TokenClient do
30
30
  @built_url = KeycloakAdmin.realm(realm_name).token.token_url
31
31
  end
32
32
 
33
- it "return a proper url" do
33
+ it "returns a proper url" do
34
34
  expect(@built_url).to eq "http://auth.service.io/auth/realms/valid-realm/protocol/openid-connect/token"
35
35
  end
36
36
  end
37
+
38
+ describe "#get" do
39
+ let(:realm_name) { "valid-realm" }
40
+ before(:each) do
41
+ @token_client = KeycloakAdmin.realm(realm_name).token
42
+ end
43
+
44
+ it "parses the response" do
45
+ stub_post
46
+
47
+ token = @token_client.get
48
+ expect(token.access_token).to eq 'test_access_token'
49
+ end
50
+
51
+ it "passes rest client options" do
52
+ rest_client_options = {verify_ssl: OpenSSL::SSL::VERIFY_NONE}
53
+ allow_any_instance_of(KeycloakAdmin::Configuration).to receive(:rest_client_options).and_return rest_client_options
54
+ stub_post
55
+
56
+ expect(RestClient::Resource).to receive(:new).with(
57
+ "http://auth.service.io/auth/realms/valid-realm/protocol/openid-connect/token", rest_client_options).and_call_original
58
+
59
+ @token_client.get
60
+ end
61
+
62
+ def stub_post
63
+ response = double
64
+ allow(response).to receive(:body).and_return '{"access_token":"test_access_token"}'
65
+ allow_any_instance_of(RestClient::Resource).to receive(:post).and_return response
66
+ end
67
+ end
37
68
  end
@@ -96,4 +96,151 @@ RSpec.describe KeycloakAdmin::TokenClient do
96
96
  end
97
97
  end
98
98
  end
99
+
100
+ describe "#save" do
101
+ let(:realm_name) { "valid-realm" }
102
+ let(:user) { KeycloakAdmin::UserRepresentation.from_hash(
103
+ "username" => "test_username",
104
+ "createdTimestamp" => Time.now.to_i,
105
+ )}
106
+
107
+ before(:each) do
108
+ @user_client = KeycloakAdmin.realm(realm_name).users
109
+
110
+ stub_token_client
111
+ allow_any_instance_of(RestClient::Resource).to receive(:post)
112
+ end
113
+
114
+ it "saves a user" do
115
+ expect(@user_client.save(user)).to eq user
116
+ end
117
+
118
+ it "passes rest client options" do
119
+ rest_client_options = {verify_ssl: OpenSSL::SSL::VERIFY_NONE}
120
+ allow_any_instance_of(KeycloakAdmin::Configuration).to receive(:rest_client_options).and_return rest_client_options
121
+
122
+ expect(RestClient::Resource).to receive(:new).with(
123
+ "http://auth.service.io/auth/admin/realms/valid-realm/users", rest_client_options).and_call_original
124
+
125
+ expect(@user_client.save(user)).to eq user
126
+ end
127
+ end
128
+
129
+ describe "#get" do
130
+ let(:realm_name) { "valid-realm" }
131
+
132
+ before(:each) do
133
+ @user_client = KeycloakAdmin.realm(realm_name).users
134
+
135
+ stub_token_client
136
+ allow_any_instance_of(RestClient::Resource).to receive(:get).and_return '{"username":"test_username","createdTimestamp":1559347200}'
137
+ end
138
+
139
+ it "parses the response" do
140
+ user = @user_client.get('test_user_id')
141
+ expect(user.username).to eq 'test_username'
142
+ end
143
+
144
+ it "passes rest client options" do
145
+ rest_client_options = {verify_ssl: OpenSSL::SSL::VERIFY_NONE}
146
+ allow_any_instance_of(KeycloakAdmin::Configuration).to receive(:rest_client_options).and_return rest_client_options
147
+
148
+ expect(RestClient::Resource).to receive(:new).with(
149
+ "http://auth.service.io/auth/admin/realms/valid-realm/users/test_user_id", rest_client_options).and_call_original
150
+
151
+ user = @user_client.get('test_user_id')
152
+ expect(user.username).to eq 'test_username'
153
+ end
154
+ end
155
+
156
+ describe "#search" do
157
+ let(:realm_name) { "valid-realm" }
158
+ let(:user) { KeycloakAdmin::UserRepresentation.from_hash(
159
+ "username" => "test_username",
160
+ "createdTimestamp" => Time.now.to_i,
161
+ )}
162
+
163
+ before(:each) do
164
+ @user_client = KeycloakAdmin.realm(realm_name).users
165
+
166
+ stub_token_client
167
+ allow_any_instance_of(RestClient::Resource).to receive(:get).and_return '[{"username":"test_username","createdTimestamp":1559347200}]'
168
+ end
169
+
170
+ it "finds a user" do
171
+ users = @user_client.search("test_username")
172
+ expect(users.length).to eq 1
173
+ expect(users[0].username).to eq "test_username"
174
+ end
175
+
176
+ it "passes rest client options" do
177
+ rest_client_options = {verify_ssl: OpenSSL::SSL::VERIFY_NONE}
178
+ allow_any_instance_of(KeycloakAdmin::Configuration).to receive(:rest_client_options).and_return rest_client_options
179
+
180
+ expect(RestClient::Resource).to receive(:new).with(
181
+ "http://auth.service.io/auth/admin/realms/valid-realm/users", rest_client_options).and_call_original
182
+
183
+ users = @user_client.search("test_username")
184
+ expect(users.length).to eq 1
185
+ expect(users[0].username).to eq "test_username"
186
+ end
187
+ end
188
+
189
+ describe "#list" do
190
+ let(:realm_name) { "valid-realm" }
191
+ let(:user) { KeycloakAdmin::UserRepresentation.from_hash(
192
+ "username" => "test_username",
193
+ "createdTimestamp" => Time.now.to_i,
194
+ )}
195
+
196
+ before(:each) do
197
+ @user_client = KeycloakAdmin.realm(realm_name).users
198
+
199
+ stub_token_client
200
+ allow_any_instance_of(RestClient::Resource).to receive(:get).and_return '[{"username":"test_username","createdTimestamp":1559347200}]'
201
+ end
202
+
203
+ it "lists users" do
204
+ users = @user_client.list
205
+ expect(users.length).to eq 1
206
+ expect(users[0].username).to eq "test_username"
207
+ end
208
+
209
+ it "passes rest client options" do
210
+ rest_client_options = {verify_ssl: OpenSSL::SSL::VERIFY_NONE}
211
+ allow_any_instance_of(KeycloakAdmin::Configuration).to receive(:rest_client_options).and_return rest_client_options
212
+
213
+ expect(RestClient::Resource).to receive(:new).with(
214
+ "http://auth.service.io/auth/admin/realms/valid-realm/users", rest_client_options).and_call_original
215
+
216
+ users = @user_client.list
217
+ expect(users.length).to eq 1
218
+ expect(users[0].username).to eq "test_username"
219
+ end
220
+ end
221
+
222
+ describe "#delete" do
223
+ let(:realm_name) { "valid-realm" }
224
+
225
+ before(:each) do
226
+ @user_client = KeycloakAdmin.realm(realm_name).users
227
+
228
+ stub_token_client
229
+ allow_any_instance_of(RestClient::Resource).to receive(:delete)
230
+ end
231
+
232
+ it "does not fail" do
233
+ expect(@user_client.delete('test_user_id')).to be_truthy
234
+ end
235
+
236
+ it "passes rest client options" do
237
+ rest_client_options = {verify_ssl: OpenSSL::SSL::VERIFY_NONE}
238
+ allow_any_instance_of(KeycloakAdmin::Configuration).to receive(:rest_client_options).and_return rest_client_options
239
+
240
+ expect(RestClient::Resource).to receive(:new).with(
241
+ "http://auth.service.io/auth/admin/realms/valid-realm/users/test_user_id", rest_client_options).and_call_original
242
+
243
+ @user_client.delete('test_user_id')
244
+ end
245
+ end
99
246
  end
@@ -6,6 +6,7 @@ RSpec.describe KeycloakAdmin::RealmClient do
6
6
  let(:use_service_account) { true }
7
7
  let(:username) { "a" }
8
8
  let(:password) { "b" }
9
+ let(:rest_client_options) { {verify_ssl: OpenSSL::SSL::VERIFY_NONE} }
9
10
 
10
11
  before(:each) do
11
12
  @configuration = KeycloakAdmin::Configuration.new
@@ -17,6 +18,7 @@ RSpec.describe KeycloakAdmin::RealmClient do
17
18
  @configuration.use_service_account = use_service_account
18
19
  @configuration.username = username
19
20
  @configuration.password = password
21
+ @configuration.rest_client_options = rest_client_options
20
22
  end
21
23
 
22
24
  describe "#headers_for_token_retrieval" do
@@ -0,0 +1,15 @@
1
+ RSpec.describe KeycloakAdmin::UserRepresentation do
2
+ describe "#to_json" do
3
+ before(:each) do
4
+ @user = KeycloakAdmin::UserRepresentation.from_hash(
5
+ "username" => "test_username",
6
+ "createdTimestamp" => Time.at(1559836000).to_i,
7
+ "enabled" => true
8
+ )
9
+ end
10
+
11
+ it "can convert to json" do
12
+ expect(@user.to_json).to eq '{"id":null,"createdTimestamp":1559836000,"origin":null,"username":"test_username","email":null,"enabled":true,"emailVerified":null,"firstName":null,"lastName":null,"attributes":null,"credentials":[]}'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ RSpec.describe KeycloakAdmin::GroupResource do
2
+ describe "#resource_url" do
3
+ let(:realm_name) { "valid-realm" }
4
+ let(:group_id) { "95985b21-d884-4bbd-b852-cb8cd365afc2" }
5
+
6
+ before(:each) do
7
+ @built_url = KeycloakAdmin.realm(realm_name).group(group_id).resource_url
8
+ end
9
+
10
+ it "return a proper url" do
11
+ expect(@built_url).to eq "http://auth.service.io/auth/admin/realms/valid-realm/groups/95985b21-d884-4bbd-b852-cb8cd365afc2"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ RSpec.describe KeycloakAdmin::UserResource do
2
+ describe "#resource_url" do
3
+ let(:realm_name) { "valid-realm" }
4
+ let(:user_id) { "95985b21-d884-4bbd-b852-cb8cd365afc2" }
5
+
6
+ before(:each) do
7
+ @built_url = KeycloakAdmin.realm(realm_name).user(user_id).resource_url
8
+ end
9
+
10
+ it "return a proper url" do
11
+ expect(@built_url).to eq "http://auth.service.io/auth/admin/realms/valid-realm/users/95985b21-d884-4bbd-b852-cb8cd365afc2"
12
+ end
13
+ end
14
+ end
data/spec/spec_helper.rb CHANGED
@@ -20,3 +20,10 @@ RSpec.configure do |config|
20
20
 
21
21
  configure
22
22
  end
23
+
24
+ def stub_token_client
25
+ allow_any_instance_of(KeycloakAdmin::TokenClient).to receive(:get).and_return KeycloakAdmin::TokenRepresentation.new(
26
+ 'test_access_token', 'token_type', 'expires_in', 'refresh_token',
27
+ 'refresh_expires_in', 'id_token', 'not_before_policy', 'session_state'
28
+ )
29
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keycloak-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorent Lempereur
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-14 00:00:00.000000000 Z
11
+ date: 2019-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http-cookie
@@ -30,6 +30,20 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.0.3
33
+ - !ruby/object:Gem::Dependency
34
+ name: rest-client
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
33
47
  - !ruby/object:Gem::Dependency
34
48
  name: rspec
35
49
  requirement: !ruby/object:Gem::Requirement
@@ -67,6 +81,7 @@ extra_rdoc_files: []
67
81
  files:
68
82
  - ".gitignore"
69
83
  - ".rspec"
84
+ - CHANGELOG.md
70
85
  - Dockerfile
71
86
  - Gemfile
72
87
  - Gemfile.lock
@@ -75,25 +90,46 @@ files:
75
90
  - keycloak-admin.gemspec
76
91
  - lib/keycloak-admin.rb
77
92
  - lib/keycloak-admin/client/client.rb
93
+ - lib/keycloak-admin/client/client_client.rb
94
+ - lib/keycloak-admin/client/client_role_mappings_client.rb
78
95
  - lib/keycloak-admin/client/configurable_token_client.rb
96
+ - lib/keycloak-admin/client/group_client.rb
79
97
  - lib/keycloak-admin/client/realm_client.rb
98
+ - lib/keycloak-admin/client/role_client.rb
99
+ - lib/keycloak-admin/client/role_mapper_client.rb
80
100
  - lib/keycloak-admin/client/token_client.rb
81
101
  - lib/keycloak-admin/client/user_client.rb
82
102
  - lib/keycloak-admin/configuration.rb
83
103
  - lib/keycloak-admin/representation/camel_json.rb
104
+ - lib/keycloak-admin/representation/client_representation.rb
84
105
  - lib/keycloak-admin/representation/credential_representation.rb
106
+ - lib/keycloak-admin/representation/group_representation.rb
85
107
  - lib/keycloak-admin/representation/impersonation_redirection_representation.rb
86
108
  - lib/keycloak-admin/representation/impersonation_representation.rb
109
+ - lib/keycloak-admin/representation/realm_representation.rb
87
110
  - lib/keycloak-admin/representation/representation.rb
111
+ - lib/keycloak-admin/representation/role_representation.rb
88
112
  - lib/keycloak-admin/representation/token_representation.rb
89
113
  - lib/keycloak-admin/representation/user_representation.rb
114
+ - lib/keycloak-admin/resource/base_role_containing_resource.rb
115
+ - lib/keycloak-admin/resource/group_resource.rb
116
+ - lib/keycloak-admin/resource/user_resource.rb
90
117
  - lib/keycloak-admin/version.rb
118
+ - spec/client/client_client_spec.rb
119
+ - spec/client/client_role_mappings_client_spec.rb
120
+ - spec/client/client_spec.rb
91
121
  - spec/client/configurable_token_client_spec.rb
122
+ - spec/client/group_client_spec.rb
92
123
  - spec/client/realm_client_spec.rb
124
+ - spec/client/role_client_spec.rb
125
+ - spec/client/role_mapper_client_spec.rb
93
126
  - spec/client/token_client_spec.rb
94
127
  - spec/client/user_client_spec.rb
95
128
  - spec/configuration_spec.rb
96
129
  - spec/representation/impersonation_representation_spec.rb
130
+ - spec/representation/user_representation_spec.rb
131
+ - spec/resource/group_resource_spec.rb
132
+ - spec/resource/user_resource_spec.rb
97
133
  - spec/spec_helper.rb
98
134
  homepage: https://github.com/looorent/keycloak-admin-ruby
99
135
  licenses:
@@ -107,15 +143,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
107
143
  requirements:
108
144
  - - ">="
109
145
  - !ruby/object:Gem::Version
110
- version: '0'
146
+ version: '2.3'
111
147
  required_rubygems_version: !ruby/object:Gem::Requirement
112
148
  requirements:
113
149
  - - ">="
114
150
  - !ruby/object:Gem::Version
115
151
  version: '0'
116
152
  requirements: []
117
- rubyforge_project:
118
- rubygems_version: 2.6.4
153
+ rubygems_version: 3.0.6
119
154
  signing_key:
120
155
  specification_version: 4
121
156
  summary: Keycloak Admin REST API client written in Ruby