keycloak-admin 1.0.19 → 1.0.20

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67ccb78dc55dca61ad8dd44cb0f131dbe1b7a6b6c6449dd68c51fc981ef5439c
4
- data.tar.gz: 7d3d483d4c1d26b430abc1accb326a7a371cc18c39fdde00845c2ed53dc79593
3
+ metadata.gz: 1e12b29d601e1a543c15d2d23820a1834088d4ab03fdde20ab81905ee0236309
4
+ data.tar.gz: 1d42e0333e35bf0c6faca2a1439533f2a35d5e85a0494b2fa0901d98b37ae99e
5
5
  SHA512:
6
- metadata.gz: 5ef5313937cb5b1442aaf182f10d020a893c86b6d5ce88950f9caa9bde8c115345c48b47b1a2598b49d85e76dbad1d7eea967a8dbc3655d07cfbf152d83471a9
7
- data.tar.gz: a0373bba411c1e642220b61b25dc790727aad1738a60ca8e0141539eb7f8468eaae73d963255d7fd845072c9feca9530336da658c2a12e041c07218a61d1cf3a
6
+ metadata.gz: 74e45f56d4ec1adca533d8c41fc9ae519a359a63c3632560c17fb927425b5e0f1e22519b6d8c99894b034acdd8c3b7a1229430a95a00e42fa024376b72bd8298
7
+ data.tar.gz: 662228969795e4fa165be24480714e662ac4e178c5ad1e3eaae14be90ffd245796db80bd0bedb02761e8d228a7b023dd426b52884029de449ebf2f8a02e7a8d9
data/CHANGELOG.md CHANGED
@@ -5,10 +5,16 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.0.20] - 2022-12-26
9
+
10
+ * Create subgroups (thanks to @neckhair)
11
+ * Add subgroups to `GroupRepresentation` (thanks to @neckhair)
12
+ * Expose `BaseRoleContainingResource.resource_id` (thanks to @neckhair)
13
+
8
14
  ## [1.0.19] - 2022-12-03
9
15
 
10
- * Remove specific realm roles from user (thanks to @Kazhuu)
11
- * Get role by name (thanks to @Kazhuu)
16
+ * Remove specific realm roles from user (thanks to @tlloydthwaites)
17
+ * Get role by name (thanks to @tlloydthwaites)
12
18
 
13
19
  ## [1.0.18] - 2022-11-24
14
20
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- keycloak-admin (1.0.19)
4
+ keycloak-admin (1.0.20)
5
5
  http-cookie (~> 1.0, >= 1.0.3)
6
6
  rest-client (~> 2.1)
7
7
 
@@ -30,10 +30,10 @@ GEM
30
30
  rspec-mocks (~> 3.12.0)
31
31
  rspec-core (3.12.0)
32
32
  rspec-support (~> 3.12.0)
33
- rspec-expectations (3.12.0)
33
+ rspec-expectations (3.12.1)
34
34
  diff-lcs (>= 1.2.0, < 2.0)
35
35
  rspec-support (~> 3.12.0)
36
- rspec-mocks (3.12.0)
36
+ rspec-mocks (3.12.1)
37
37
  diff-lcs (>= 1.2.0, < 2.0)
38
38
  rspec-support (~> 3.12.0)
39
39
  rspec-support (3.12.0)
data/README.md CHANGED
@@ -12,7 +12,7 @@ This gem *does not* require Rails.
12
12
  For example, using `bundle`, add this line to your Gemfile.
13
13
 
14
14
  ```ruby
15
- gem "keycloak-admin", "1.0.19"
15
+ gem "keycloak-admin", "1.0.20"
16
16
  ```
17
17
 
18
18
  ## Login
@@ -310,6 +310,16 @@ group_path = "/top"
310
310
  group_id = KeycloakAdmin.realm("a_realm").groups.create!(group_name, group_path)
