keycloak-admin 1.1.3 → 1.1.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.
- checksums.yaml +4 -4
- data/.github/workflows/Dockerfile +24 -24
- data/.github/workflows/ci.yml +80 -83
- data/.gitignore +9 -9
- data/.rspec +2 -2
- data/CHANGELOG.md +194 -188
- data/Dockerfile +12 -12
- data/Gemfile +3 -3
- data/Gemfile.lock +51 -49
- data/MIT-LICENSE +20 -20
- data/README.md +748 -748
- data/bin/console +9 -9
- data/keycloak-admin.gemspec +24 -24
- data/lib/keycloak-admin/client/attack_detection_client.rb +41 -41
- data/lib/keycloak-admin/client/client.rb +56 -56
- data/lib/keycloak-admin/client/client_authz_permission_client.rb +80 -80
- data/lib/keycloak-admin/client/client_authz_policy_client.rb +75 -75
- data/lib/keycloak-admin/client/client_authz_resource_client.rb +92 -92
- data/lib/keycloak-admin/client/client_authz_scope_client.rb +70 -70
- data/lib/keycloak-admin/client/client_client.rb +71 -71
- data/lib/keycloak-admin/client/client_role_client.rb +20 -20
- data/lib/keycloak-admin/client/client_role_mappings_client.rb +32 -32
- data/lib/keycloak-admin/client/configurable_token_client.rb +35 -35
- data/lib/keycloak-admin/client/group_client.rb +148 -131
- data/lib/keycloak-admin/client/identity_provider_client.rb +51 -51
- data/lib/keycloak-admin/client/realm_client.rb +122 -122
- data/lib/keycloak-admin/client/role_client.rb +59 -59
- data/lib/keycloak-admin/client/role_mapper_client.rb +47 -45
- data/lib/keycloak-admin/client/token_client.rb +29 -29
- data/lib/keycloak-admin/client/user_client.rb +266 -266
- data/lib/keycloak-admin/configuration.rb +52 -52
- data/lib/keycloak-admin/representation/attack_detection_representation.rb +17 -17
- data/lib/keycloak-admin/representation/camel_json.rb +12 -12
- data/lib/keycloak-admin/representation/client_authz_permission_representation.rb +33 -33
- data/lib/keycloak-admin/representation/client_authz_policy_config_representation.rb +14 -14
- data/lib/keycloak-admin/representation/client_authz_policy_representation.rb +26 -26
- data/lib/keycloak-admin/representation/client_authz_resource_representation.rb +25 -25
- data/lib/keycloak-admin/representation/client_authz_scope_representation.rb +16 -16
- data/lib/keycloak-admin/representation/client_representation.rb +71 -71
- data/lib/keycloak-admin/representation/credential_representation.rb +38 -38
- data/lib/keycloak-admin/representation/federated_identity_representation.rb +15 -15
- data/lib/keycloak-admin/representation/group_representation.rb +21 -21
- data/lib/keycloak-admin/representation/identity_provider_mapper_representation.rb +19 -19
- data/lib/keycloak-admin/representation/identity_provider_representation.rb +67 -67
- data/lib/keycloak-admin/representation/impersonation_redirection_representation.rb +16 -16
- data/lib/keycloak-admin/representation/impersonation_representation.rb +43 -43
- data/lib/keycloak-admin/representation/protocol_mapper_representation.rb +19 -19
- data/lib/keycloak-admin/representation/realm_representation.rb +14 -14
- data/lib/keycloak-admin/representation/representation.rb +23 -23
- data/lib/keycloak-admin/representation/role_representation.rb +19 -19
- data/lib/keycloak-admin/representation/session_representation.rb +22 -22
- data/lib/keycloak-admin/representation/token_representation.rb +39 -39
- data/lib/keycloak-admin/representation/user_representation.rb +47 -47
- data/lib/keycloak-admin/resource/base_role_containing_resource.rb +28 -28
- data/lib/keycloak-admin/resource/group_resource.rb +11 -11
- data/lib/keycloak-admin/resource/user_resource.rb +7 -7
- data/lib/keycloak-admin/version.rb +3 -3
- data/lib/keycloak-admin.rb +84 -84
- data/spec/client/attack_detection_client_spec.rb +102 -102
- data/spec/client/client_authz_permission_client_spec.rb +170 -170
- data/spec/client/client_authz_policy_client_spec.rb +169 -169
- data/spec/client/client_authz_resource_client_spec.rb +150 -150
- data/spec/client/client_authz_scope_client_spec.rb +133 -133
- data/spec/client/client_client_spec.rb +133 -133
- data/spec/client/client_role_mappings_client_spec.rb +82 -82
- data/spec/client/client_spec.rb +28 -28
- data/spec/client/configurable_token_client_spec.rb +34 -34
- data/spec/client/group_client_spec.rb +328 -258
- data/spec/client/identity_provider_client_spec.rb +92 -92
- data/spec/client/realm_client_spec.rb +155 -155
- data/spec/client/role_client_spec.rb +79 -79
- data/spec/client/role_mapper_client_spec.rb +113 -68
- data/spec/client/token_client_spec.rb +68 -68
- data/spec/client/user_client_spec.rb +373 -373
- data/spec/configuration_spec.rb +113 -113
- data/spec/integration/client_authorization_spec.rb +93 -95
- data/spec/representation/attack_detection_representation_spec.rb +15 -15
- data/spec/representation/client_authz_permission_representation_spec.rb +52 -52
- data/spec/representation/client_authz_policy_representation_spec.rb +46 -46
- data/spec/representation/client_authz_resource_representation_spec.rb +33 -33
- data/spec/representation/client_authz_scope_representation_spec.rb +18 -18
- data/spec/representation/client_representation_spec.rb +119 -119
- data/spec/representation/group_representation_spec.rb +22 -22
- data/spec/representation/identity_provider_mapper_representation_spec.rb +24 -24
- data/spec/representation/identity_provider_representation_spec.rb +113 -113
- data/spec/representation/impersonation_representation_spec.rb +163 -163
- data/spec/representation/protocol_mapper_representation_spec.rb +57 -57
- data/spec/representation/role_representation_spec.rb +37 -37
- data/spec/representation/session_representation_spec.rb +15 -15
- data/spec/representation/user_representation_spec.rb +15 -15
- data/spec/resource/group_resource_spec.rb +14 -14
- data/spec/resource/user_resource_spec.rb +14 -14
- data/spec/spec_helper.rb +37 -37
- metadata +10 -10
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
module KeycloakAdmin
|
|
2
|
-
class ClientAuthzResourceClient < Client
|
|
3
|
-
def initialize(configuration, realm_client, client_id)
|
|
4
|
-
super(configuration)
|
|
5
|
-
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
|
|
6
|
-
@realm_client = realm_client
|
|
7
|
-
@client_id = client_id
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def list
|
|
11
|
-
response = execute_http do
|
|
12
|
-
RestClient::Resource.new(authz_resources_url(@client_id), @configuration.rest_client_options).get(headers)
|
|
13
|
-
end
|
|
14
|
-
JSON.parse(response).map { |role_as_hash| ClientAuthzResourceRepresentation.from_hash(role_as_hash) }
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def get(resource_id)
|
|
18
|
-
response = execute_http do
|
|
19
|
-
RestClient::Resource.new(authz_resources_url(@client_id, resource_id), @configuration.rest_client_options).get(headers)
|
|
20
|
-
end
|
|
21
|
-
ClientAuthzResourceRepresentation.from_hash(JSON.parse(response))
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def update(resource_id, client_authz_resource_representation)
|
|
25
|
-
raise "scope[:name] is mandatory and the only necessary attribute to add scope to resource" if client_authz_resource_representation[:scopes] && client_authz_resource_representation[:scopes].any?{|a| !a[:name]}
|
|
26
|
-
|
|
27
|
-
existing_resource = get(resource_id)
|
|
28
|
-
new_resource = build(
|
|
29
|
-
client_authz_resource_representation[:name] || existing_resource.name,
|
|
30
|
-
client_authz_resource_representation[:type] || existing_resource.type,
|
|
31
|
-
(client_authz_resource_representation[:uris] || [] ) + existing_resource.uris,
|
|
32
|
-
client_authz_resource_representation[:owner_managed_access] || existing_resource.owner_managed_access,
|
|
33
|
-
client_authz_resource_representation[:display_name] || existing_resource.display_name,
|
|
34
|
-
(client_authz_resource_representation[:scopes] || []) + existing_resource.scopes.map{|s| {name: s.name}},
|
|
35
|
-
client_authz_resource_representation[:attributes] || existing_resource.attributes
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
execute_http do
|
|
39
|
-
RestClient::Resource.new(authz_resources_url(@client_id, resource_id), @configuration.rest_client_options).put(new_resource.to_json, headers)
|
|
40
|
-
end
|
|
41
|
-
get(resource_id)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def create!(name, type, uris, owner_managed_access, display_name, scopes, attributes = {})
|
|
45
|
-
save(build(name, type, uris, owner_managed_access, display_name, scopes, attributes))
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def find_by(name, type, uris, owner, scope)
|
|
49
|
-
response = execute_http do
|
|
50
|
-
url = "#{authz_resources_url(@client_id)}?name=#{name}&type=#{type}&uris=#{uris}&owner=#{owner}&scope=#{scope}&deep=true&first=0&max=100"
|
|
51
|
-
RestClient::Resource.new(url, @configuration.rest_client_options).get(headers)
|
|
52
|
-
end
|
|
53
|
-
JSON.parse(response).map { |role_as_hash| ClientAuthzResourceRepresentation.from_hash(role_as_hash) }
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def save(client_authz_resource_representation)
|
|
57
|
-
response = execute_http do
|
|
58
|
-
RestClient::Resource.new(authz_resources_url(@client_id), @configuration.rest_client_options).post(client_authz_resource_representation.to_json, headers)
|
|
59
|
-
end
|
|
60
|
-
ClientAuthzResourceRepresentation.from_hash(JSON.parse(response))
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def delete(resource_id)
|
|
64
|
-
execute_http do
|
|
65
|
-
RestClient::Resource.new(authz_resources_url(@client_id, resource_id), @configuration.rest_client_options).delete(headers)
|
|
66
|
-
end
|
|
67
|
-
true
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def authz_resources_url(client_id, id = nil)
|
|
71
|
-
if id
|
|
72
|
-
"#{@realm_client.realm_admin_url}/clients/#{client_id}/authz/resource-server/resource/#{id}"
|
|
73
|
-
else
|
|
74
|
-
"#{@realm_client.realm_admin_url}/clients/#{client_id}/authz/resource-server/resource"
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
private
|
|
79
|
-
|
|
80
|
-
def build(name, type, uris, owner_managed_access, display_name, scopes, attributes={})
|
|
81
|
-
resource = ClientAuthzResourceRepresentation.new
|
|
82
|
-
resource.name = name
|
|
83
|
-
resource.type = type
|
|
84
|
-
resource.uris = uris
|
|
85
|
-
resource.owner_managed_access = owner_managed_access
|
|
86
|
-
resource.display_name = display_name
|
|
87
|
-
resource.scopes = scopes
|
|
88
|
-
resource.attributes = attributes || {}
|
|
89
|
-
resource
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
end
|
|
1
|
+
module KeycloakAdmin
|
|
2
|
+
class ClientAuthzResourceClient < Client
|
|
3
|
+
def initialize(configuration, realm_client, client_id)
|
|
4
|
+
super(configuration)
|
|
5
|
+
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
|
|
6
|
+
@realm_client = realm_client
|
|
7
|
+
@client_id = client_id
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def list
|
|
11
|
+
response = execute_http do
|
|
12
|
+
RestClient::Resource.new(authz_resources_url(@client_id), @configuration.rest_client_options).get(headers)
|
|
13
|
+
end
|
|
14
|
+
JSON.parse(response).map { |role_as_hash| ClientAuthzResourceRepresentation.from_hash(role_as_hash) }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get(resource_id)
|
|
18
|
+
response = execute_http do
|
|
19
|
+
RestClient::Resource.new(authz_resources_url(@client_id, resource_id), @configuration.rest_client_options).get(headers)
|
|
20
|
+
end
|
|
21
|
+
ClientAuthzResourceRepresentation.from_hash(JSON.parse(response))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def update(resource_id, client_authz_resource_representation)
|
|
25
|
+
raise "scope[:name] is mandatory and the only necessary attribute to add scope to resource" if client_authz_resource_representation[:scopes] && client_authz_resource_representation[:scopes].any?{|a| !a[:name]}
|
|
26
|
+
|
|
27
|
+
existing_resource = get(resource_id)
|
|
28
|
+
new_resource = build(
|
|
29
|
+
client_authz_resource_representation[:name] || existing_resource.name,
|
|
30
|
+
client_authz_resource_representation[:type] || existing_resource.type,
|
|
31
|
+
(client_authz_resource_representation[:uris] || [] ) + existing_resource.uris,
|
|
32
|
+
client_authz_resource_representation[:owner_managed_access] || existing_resource.owner_managed_access,
|
|
33
|
+
client_authz_resource_representation[:display_name] || existing_resource.display_name,
|
|
34
|
+
(client_authz_resource_representation[:scopes] || []) + existing_resource.scopes.map{|s| {name: s.name}},
|
|
35
|
+
client_authz_resource_representation[:attributes] || existing_resource.attributes
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
execute_http do
|
|
39
|
+
RestClient::Resource.new(authz_resources_url(@client_id, resource_id), @configuration.rest_client_options).put(new_resource.to_json, headers)
|
|
40
|
+
end
|
|
41
|
+
get(resource_id)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def create!(name, type, uris, owner_managed_access, display_name, scopes, attributes = {})
|
|
45
|
+
save(build(name, type, uris, owner_managed_access, display_name, scopes, attributes))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def find_by(name, type, uris, owner, scope)
|
|
49
|
+
response = execute_http do
|
|
50
|
+
url = "#{authz_resources_url(@client_id)}?name=#{name}&type=#{type}&uris=#{uris}&owner=#{owner}&scope=#{scope}&deep=true&first=0&max=100"
|
|
51
|
+
RestClient::Resource.new(url, @configuration.rest_client_options).get(headers)
|
|
52
|
+
end
|
|
53
|
+
JSON.parse(response).map { |role_as_hash| ClientAuthzResourceRepresentation.from_hash(role_as_hash) }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def save(client_authz_resource_representation)
|
|
57
|
+
response = execute_http do
|
|
58
|
+
RestClient::Resource.new(authz_resources_url(@client_id), @configuration.rest_client_options).post(client_authz_resource_representation.to_json, headers)
|
|
59
|
+
end
|
|
60
|
+
ClientAuthzResourceRepresentation.from_hash(JSON.parse(response))
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def delete(resource_id)
|
|
64
|
+
execute_http do
|
|
65
|
+
RestClient::Resource.new(authz_resources_url(@client_id, resource_id), @configuration.rest_client_options).delete(headers)
|
|
66
|
+
end
|
|
67
|
+
true
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def authz_resources_url(client_id, id = nil)
|
|
71
|
+
if id
|
|
72
|
+
"#{@realm_client.realm_admin_url}/clients/#{client_id}/authz/resource-server/resource/#{id}"
|
|
73
|
+
else
|
|
74
|
+
"#{@realm_client.realm_admin_url}/clients/#{client_id}/authz/resource-server/resource"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
private
|
|
79
|
+
|
|
80
|
+
def build(name, type, uris, owner_managed_access, display_name, scopes, attributes={})
|
|
81
|
+
resource = ClientAuthzResourceRepresentation.new
|
|
82
|
+
resource.name = name
|
|
83
|
+
resource.type = type
|
|
84
|
+
resource.uris = uris
|
|
85
|
+
resource.owner_managed_access = owner_managed_access
|
|
86
|
+
resource.display_name = display_name
|
|
87
|
+
resource.scopes = scopes
|
|
88
|
+
resource.attributes = attributes || {}
|
|
89
|
+
resource
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
93
|
end
|
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
module KeycloakAdmin
|
|
2
|
-
class ClientAuthzScopeClient < Client
|
|
3
|
-
def initialize(configuration, realm_client, client_id, resource_id = nil)
|
|
4
|
-
super(configuration)
|
|
5
|
-
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
|
|
6
|
-
@realm_client = realm_client
|
|
7
|
-
@client_id = client_id
|
|
8
|
-
@resource_id = resource_id
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def create!(name, display_name, icon_uri)
|
|
12
|
-
response = save(build(name, display_name, icon_uri))
|
|
13
|
-
ClientAuthzScopeRepresentation.from_hash(JSON.parse(response))
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def list
|
|
17
|
-
response = execute_http do
|
|
18
|
-
RestClient::Resource.new(authz_scopes_url(@client_id, @resource_id), @configuration.rest_client_options).get(headers)
|
|
19
|
-
end
|
|
20
|
-
JSON.parse(response).map { |role_as_hash| ClientAuthzScopeRepresentation.from_hash(role_as_hash) }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def delete(scope_id)
|
|
24
|
-
execute_http do
|
|
25
|
-
RestClient::Resource.new(authz_scopes_url(@client_id, nil, scope_id), @configuration.rest_client_options).delete(headers)
|
|
26
|
-
end
|
|
27
|
-
true
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def get(scope_id)
|
|
31
|
-
response = execute_http do
|
|
32
|
-
RestClient::Resource.new(authz_scopes_url(@client_id, nil, scope_id), @configuration.rest_client_options).get(headers)
|
|
33
|
-
end
|
|
34
|
-
ClientAuthzScopeRepresentation.from_hash(JSON.parse(response))
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def search(name)
|
|
38
|
-
url = "#{authz_scopes_url(@client_id)}?first=0&max=11&deep=false&name=#{name}"
|
|
39
|
-
response = execute_http do
|
|
40
|
-
RestClient::Resource.new(url, @configuration.rest_client_options).get(headers)
|
|
41
|
-
end
|
|
42
|
-
JSON.parse(response).map { |role_as_hash| ClientAuthzScopeRepresentation.from_hash(role_as_hash) }
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def authz_scopes_url(client_id, resource_id = nil, id = nil)
|
|
46
|
-
if resource_id
|
|
47
|
-
"#{@realm_client.realm_admin_url}/clients/#{client_id}/authz/resource-server/resource/#{resource_id}/scopes"
|
|
48
|
-
elsif id
|
|
49
|
-
"#{@realm_client.realm_admin_url}/clients/#{client_id}/authz/resource-server/scope/#{id}"
|
|
50
|
-
else
|
|
51
|
-
"#{@realm_client.realm_admin_url}/clients/#{client_id}/authz/resource-server/scope"
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def save(scope_representation)
|
|
56
|
-
execute_http do
|
|
57
|
-
RestClient::Resource.new(authz_scopes_url(@client_id), @configuration.rest_client_options).post(
|
|
58
|
-
create_payload(scope_representation), headers
|
|
59
|
-
)
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def build(name, display_name, icon_uri)
|
|
64
|
-
scope = ClientAuthzScopeRepresentation.new
|
|
65
|
-
scope.name = name
|
|
66
|
-
scope.icon_uri = icon_uri
|
|
67
|
-
scope.display_name = display_name
|
|
68
|
-
scope
|
|
69
|
-
end
|
|
70
|
-
end
|
|
1
|
+
module KeycloakAdmin
|
|
2
|
+
class ClientAuthzScopeClient < Client
|
|
3
|
+
def initialize(configuration, realm_client, client_id, resource_id = nil)
|
|
4
|
+
super(configuration)
|
|
5
|
+
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
|
|
6
|
+
@realm_client = realm_client
|
|
7
|
+
@client_id = client_id
|
|
8
|
+
@resource_id = resource_id
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def create!(name, display_name, icon_uri)
|
|
12
|
+
response = save(build(name, display_name, icon_uri))
|
|
13
|
+
ClientAuthzScopeRepresentation.from_hash(JSON.parse(response))
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def list
|
|
17
|
+
response = execute_http do
|
|
18
|
+
RestClient::Resource.new(authz_scopes_url(@client_id, @resource_id), @configuration.rest_client_options).get(headers)
|
|
19
|
+
end
|
|
20
|
+
JSON.parse(response).map { |role_as_hash| ClientAuthzScopeRepresentation.from_hash(role_as_hash) }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def delete(scope_id)
|
|
24
|
+
execute_http do
|
|
25
|
+
RestClient::Resource.new(authz_scopes_url(@client_id, nil, scope_id), @configuration.rest_client_options).delete(headers)
|
|
26
|
+
end
|
|
27
|
+
true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def get(scope_id)
|
|
31
|
+
response = execute_http do
|
|
32
|
+
RestClient::Resource.new(authz_scopes_url(@client_id, nil, scope_id), @configuration.rest_client_options).get(headers)
|
|
33
|
+
end
|
|
34
|
+
ClientAuthzScopeRepresentation.from_hash(JSON.parse(response))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def search(name)
|
|
38
|
+
url = "#{authz_scopes_url(@client_id)}?first=0&max=11&deep=false&name=#{name}"
|
|
39
|
+
response = execute_http do
|
|
40
|
+
RestClient::Resource.new(url, @configuration.rest_client_options).get(headers)
|
|
41
|
+
end
|
|
42
|
+
JSON.parse(response).map { |role_as_hash| ClientAuthzScopeRepresentation.from_hash(role_as_hash) }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def authz_scopes_url(client_id, resource_id = nil, id = nil)
|
|
46
|
+
if resource_id
|
|
47
|
+
"#{@realm_client.realm_admin_url}/clients/#{client_id}/authz/resource-server/resource/#{resource_id}/scopes"
|
|
48
|
+
elsif id
|
|
49
|
+
"#{@realm_client.realm_admin_url}/clients/#{client_id}/authz/resource-server/scope/#{id}"
|
|
50
|
+
else
|
|
51
|
+
"#{@realm_client.realm_admin_url}/clients/#{client_id}/authz/resource-server/scope"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def save(scope_representation)
|
|
56
|
+
execute_http do
|
|
57
|
+
RestClient::Resource.new(authz_scopes_url(@client_id), @configuration.rest_client_options).post(
|
|
58
|
+
create_payload(scope_representation), headers
|
|
59
|
+
)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def build(name, display_name, icon_uri)
|
|
64
|
+
scope = ClientAuthzScopeRepresentation.new
|
|
65
|
+
scope.name = name
|
|
66
|
+
scope.icon_uri = icon_uri
|
|
67
|
+
scope.display_name = display_name
|
|
68
|
+
scope
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
71
|
end
|
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
module KeycloakAdmin
|
|
2
|
-
class ClientClient < Client
|
|
3
|
-
def initialize(configuration, realm_client)
|
|
4
|
-
super(configuration)
|
|
5
|
-
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
|
|
6
|
-
@realm_client = realm_client
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def get(id)
|
|
10
|
-
response = execute_http do
|
|
11
|
-
RestClient::Resource.new(clients_url(id), @configuration.rest_client_options).get(headers)
|
|
12
|
-
end
|
|
13
|
-
ClientRepresentation.from_hash(JSON.parse(response))
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def save(client_representation)
|
|
17
|
-
execute_http do
|
|
18
|
-
RestClient::Resource.new(clients_url, @configuration.rest_client_options).post(
|
|
19
|
-
create_payload(client_representation), headers
|
|
20
|
-
)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def list
|
|
25
|
-
response = execute_http do
|
|
26
|
-
RestClient::Resource.new(clients_url, @configuration.rest_client_options).get(headers)
|
|
27
|
-
end
|
|
28
|
-
JSON.parse(response).map { |client_as_hash| ClientRepresentation.from_hash(client_as_hash) }
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def find_by_client_id(client_id)
|
|
32
|
-
list.find { |client| client.client_id == client_id }
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def delete(id)
|
|
36
|
-
execute_http do
|
|
37
|
-
RestClient::Resource.new(clients_url(id), @configuration.rest_client_options).delete(headers)
|
|
38
|
-
end
|
|
39
|
-
true
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def update(client_representation)
|
|
43
|
-
execute_http do
|
|
44
|
-
RestClient::Resource.new(clients_url(client_representation.id), @configuration.rest_client_options).put(
|
|
45
|
-
create_payload(client_representation), headers
|
|
46
|
-
)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
get(client_representation.id)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def get_service_account_user(client_id)
|
|
53
|
-
response = execute_http do
|
|
54
|
-
RestClient::Resource.new(service_account_user_url(client_id), @configuration.rest_client_options).get(headers)
|
|
55
|
-
end
|
|
56
|
-
UserRepresentation.from_hash(JSON.parse(response))
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def clients_url(id=nil)
|
|
60
|
-
if id
|
|
61
|
-
"#{@realm_client.realm_admin_url}/clients/#{id}"
|
|
62
|
-
else
|
|
63
|
-
"#{@realm_client.realm_admin_url}/clients"
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def service_account_user_url(client_id)
|
|
68
|
-
"#{clients_url(client_id)}/service-account-user"
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
1
|
+
module KeycloakAdmin
|
|
2
|
+
class ClientClient < Client
|
|
3
|
+
def initialize(configuration, realm_client)
|
|
4
|
+
super(configuration)
|
|
5
|
+
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
|
|
6
|
+
@realm_client = realm_client
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def get(id)
|
|
10
|
+
response = execute_http do
|
|
11
|
+
RestClient::Resource.new(clients_url(id), @configuration.rest_client_options).get(headers)
|
|
12
|
+
end
|
|
13
|
+
ClientRepresentation.from_hash(JSON.parse(response))
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def save(client_representation)
|
|
17
|
+
execute_http do
|
|
18
|
+
RestClient::Resource.new(clients_url, @configuration.rest_client_options).post(
|
|
19
|
+
create_payload(client_representation), headers
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def list
|
|
25
|
+
response = execute_http do
|
|
26
|
+
RestClient::Resource.new(clients_url, @configuration.rest_client_options).get(headers)
|
|
27
|
+
end
|
|
28
|
+
JSON.parse(response).map { |client_as_hash| ClientRepresentation.from_hash(client_as_hash) }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def find_by_client_id(client_id)
|
|
32
|
+
list.find { |client| client.client_id == client_id }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def delete(id)
|
|
36
|
+
execute_http do
|
|
37
|
+
RestClient::Resource.new(clients_url(id), @configuration.rest_client_options).delete(headers)
|
|
38
|
+
end
|
|
39
|
+
true
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def update(client_representation)
|
|
43
|
+
execute_http do
|
|
44
|
+
RestClient::Resource.new(clients_url(client_representation.id), @configuration.rest_client_options).put(
|
|
45
|
+
create_payload(client_representation), headers
|
|
46
|
+
)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
get(client_representation.id)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def get_service_account_user(client_id)
|
|
53
|
+
response = execute_http do
|
|
54
|
+
RestClient::Resource.new(service_account_user_url(client_id), @configuration.rest_client_options).get(headers)
|
|
55
|
+
end
|
|
56
|
+
UserRepresentation.from_hash(JSON.parse(response))
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def clients_url(id=nil)
|
|
60
|
+
if id
|
|
61
|
+
"#{@realm_client.realm_admin_url}/clients/#{id}"
|
|
62
|
+
else
|
|
63
|
+
"#{@realm_client.realm_admin_url}/clients"
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def service_account_user_url(client_id)
|
|
68
|
+
"#{clients_url(client_id)}/service-account-user"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
module KeycloakAdmin
|
|
2
|
-
class ClientRoleClient < Client
|
|
3
|
-
def initialize(configuration, realm_client)
|
|
4
|
-
super(configuration)
|
|
5
|
-
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
|
|
6
|
-
@realm_client = realm_client
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def list(client_id)
|
|
10
|
-
response = execute_http do
|
|
11
|
-
RestClient::Resource.new(clients_url(client_id), @configuration.rest_client_options).get(headers)
|
|
12
|
-
end
|
|
13
|
-
JSON.parse(response).map { |role_as_hash| RoleRepresentation.from_hash(role_as_hash) }
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def clients_url(id)
|
|
17
|
-
"#{@realm_client.realm_admin_url}/clients/#{id}/roles"
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
1
|
+
module KeycloakAdmin
|
|
2
|
+
class ClientRoleClient < Client
|
|
3
|
+
def initialize(configuration, realm_client)
|
|
4
|
+
super(configuration)
|
|
5
|
+
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
|
|
6
|
+
@realm_client = realm_client
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def list(client_id)
|
|
10
|
+
response = execute_http do
|
|
11
|
+
RestClient::Resource.new(clients_url(client_id), @configuration.rest_client_options).get(headers)
|
|
12
|
+
end
|
|
13
|
+
JSON.parse(response).map { |role_as_hash| RoleRepresentation.from_hash(role_as_hash) }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def clients_url(id)
|
|
17
|
+
"#{@realm_client.realm_admin_url}/clients/#{id}/roles"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
module KeycloakAdmin
|
|
2
|
-
class ClientRoleMappingsClient < Client
|
|
3
|
-
def initialize(configuration, user_resource, client_id)
|
|
4
|
-
super(configuration)
|
|
5
|
-
@user_resource = user_resource
|
|
6
|
-
@client_id = client_id
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def list_available
|
|
10
|
-
response = execute_http do
|
|
11
|
-
RestClient::Resource.new(list_available_url, @configuration.rest_client_options).get(headers)
|
|
12
|
-
end
|
|
13
|
-
JSON.parse(response).map { |role_as_hash| RoleRepresentation.from_hash(role_as_hash) }
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def save(role_representation_list)
|
|
17
|
-
execute_http do
|
|
18
|
-
RestClient::Resource.new(base_url, @configuration.rest_client_options).post(
|
|
19
|
-
create_payload(role_representation_list), headers
|
|
20
|
-
)
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def list_available_url
|
|
25
|
-
"#{@user_resource.resource_url}/role-mappings/clients/#{@client_id}/available"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def base_url
|
|
29
|
-
"#{@user_resource.resource_url}/role-mappings/clients/#{@client_id}"
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
1
|
+
module KeycloakAdmin
|
|
2
|
+
class ClientRoleMappingsClient < Client
|
|
3
|
+
def initialize(configuration, user_resource, client_id)
|
|
4
|
+
super(configuration)
|
|
5
|
+
@user_resource = user_resource
|
|
6
|
+
@client_id = client_id
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def list_available
|
|
10
|
+
response = execute_http do
|
|
11
|
+
RestClient::Resource.new(list_available_url, @configuration.rest_client_options).get(headers)
|
|
12
|
+
end
|
|
13
|
+
JSON.parse(response).map { |role_as_hash| RoleRepresentation.from_hash(role_as_hash) }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def save(role_representation_list)
|
|
17
|
+
execute_http do
|
|
18
|
+
RestClient::Resource.new(base_url, @configuration.rest_client_options).post(
|
|
19
|
+
create_payload(role_representation_list), headers
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def list_available_url
|
|
25
|
+
"#{@user_resource.resource_url}/role-mappings/clients/#{@client_id}/available"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def base_url
|
|
29
|
+
"#{@user_resource.resource_url}/role-mappings/clients/#{@client_id}"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
module KeycloakAdmin
|
|
2
|
-
class ConfigurableTokenClient < Client
|
|
3
|
-
def initialize(configuration, realm_client)
|
|
4
|
-
super(configuration)
|
|
5
|
-
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
|
|
6
|
-
@realm_client = realm_client
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def token_url
|
|
10
|
-
"#{realm_url}/configurable-token"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def realm_url
|
|
14
|
-
@realm_client.realm_url
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def exchange_with(user_access_token, token_lifespan_in_seconds)
|
|
18
|
-
response = execute_http do
|
|
19
|
-
RestClient::Request.execute(
|
|
20
|
-
@configuration.rest_client_options.merge(
|
|
21
|
-
method: :post,
|
|
22
|
-
url: token_url,
|
|
23
|
-
payload: { tokenLifespanInSeconds: token_lifespan_in_seconds }.to_json,
|
|
24
|
-
headers: {
|
|
25
|
-
Authorization: "Bearer #{user_access_token}",
|
|
26
|
-
content_type: :json,
|
|
27
|
-
accept: :json
|
|
28
|
-
}
|
|
29
|
-
)
|
|
30
|
-
)
|
|
31
|
-
end
|
|
32
|
-
TokenRepresentation.from_json(response.body)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
1
|
+
module KeycloakAdmin
|
|
2
|
+
class ConfigurableTokenClient < Client
|
|
3
|
+
def initialize(configuration, realm_client)
|
|
4
|
+
super(configuration)
|
|
5
|
+
raise ArgumentError.new("realm must be defined") unless realm_client.name_defined?
|
|
6
|
+
@realm_client = realm_client
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def token_url
|
|
10
|
+
"#{realm_url}/configurable-token"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def realm_url
|
|
14
|
+
@realm_client.realm_url
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def exchange_with(user_access_token, token_lifespan_in_seconds)
|
|
18
|
+
response = execute_http do
|
|
19
|
+
RestClient::Request.execute(
|
|
20
|
+
@configuration.rest_client_options.merge(
|
|
21
|
+
method: :post,
|
|
22
|
+
url: token_url,
|
|
23
|
+
payload: { tokenLifespanInSeconds: token_lifespan_in_seconds }.to_json,
|
|
24
|
+
headers: {
|
|
25
|
+
Authorization: "Bearer #{user_access_token}",
|
|
26
|
+
content_type: :json,
|
|
27
|
+
accept: :json
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
TokenRepresentation.from_json(response.body)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|