311
311
  ```
312
312
 
313
+ ### Create a new subgroup of an existing group
314
+
315
+ Create a new group as the child of an existing group.
316
+
317
+ ```ruby
318
+ parent_id = "7686af34-204c-4515-8122-78d19febbf6e"
319
+ group_name = "test"
320
+ sub_group_id = KeycloakAdmin.realm("a_realm").groups.create_subgroup!(parent_id, group_name)
321
+ ```
322
+
313
323
  ### Get list of roles in a realm
314
324
 
315
325
  Returns an array of `KeycloakAdmin::RoleRepresentation`.
@@ -26,6 +26,16 @@ module KeycloakAdmin
26
26
  end
27
27
  end
28
28
 
29
+ def create_subgroup!(parent_id, name)
30
+ url = "#{groups_url(parent_id)}/children"
31
+ response = execute_http do
32
+ RestClient::Resource.new(url, @configuration.rest_client_options).post(
33
+ create_payload(build(name, nil)), headers
34
+ )
35
+ end
36
+ created_id(response)
37
+ end
38
+
29
39
  def groups_url(id=nil)
30
40
  if id
31
41
  "#{@realm_client.realm_admin_url}/groups/#{id}"
@@ -2,13 +2,15 @@ module KeycloakAdmin
2
2
  class GroupRepresentation < Representation
3
3
  attr_accessor :id,
4
4
  :name,
5
- :path
5
+ :path,
6
+ :sub_groups
6
7
 
7
8
  def self.from_hash(hash)
8
- group = new
9
- group.id = hash["id"]
10
- group.name = hash["name"]
11
- group.path = hash["path"]
9
+ group = new
10
+ group.id = hash["id"]
11
+ group.name = hash["name"]
12
+ group.path = hash["path"]
13
+ group.sub_groups = hash.fetch("subGroups", []).map { |sub_group_hash| self.from_hash(sub_group_hash) }
12
14
  group
13
15
  end
14
16
  end
@@ -1,5 +1,7 @@
1
1
  module KeycloakAdmin
2
2
  class BaseRoleContainingResource
3
+ attr_reader :resource_id
4
+
3
5
  def initialize(configuration, realm_client, resource_id)
4
6
  @configuration = configuration
5
7
  raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
@@ -1,3 +1,3 @@
1
1
  module KeycloakAdmin
2
- VERSION = "1.0.19"
2
+ VERSION = "1.0.20"
3
3
  end
@@ -111,15 +111,26 @@ RSpec.describe KeycloakAdmin::GroupClient do
111
111
  'Create method returned status OK (Code: 200); expected status: Created (201)'
112
112
  )
113
113
  end
114
+ end
114
115
 
115
- def stub_net_http_res(res_class, code, message)
116
- net_http_res = double
117
- allow(net_http_res).to receive(:message).and_return message
118
- allow(net_http_res).to receive(:code).and_return code
119
- allow(net_http_res).to receive(:is_a?) do |target_class|
120
- target_class == res_class
121
- end
122
- allow(@response).to receive(:net_http_res).and_return net_http_res
116
+ describe "#create_subgroup!" do
117
+ let(:realm_name) { "valid-realm" }
118
+
119
+ before(:each) do
120
+ @group_client = KeycloakAdmin.realm(realm_name).groups
121
+
122
+ stub_token_client
123
+ @response = double headers: {
124
+ location: 'http://auth.service.io/auth/admin/realms/valid-realm/groups/7686af34-204c-4515-8122-78d19febbf6e'
125
+ }
126
+ allow_any_instance_of(RestClient::Resource).to receive(:post).and_return @response
127
+ end
128
+
129
+ it "creates a subgroup" do
130
+ stub_net_http_res(Net::HTTPCreated, 201, 'Created')
131
+
132
+ group_id = @group_client.create_subgroup!('be061c48-6edd-4783-a726-1a57d4bfa22b', 'subgroup-name')
133
+ expect(group_id).to eq '7686af34-204c-4515-8122-78d19febbf6e'
123
134
  end
124
135
  end
125
136
  end
@@ -0,0 +1,15 @@
1
+
2
+ RSpec.describe KeycloakAdmin::GroupRepresentation do
3
+ describe ".from_hash" do
4
+ it "parses the sub groups into group representations" do
5
+ group = described_class.from_hash({
6
+ "name" => "group a",
7
+ "subGroups" => [{
8
+ "name" => "subgroup b"
9
+ }]
10
+ })
11
+ expect(group.sub_groups.length).to eq 1
12
+ expect(group.sub_groups.first).to be_a described_class
13
+ end
14
+ end
15
+ end
data/spec/spec_helper.rb CHANGED
@@ -10,7 +10,7 @@ def configure
10
10
  config.client_secret = "aaaaaaaa"
11
11
  config.client_realm_name = "master2"
12
12
  config.use_service_account = true
13
- end
13
+ end
14
14
  end
15
15
 
16
16
  RSpec.configure do |config|
@@ -27,3 +27,11 @@ def stub_token_client
27
27
  'refresh_expires_in', 'id_token', 'not_before_policy', 'session_state'
28
28
  )
29
29
  end
30
+
31
+ def stub_net_http_res(res_class, code, message)
32
+ net_http_res = double(message: message, code: code)
33
+ allow(net_http_res).to receive(:is_a?) do |target_class|
34
+ target_class == res_class
35
+ end
36
+ allow(@response).to receive(:net_http_res).and_return(net_http_res)
37
+ 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: 1.0.19
4
+ version: 1.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorent Lempereur
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-03 00:00:00.000000000 Z
11
+ date: 2022-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http-cookie
@@ -134,6 +134,7 @@ files:
134
134
  - spec/client/user_client_spec.rb
135
135
  - spec/configuration_spec.rb
136
136
  - spec/representation/client_representation_spec.rb
137
+ - spec/representation/group_representation_spec.rb
137
138
  - spec/representation/identity_provider_mapper_representation_spec.rb
138
139
  - spec/representation/identity_provider_representation_spec.rb
139
140
  - spec/representation/impersonation_representation_spec.rb
@@ -147,7 +148,7 @@ homepage: https://github.com/looorent/keycloak-admin-ruby
147
148
  licenses:
148
149
  - MIT
149
150
  metadata: {}
150
- post_install_message:
151
+ post_install_message:
151
152
  rdoc_options: []
152
153
  require_paths:
153
154
  - lib
@@ -162,8 +163,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
163
  - !ruby/object:Gem::Version
163
164
  version: '0'
164
165
  requirements: []
165
- rubygems_version: 3.2.3
166
- signing_key:
166
+ rubygems_version: 3.0.3.1
167
+ signing_key:
167
168
  specification_version: 4
168
169
  summary: Keycloak Admin REST API client written in Ruby
169
170
  test_files: []