descope 1.0.7 → 1.2.0
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/ci.yaml +51 -12
- data/.github/workflows/publish-gem.yaml +6 -33
- data/.github/workflows/release-please.yaml +36 -0
- data/.gitignore +3 -2
- data/.release-please-manifest.json +1 -1
- data/.rubocop.yml +1 -1
- data/.rubocop_todo.yml +1 -1
- data/.ruby-version +1 -1
- data/CHANGELOG.md +31 -0
- data/Gemfile +7 -6
- data/Gemfile.lock +46 -45
- data/README.md +244 -1
- data/examples/ruby-on-rails-api/descope/package-lock.json +16 -10
- data/examples/ruby-on-rails-api/descope/yarn.lock +3 -3
- data/lib/descope/api/v1/auth/enchantedlink.rb +76 -9
- data/lib/descope/api/v1/management/access_key.rb +8 -7
- data/lib/descope/api/v1/management/analytics.rb +62 -0
- data/lib/descope/api/v1/management/audit.rb +2 -2
- data/lib/descope/api/v1/management/authz.rb +15 -15
- data/lib/descope/api/v1/management/common.rb +76 -0
- data/lib/descope/api/v1/management/descoper.rb +45 -0
- data/lib/descope/api/v1/management/engine.rb +44 -0
- data/lib/descope/api/v1/management/fga.rb +64 -0
- data/lib/descope/api/v1/management/flow.rb +5 -5
- data/lib/descope/api/v1/management/group.rb +42 -0
- data/lib/descope/api/v1/management/jwt_template.rb +49 -0
- data/lib/descope/api/v1/management/lists.rb +96 -0
- data/lib/descope/api/v1/management/management_key.rb +54 -0
- data/lib/descope/api/v1/management/outbound_app.rb +112 -0
- data/lib/descope/api/v1/management/password.rb +2 -2
- data/lib/descope/api/v1/management/permission.rb +4 -4
- data/lib/descope/api/v1/management/project.rb +5 -5
- data/lib/descope/api/v1/management/role.rb +5 -5
- data/lib/descope/api/v1/management/scim.rb +14 -14
- data/lib/descope/api/v1/management/scope_claim_mapping.rb +34 -0
- data/lib/descope/api/v1/management/sso_application.rb +7 -7
- data/lib/descope/api/v1/management/sso_settings.rb +5 -5
- data/lib/descope/api/v1/management/tenant.rb +8 -6
- data/lib/descope/api/v1/management/third_party_application.rb +190 -0
- data/lib/descope/api/v1/management/user.rb +36 -36
- data/lib/descope/api/v1/management.rb +22 -0
- data/lib/descope/http_client.rb +30 -0
- data/lib/descope/mixins/common.rb +1 -0
- data/lib/descope/mixins/http.rb +25 -18
- data/lib/descope/mixins/initializer.rb +23 -11
- data/lib/descope/mixins/requests.rb +24 -0
- data/lib/descope/mixins.rb +2 -1
- data/lib/descope/version.rb +1 -1
- data/spec/integration/lib.descope/api/v1/auth/enchantedlink_spec.rb +19 -21
- data/spec/integration/lib.descope/api/v1/auth/magiclink_spec.rb +5 -1
- data/spec/integration/lib.descope/api/v1/auth/otp_spec.rb +5 -1
- data/spec/integration/lib.descope/api/v1/auth/session_spec.rb +24 -5
- data/spec/integration/lib.descope/api/v1/auth/totp_spec.rb +5 -1
- data/spec/integration/lib.descope/api/v1/management/access_key_spec.rb +10 -2
- data/spec/integration/lib.descope/api/v1/management/authz_spec.rb +26 -5
- data/spec/integration/lib.descope/api/v1/management/permissions_spec.rb +20 -2
- data/spec/integration/lib.descope/api/v1/management/project_spec.rb +16 -2
- data/spec/integration/lib.descope/api/v1/management/roles_spec.rb +114 -36
- data/spec/integration/lib.descope/api/v1/management/user_spec.rb +21 -4
- data/spec/lib.descope/api/v1/auth/enchantedlink_spec.rb +163 -1
- data/spec/lib.descope/api/v1/management/access_key_spec.rb +7 -7
- data/spec/lib.descope/api/v1/management/analytics_spec.rb +82 -0
- data/spec/lib.descope/api/v1/management/audit_spec.rb +2 -2
- data/spec/lib.descope/api/v1/management/authz_spec.rb +16 -16
- data/spec/lib.descope/api/v1/management/descoper_spec.rb +101 -0
- data/spec/lib.descope/api/v1/management/engine_spec.rb +115 -0
- data/spec/lib.descope/api/v1/management/fga_spec.rb +169 -0
- data/spec/lib.descope/api/v1/management/flow_spec.rb +5 -5
- data/spec/lib.descope/api/v1/management/group_spec.rb +72 -0
- data/spec/lib.descope/api/v1/management/jwt_template_spec.rb +103 -0
- data/spec/lib.descope/api/v1/management/lists_spec.rb +285 -0
- data/spec/lib.descope/api/v1/management/management_key_spec.rb +109 -0
- data/spec/lib.descope/api/v1/management/outbound_app_spec.rb +236 -0
- data/spec/lib.descope/api/v1/management/password_spec.rb +2 -2
- data/spec/lib.descope/api/v1/management/permission_spec.rb +4 -4
- data/spec/lib.descope/api/v1/management/project_spec.rb +4 -4
- data/spec/lib.descope/api/v1/management/role_spec.rb +5 -5
- data/spec/lib.descope/api/v1/management/scim_spec.rb +14 -14
- data/spec/lib.descope/api/v1/management/scope_claim_mapping_spec.rb +59 -0
- data/spec/lib.descope/api/v1/management/sso_application_spec.rb +6 -6
- data/spec/lib.descope/api/v1/management/sso_settings_spec.rb +5 -5
- data/spec/lib.descope/api/v1/management/tenant_spec.rb +6 -6
- data/spec/lib.descope/api/v1/management/third_party_application_spec.rb +171 -0
- data/spec/lib.descope/api/v1/management/user_spec.rb +36 -36
- data/spec/lib.descope/auth_management_key_spec.rb +151 -0
- data/spec/lib.descope/mixins/http_spec.rb +17 -6
- data/spec/support/client_config.rb +1 -0
- data/spec/support/dummy_class.rb +12 -9
- data/spec/support/utils.rb +15 -0
- metadata +29 -3
|
@@ -52,7 +52,7 @@ module Descope
|
|
|
52
52
|
request_params[:text] = text unless text.nil?
|
|
53
53
|
request_params[:from] = from_ts.to_i * 1000 unless from_ts.nil?
|
|
54
54
|
request_params[:to] = to_ts.to_i * 1000 unless to_ts.nil?
|
|
55
|
-
res =
|
|
55
|
+
res = mgmt_post(AUDIT_SEARCH, request_params)
|
|
56
56
|
raise Descope::AuthException, "could not get audits: #{res}" if res['audits'].nil?
|
|
57
57
|
|
|
58
58
|
{ 'audits' => res['audits'].map { |audit| convert_audit_record(audit) } }
|
|
@@ -79,7 +79,7 @@ module Descope
|
|
|
79
79
|
}
|
|
80
80
|
request_params[:userId] = user_id unless user_id.nil?
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
mgmt_post(AUDIT_CREATE_EVENT, request_params)
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
private
|
|
@@ -40,17 +40,17 @@ module Descope
|
|
|
40
40
|
# Schema name can be used for projects to track versioning.
|
|
41
41
|
# @see https://docs.descope.com/api/openapi/authz/operation/SaveSchema/
|
|
42
42
|
request_params = { schema:, upgrade: }
|
|
43
|
-
|
|
43
|
+
mgmt_post(AUTHZ_SCHEMA_SAVE, request_params)
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def authz_delete_schema
|
|
47
47
|
# Delete the schema for the project which will also delete all relations.
|
|
48
|
-
|
|
48
|
+
mgmt_post(AUTHZ_SCHEMA_DELETE)
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
def authz_load_schema
|
|
52
52
|
# Load the schema for the project.
|
|
53
|
-
|
|
53
|
+
mgmt_post(AUTHZ_SCHEMA_LOAD)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def authz_save_namespace(namespace: nil, old_name: nil, schema_name: nil)
|
|
@@ -59,14 +59,14 @@ module Descope
|
|
|
59
59
|
request_params = { namespace: namespace }
|
|
60
60
|
request_params[:oldName] = old_name unless old_name.nil?
|
|
61
61
|
request_params[:schemaName] = schema_name unless schema_name.nil?
|
|
62
|
-
|
|
62
|
+
mgmt_post(AUTHZ_NS_SAVE, request_params)
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
def authz_delete_namespace(name: nil, schema_name: nil)
|
|
66
66
|
# Delete the given namespace
|
|
67
67
|
request_params = { name: name }
|
|
68
68
|
request_params[:schemaName] = schema_name unless schema_name.nil?
|
|
69
|
-
|
|
69
|
+
mgmt_post(AUTHZ_NS_DELETE, request_params)
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
def authz_save_relation_definition(relation_definition: nil, namespace: nil, old_name: nil, schema_name: nil)
|
|
@@ -78,14 +78,14 @@ module Descope
|
|
|
78
78
|
}
|
|
79
79
|
request_params[:old_name] = old_name unless old_name.nil?
|
|
80
80
|
request_params[:schemaName] = schema_name unless schema_name.nil?
|
|
81
|
-
|
|
81
|
+
mgmt_post(AUTHZ_RD_SAVE, request_params)
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
def authz_delete_relation_definition(name: nil, namespace: nil, schema_name: nil)
|
|
85
85
|
# Delete the given relation definition
|
|
86
86
|
request_params = { name: , namespace: }
|
|
87
87
|
request_params[:schemaName] = schema_name unless schema_name.nil?
|
|
88
|
-
|
|
88
|
+
mgmt_post(AUTHZ_RD_DELETE, request_params)
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
def authz_create_relations(relations = nil)
|
|
@@ -114,22 +114,22 @@ module Descope
|
|
|
114
114
|
# }
|
|
115
115
|
# Each relation should have exactly one of: target, targetSet, query
|
|
116
116
|
# Regarding query above, it should be specified if the target is a set of users that matches the query - all fields are optional
|
|
117
|
-
|
|
117
|
+
mgmt_post(AUTHZ_RE_CREATE, { relations: })
|
|
118
118
|
end
|
|
119
119
|
|
|
120
120
|
def authz_delete_relations(relations = nil)
|
|
121
121
|
# Delete the given relations based on the existing schema
|
|
122
|
-
|
|
122
|
+
mgmt_post(AUTHZ_RE_DELETE, { relations: })
|
|
123
123
|
end
|
|
124
124
|
|
|
125
125
|
def authz_delete_relations_for_resources(resources = nil)
|
|
126
126
|
# Delete all relations for the given resources
|
|
127
|
-
|
|
127
|
+
mgmt_post(AUTHZ_RE_DELETE_RESOURCES, { resources: })
|
|
128
128
|
end
|
|
129
129
|
|
|
130
130
|
def authz_has_relations?(relation_queries = nil)
|
|
131
131
|
# Queries the given relations to see if they exist returning true if they do
|
|
132
|
-
|
|
132
|
+
mgmt_post(AUTHZ_RE_HAS_RELATIONS, { relationQueries: relation_queries })
|
|
133
133
|
end
|
|
134
134
|
|
|
135
135
|
def authz_who_can_access?(resource: nil, relation_definition: nil, namespace: nil)
|
|
@@ -139,21 +139,21 @@ module Descope
|
|
|
139
139
|
relationDefinition: relation_definition,
|
|
140
140
|
namespace:
|
|
141
141
|
}
|
|
142
|
-
|
|
142
|
+
mgmt_post(AUTHZ_RE_WHO, request_params)
|
|
143
143
|
end
|
|
144
144
|
|
|
145
145
|
def authz_resource_relations(resources: nil)
|
|
146
|
-
|
|
146
|
+
mgmt_post(AUTHZ_RE_RESOURCE, { resources: })
|
|
147
147
|
end
|
|
148
148
|
|
|
149
149
|
def authz_target_relations(targets: nil)
|
|
150
150
|
# Returns the list of all defined relations (not recursive) for the given targets.
|
|
151
|
-
|
|
151
|
+
mgmt_post(AUTHZ_RE_TARGETS, { targets: })
|
|
152
152
|
end
|
|
153
153
|
|
|
154
154
|
def authz_what_can_target_access?(target: nil)
|
|
155
155
|
# Returns the list of all relations for the given target including derived relations from the schema tree.
|
|
156
|
-
res =
|
|
156
|
+
res = mgmt_post(AUTHZ_RE_TARGET_ALL, { target: })
|
|
157
157
|
raise Descope::AuthException, "could not get relation for target: #{res}" if res['relations'].nil?
|
|
158
158
|
|
|
159
159
|
res['relations']
|
|
@@ -141,6 +141,82 @@ module Descope
|
|
|
141
141
|
PROJECT_IMPORT_PATH = '/v1/mgmt/project/import'
|
|
142
142
|
PROJECT_DELETE_PATH = '/v1/mgmt/project/delete'
|
|
143
143
|
|
|
144
|
+
# FGA (Fine-Grained Authorization)
|
|
145
|
+
FGA_SAVE_SCHEMA_PATH = '/v1/mgmt/fga/schema'
|
|
146
|
+
FGA_LOAD_SCHEMA_PATH = '/v1/mgmt/fga/schema'
|
|
147
|
+
FGA_CREATE_RELATIONS_PATH = '/v1/mgmt/fga/relations'
|
|
148
|
+
FGA_DELETE_RELATIONS_PATH = '/v1/mgmt/fga/relations/delete'
|
|
149
|
+
FGA_CHECK_PATH = '/v1/mgmt/fga/check'
|
|
150
|
+
FGA_LOAD_MAPPABLE_SCHEMA_PATH = '/v1/mgmt/fga/mappable/schema'
|
|
151
|
+
FGA_SEARCH_MAPPABLE_RESOURCES_PATH = '/v1/mgmt/fga/mappable/resources'
|
|
152
|
+
FGA_RESOURCES_LOAD_PATH = '/v1/mgmt/fga/resources/load'
|
|
153
|
+
FGA_RESOURCES_SAVE_PATH = '/v1/mgmt/fga/resources/save'
|
|
154
|
+
|
|
155
|
+
# Third Party Application
|
|
156
|
+
THIRD_PARTY_APP_CREATE_PATH = '/v1/mgmt/thirdparty/app/create'
|
|
157
|
+
THIRD_PARTY_APP_UPDATE_PATH = '/v1/mgmt/thirdparty/app/update'
|
|
158
|
+
THIRD_PARTY_APP_PATCH_PATH = '/v1/mgmt/thirdparty/app/patch'
|
|
159
|
+
THIRD_PARTY_APP_DELETE_PATH = '/v1/mgmt/thirdparty/app/delete'
|
|
160
|
+
THIRD_PARTY_APP_LOAD_PATH = '/v1/mgmt/thirdparty/app/load'
|
|
161
|
+
THIRD_PARTY_APP_LOAD_ALL_PATH = '/v1/mgmt/thirdparty/apps/load'
|
|
162
|
+
THIRD_PARTY_APP_SECRET_PATH = '/v1/mgmt/thirdparty/app/secret'
|
|
163
|
+
THIRD_PARTY_APP_ROTATE_PATH = '/v1/mgmt/thirdparty/app/rotate'
|
|
164
|
+
THIRD_PARTY_APP_DELETE_CONSENTS_PATH = '/v1/mgmt/thirdparty/consents/delete'
|
|
165
|
+
THIRD_PARTY_APP_DELETE_TENANT_CONSENTS_PATH = '/v1/mgmt/thirdparty/consents/delete/tenant'
|
|
166
|
+
|
|
167
|
+
# Management Key
|
|
168
|
+
MGMT_KEY_CREATE_PATH = '/v1/mgmt/managementkey'
|
|
169
|
+
MGMT_KEY_UPDATE_PATH = '/v1/mgmt/managementkey'
|
|
170
|
+
MGMT_KEY_GET_PATH = '/v1/mgmt/managementkey'
|
|
171
|
+
MGMT_KEY_DELETE_PATH = '/v1/mgmt/managementkey/delete'
|
|
172
|
+
MGMT_KEY_SEARCH_PATH = '/v1/mgmt/managementkey/search'
|
|
173
|
+
|
|
174
|
+
# Analytics
|
|
175
|
+
ANALYTICS_SEARCH_PATH = '/v1/mgmt/analytics/search'
|
|
176
|
+
|
|
177
|
+
# Descoper
|
|
178
|
+
DESCOPER_CREATE_PATH = '/v1/mgmt/descoper'
|
|
179
|
+
DESCOPER_UPDATE_PATH = '/v1/mgmt/descoper'
|
|
180
|
+
DESCOPER_GET_PATH = '/v1/mgmt/descoper'
|
|
181
|
+
DESCOPER_DELETE_PATH = '/v1/mgmt/descoper'
|
|
182
|
+
DESCOPER_SEARCH_PATH = '/v1/mgmt/descoper/list'
|
|
183
|
+
|
|
184
|
+
# Engine
|
|
185
|
+
ENGINE_CREATE_PATH = '/v1/mgmt/engine/create'
|
|
186
|
+
ENGINE_UPDATE_PATH = '/v1/mgmt/engine/update'
|
|
187
|
+
ENGINE_DELETE_PATH = '/v1/mgmt/engine/delete'
|
|
188
|
+
ENGINE_LOAD_PATH = '/v1/mgmt/engine/load'
|
|
189
|
+
ENGINE_LOAD_ALL_PATH = '/v1/mgmt/engines/load'
|
|
190
|
+
ENGINE_ROTATE_SECRET_PATH = '/v1/mgmt/engine/rotate'
|
|
191
|
+
|
|
192
|
+
# List
|
|
193
|
+
LIST_CREATE_PATH = '/v1/mgmt/list'
|
|
194
|
+
LIST_UPDATE_PATH = '/v1/mgmt/list/update'
|
|
195
|
+
LIST_DELETE_PATH = '/v1/mgmt/list/delete'
|
|
196
|
+
LIST_LOAD_PATH = '/v1/mgmt/list'
|
|
197
|
+
LIST_LOAD_BY_NAME_PATH = '/v1/mgmt/list/name'
|
|
198
|
+
LIST_LOAD_ALL_PATH = '/v1/mgmt/list/all'
|
|
199
|
+
LIST_IMPORT_PATH = '/v1/mgmt/list/import'
|
|
200
|
+
LIST_ADD_IPS_PATH = '/v1/mgmt/list/ip/add'
|
|
201
|
+
LIST_REMOVE_IPS_PATH = '/v1/mgmt/list/ip/remove'
|
|
202
|
+
LIST_CHECK_IP_PATH = '/v1/mgmt/list/ip/check'
|
|
203
|
+
LIST_ADD_TEXTS_PATH = '/v1/mgmt/list/text/add'
|
|
204
|
+
LIST_REMOVE_TEXTS_PATH = '/v1/mgmt/list/text/remove'
|
|
205
|
+
LIST_CHECK_TEXT_PATH = '/v1/mgmt/list/text/check'
|
|
206
|
+
LIST_CLEAR_PATH = '/v1/mgmt/list/clear'
|
|
207
|
+
|
|
208
|
+
# JWT Template
|
|
209
|
+
JWT_TEMPLATE_CREATE_PATH = '/v1/mgmt/jwt/templates/create'
|
|
210
|
+
JWT_TEMPLATE_UPDATE_PATH = '/v1/mgmt/jwt/templates/update'
|
|
211
|
+
JWT_TEMPLATE_DELETE_PATH = '/v1/mgmt/jwt/templates/delete'
|
|
212
|
+
JWT_TEMPLATE_LIST_PATH = '/v1/mgmt/jwt/templates/list'
|
|
213
|
+
JWT_TEMPLATE_LOAD_PATH = '/v1/mgmt/jwt/templates/load'
|
|
214
|
+
|
|
215
|
+
# Scope Claim Mapping (project-wide OIDC scope-to-claim mapping)
|
|
216
|
+
SCOPE_CLAIM_MAPPING_GET_PATH = '/v1/mgmt/scopeClaimMapping/get'
|
|
217
|
+
SCOPE_CLAIM_MAPPING_SET_PATH = '/v1/mgmt/scopeClaimMapping/set'
|
|
218
|
+
SCOPE_CLAIM_MAPPING_DELETE_PATH = '/v1/mgmt/scopeClaimMapping/delete'
|
|
219
|
+
|
|
144
220
|
def associated_tenants_to_hash_array(associated_tenants = [])
|
|
145
221
|
# Represents a tenant association for a User or Access Key. The tenant_id is required to denote
|
|
146
222
|
# which tenant the user or access key belongs to. The role_names array is an optional list of
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Descope
|
|
4
|
+
module Api
|
|
5
|
+
module V1
|
|
6
|
+
module Management
|
|
7
|
+
# Management API calls for Descoper
|
|
8
|
+
module Descoper
|
|
9
|
+
include Descope::Api::V1::Management::Common
|
|
10
|
+
|
|
11
|
+
def create_descoper(descopers = nil)
|
|
12
|
+
# Create the given descopers.
|
|
13
|
+
# descopers (Array): the descopers to create.
|
|
14
|
+
mgmt_put(DESCOPER_CREATE_PATH, { descopers: descopers })
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def update_descoper(id: nil, attributes: nil, rbac: nil)
|
|
18
|
+
# Update the given descoper by id.
|
|
19
|
+
request_params = {
|
|
20
|
+
id: id,
|
|
21
|
+
attributes: attributes,
|
|
22
|
+
rbac: rbac
|
|
23
|
+
}
|
|
24
|
+
mgmt_patch(DESCOPER_UPDATE_PATH, request_params)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def get_descoper(id: nil)
|
|
28
|
+
# Get a descoper by id.
|
|
29
|
+
mgmt_get(DESCOPER_GET_PATH, { id: id })
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def delete_descoper(id: nil)
|
|
33
|
+
# Delete a descoper by id.
|
|
34
|
+
mgmt_delete(DESCOPER_DELETE_PATH, { id: id })
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def search_descopers
|
|
38
|
+
# Search (list) all descopers.
|
|
39
|
+
mgmt_post(DESCOPER_SEARCH_PATH, {})
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Descope
|
|
4
|
+
module Api
|
|
5
|
+
module V1
|
|
6
|
+
module Management
|
|
7
|
+
# Management API calls for Engine
|
|
8
|
+
module Engine
|
|
9
|
+
include Descope::Api::V1::Management::Common
|
|
10
|
+
|
|
11
|
+
def create_engine(name:)
|
|
12
|
+
# Create a new engine with the given name.
|
|
13
|
+
mgmt_post(ENGINE_CREATE_PATH, { name: })
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def update_engine(id:, name:)
|
|
17
|
+
# Update an existing engine with the given id and name.
|
|
18
|
+
mgmt_post(ENGINE_UPDATE_PATH, { id:, name: })
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def delete_engine(id:)
|
|
22
|
+
# Delete an existing engine. IMPORTANT: This action is irreversible. Use carefully.
|
|
23
|
+
mgmt_post(ENGINE_DELETE_PATH, { id: })
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def load_engine(id:)
|
|
27
|
+
# Load engine by id.
|
|
28
|
+
mgmt_get(ENGINE_LOAD_PATH, { id: })
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def load_all_engines
|
|
32
|
+
# Load all engines.
|
|
33
|
+
mgmt_get(ENGINE_LOAD_ALL_PATH)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def rotate_engine_secret(id:)
|
|
37
|
+
# Rotate the secret for the given engine.
|
|
38
|
+
mgmt_post(ENGINE_ROTATE_SECRET_PATH, { id: })
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Descope
|
|
4
|
+
module Api
|
|
5
|
+
module V1
|
|
6
|
+
module Management
|
|
7
|
+
# Management API calls for FGA (Fine-Grained Authorization)
|
|
8
|
+
module FGA
|
|
9
|
+
include Descope::Api::V1::Management::Common
|
|
10
|
+
|
|
11
|
+
def fga_save_schema(schema: nil)
|
|
12
|
+
# Create or update the FGA schema.
|
|
13
|
+
# schema (String): the schema DSL string.
|
|
14
|
+
mgmt_post(FGA_SAVE_SCHEMA_PATH, { dsl: schema })
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def fga_load_schema
|
|
18
|
+
# Load the FGA schema for the project.
|
|
19
|
+
mgmt_get(FGA_LOAD_SCHEMA_PATH)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def fga_create_relations(tuples: nil)
|
|
23
|
+
# Create the given relations (tuples) based on the existing schema.
|
|
24
|
+
mgmt_post(FGA_CREATE_RELATIONS_PATH, { tuples: })
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def fga_delete_relations(tuples: nil)
|
|
28
|
+
# Delete the given relations (tuples) based on the existing schema.
|
|
29
|
+
mgmt_post(FGA_DELETE_RELATIONS_PATH, { tuples: })
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def fga_check(tuples: nil)
|
|
33
|
+
# Check the given relations (tuples) to see if they are allowed.
|
|
34
|
+
mgmt_post(FGA_CHECK_PATH, { tuples: })
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def fga_load_mappable_schema(tenant_id: nil, options: nil)
|
|
38
|
+
# Load the mappable schema for the given tenant.
|
|
39
|
+
request_params = { tenantId: tenant_id }
|
|
40
|
+
request_params[:resourcesLimit] = options[:resourcesLimit] if options && options[:resourcesLimit]
|
|
41
|
+
mgmt_get(FGA_LOAD_MAPPABLE_SCHEMA_PATH, request_params)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def fga_search_mappable_resources(tenant_id: nil, resources_queries: nil, options: nil)
|
|
45
|
+
# Search for mappable resources for the given tenant.
|
|
46
|
+
request_params = { tenantId: tenant_id, resourcesQueries: resources_queries }
|
|
47
|
+
request_params[:resourcesLimit] = options[:resourcesLimit] if options && options[:resourcesLimit]
|
|
48
|
+
mgmt_post(FGA_SEARCH_MAPPABLE_RESOURCES_PATH, request_params)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def fga_load_resources_details(resource_identifiers: nil)
|
|
52
|
+
# Load the details of the given resource identifiers.
|
|
53
|
+
mgmt_post(FGA_RESOURCES_LOAD_PATH, { resourceIdentifiers: resource_identifiers })
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def fga_save_resources_details(resources_details: nil)
|
|
57
|
+
# Save the details of the given resources.
|
|
58
|
+
mgmt_post(FGA_RESOURCES_SAVE_PATH, { resourcesDetails: resources_details })
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -15,14 +15,14 @@ module Descope
|
|
|
15
15
|
# To search for a flow or several flows, send a body with the flowIds you want to search such as { "ids": ["sign-in"] } or { "ids": ["sign-in", "sign-up"] }.
|
|
16
16
|
def list_or_search_flows(ids = [])
|
|
17
17
|
request_params = { ids: }
|
|
18
|
-
|
|
18
|
+
mgmt_post(FLOW_LIST_PATH, request_params)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
# Export the given flow id flow and screens.
|
|
22
22
|
# @see https://docs.descope.com/api/openapi/flowmanagement/operation/ExportFlow/
|
|
23
23
|
def export_flow(flow_id = nil)
|
|
24
24
|
request_params = { flowId: flow_id }
|
|
25
|
-
|
|
25
|
+
mgmt_post(FLOW_EXPORT_PATH, request_params)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
# Import the given flow and screens.
|
|
@@ -33,20 +33,20 @@ module Descope
|
|
|
33
33
|
flow:,
|
|
34
34
|
screens:
|
|
35
35
|
}
|
|
36
|
-
|
|
36
|
+
mgmt_post(FLOW_IMPORT_PATH, request_params)
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
# Export the current project theme.
|
|
40
40
|
# @see https://docs.descope.com/api/openapi/flowmanagement/operation/ExportTheme/
|
|
41
41
|
def export_theme
|
|
42
|
-
|
|
42
|
+
mgmt_post(THEME_EXPORT_PATH)
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
# Import the current project theme.
|
|
46
46
|
# @see https://docs.descope.com/api/openapi/flowmanagement/operation/ImportTheme/
|
|
47
47
|
def import_theme(theme)
|
|
48
48
|
request_params = { theme: }
|
|
49
|
-
|
|
49
|
+
mgmt_post(THEME_IMPORT_PATH, request_params)
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Descope
|
|
4
|
+
module Api
|
|
5
|
+
module V1
|
|
6
|
+
module Management
|
|
7
|
+
# Management API calls for SSO groups querying
|
|
8
|
+
module Group
|
|
9
|
+
include Descope::Api::V1::Management::Common
|
|
10
|
+
|
|
11
|
+
def load_all_groups(tenant_id:)
|
|
12
|
+
# Load all groups for a given tenant id.
|
|
13
|
+
mgmt_post(GROUP_LOAD_ALL_PATH, { tenantId: tenant_id })
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def load_all_groups_for_members(tenant_id:, user_ids: nil, login_ids: nil)
|
|
17
|
+
# Load all groups for the given user's or login IDs (can be given either).
|
|
18
|
+
mgmt_post(
|
|
19
|
+
GROUP_LOAD_ALL_FOR_MEMBER_PATH,
|
|
20
|
+
{
|
|
21
|
+
tenantId: tenant_id,
|
|
22
|
+
loginIds: login_ids,
|
|
23
|
+
userIds: user_ids
|
|
24
|
+
}
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def load_all_group_members(tenant_id:, group_id:)
|
|
29
|
+
# Load all members of the given group id.
|
|
30
|
+
mgmt_post(
|
|
31
|
+
GROUP_LOAD_ALL_GROUP_MEMBERS_PATH,
|
|
32
|
+
{
|
|
33
|
+
tenantId: tenant_id,
|
|
34
|
+
groupId: group_id
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Descope
|
|
4
|
+
module Api
|
|
5
|
+
module V1
|
|
6
|
+
module Management
|
|
7
|
+
# Management API calls for JWT templates
|
|
8
|
+
module JWTTemplate
|
|
9
|
+
include Descope::Api::V1::Management::Common
|
|
10
|
+
|
|
11
|
+
def create_jwt_template(template: nil)
|
|
12
|
+
# Create a new JWT template.
|
|
13
|
+
# Args:
|
|
14
|
+
# template (dict): the JWT template dict with format
|
|
15
|
+
# {
|
|
16
|
+
# "name": "name-of-template",
|
|
17
|
+
# "description": "description of the template",
|
|
18
|
+
# "template": "the template body",
|
|
19
|
+
# "conformanceIssuer": True|False,
|
|
20
|
+
# "authSchema": "one of default|tenantOnly|none"
|
|
21
|
+
# }
|
|
22
|
+
mgmt_post(JWT_TEMPLATE_CREATE_PATH, { template: })
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def update_jwt_template(template: nil)
|
|
26
|
+
# Update an existing JWT template.
|
|
27
|
+
# The given template must include an "id" field.
|
|
28
|
+
mgmt_post(JWT_TEMPLATE_UPDATE_PATH, { template: })
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def delete_jwt_template(id: nil)
|
|
32
|
+
# Delete the JWT template with the given id.
|
|
33
|
+
mgmt_post(JWT_TEMPLATE_DELETE_PATH, { id: })
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def list_jwt_templates
|
|
37
|
+
# Load all JWT templates for the project.
|
|
38
|
+
mgmt_post(JWT_TEMPLATE_LIST_PATH, {})
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def load_jwt_template(id: nil)
|
|
42
|
+
# Load the JWT template with the given id.
|
|
43
|
+
mgmt_post(JWT_TEMPLATE_LOAD_PATH, { id: })
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Descope
|
|
4
|
+
module Api
|
|
5
|
+
module V1
|
|
6
|
+
module Management
|
|
7
|
+
# Management API calls for the deny/allow lists (of IPs and texts)
|
|
8
|
+
module Lists
|
|
9
|
+
include Descope::Api::V1::Management::Common
|
|
10
|
+
|
|
11
|
+
def create_list(name: nil, type: nil, description: nil, data: nil)
|
|
12
|
+
# Create a new list with the given name and type.
|
|
13
|
+
body = { name:, type: }
|
|
14
|
+
body[:description] = description unless description.nil?
|
|
15
|
+
body[:data] = data unless data.nil?
|
|
16
|
+
mgmt_post(LIST_CREATE_PATH, body)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def update_list(id: nil, name: nil, type: nil, description: nil, data: nil)
|
|
20
|
+
# Update an existing list. IMPORTANT: All parameters are used as overrides to the existing list.
|
|
21
|
+
body = { id:, name:, type: }
|
|
22
|
+
body[:description] = description unless description.nil?
|
|
23
|
+
body[:data] = data unless data.nil?
|
|
24
|
+
mgmt_post(LIST_UPDATE_PATH, body)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def delete_list(id: nil)
|
|
28
|
+
# Delete an existing list. IMPORTANT: This action is irreversible. Use carefully.
|
|
29
|
+
mgmt_post(LIST_DELETE_PATH, { id: })
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def load_list(id: nil)
|
|
33
|
+
# Load list by id.
|
|
34
|
+
mgmt_get("#{LIST_LOAD_PATH}/#{id}")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def load_list_by_name(name: nil)
|
|
38
|
+
# Load list by name.
|
|
39
|
+
mgmt_get("#{LIST_LOAD_BY_NAME_PATH}/#{name}")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def load_all_lists
|
|
43
|
+
# Load all lists.
|
|
44
|
+
mgmt_get(LIST_LOAD_ALL_PATH)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def import_lists(lists: nil)
|
|
48
|
+
# Import the given lists.
|
|
49
|
+
mgmt_post(LIST_IMPORT_PATH, { lists: })
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def list_add_ips(id: nil, ips: nil)
|
|
53
|
+
# Add the given IPs to the list with the given id.
|
|
54
|
+
mgmt_post(LIST_ADD_IPS_PATH, { id:, ips: })
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def list_remove_ips(id: nil, ips: nil)
|
|
58
|
+
# Remove the given IPs from the list with the given id.
|
|
59
|
+
mgmt_post(LIST_REMOVE_IPS_PATH, { id:, ips: })
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def list_check_ip(id: nil, ip: nil)
|
|
63
|
+
# Check whether the given IP exists in the list with the given id.
|
|
64
|
+
mgmt_post(LIST_CHECK_IP_PATH, { id:, ip: })
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def list_add_texts(id: nil, texts: nil)
|
|
68
|
+
# Add the given texts to the list with the given id.
|
|
69
|
+
mgmt_post(LIST_ADD_TEXTS_PATH, { id:, texts: })
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def list_remove_texts(id: nil, texts: nil)
|
|
73
|
+
# Remove the given texts from the list with the given id.
|
|
74
|
+
mgmt_post(LIST_REMOVE_TEXTS_PATH, { id:, texts: })
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def list_check_text(id: nil, text: nil)
|
|
78
|
+
# Check whether the given text exists in the list with the given id.
|
|
79
|
+
mgmt_post(LIST_CHECK_TEXT_PATH, { id:, text: })
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def list_check_texts(id: nil, texts: nil, match_all: false)
|
|
83
|
+
# Check whether the given texts exist in the list with the given id (up to 100 texts).
|
|
84
|
+
# By default it is enough for any of the texts to exist; set match_all to require all of them.
|
|
85
|
+
mgmt_post(LIST_CHECK_TEXT_PATH, { id:, texts:, matchAll: match_all })
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def clear_list(id: nil)
|
|
89
|
+
# Clear all entries from the list with the given id.
|
|
90
|
+
mgmt_post(LIST_CLEAR_PATH, { id: })
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Descope
|
|
4
|
+
module Api
|
|
5
|
+
module V1
|
|
6
|
+
module Management
|
|
7
|
+
# Management API calls for management keys
|
|
8
|
+
module ManagementKey
|
|
9
|
+
include Descope::Api::V1::Management::Common
|
|
10
|
+
|
|
11
|
+
def create_management_key(name:, description: nil, expires_in: 0, permitted_ips: nil, re_bac: nil)
|
|
12
|
+
# Create a new management key.
|
|
13
|
+
mgmt_put(MGMT_KEY_CREATE_PATH, {
|
|
14
|
+
name:,
|
|
15
|
+
description:,
|
|
16
|
+
expiresIn: expires_in,
|
|
17
|
+
permittedIps: permitted_ips,
|
|
18
|
+
reBac: re_bac
|
|
19
|
+
})
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def update_management_key(id:, name:, description: nil, permitted_ips: nil, status: nil)
|
|
23
|
+
# Update an existing management key.
|
|
24
|
+
mgmt_patch(MGMT_KEY_UPDATE_PATH, {
|
|
25
|
+
id:,
|
|
26
|
+
name:,
|
|
27
|
+
description:,
|
|
28
|
+
permittedIps: permitted_ips,
|
|
29
|
+
status:
|
|
30
|
+
})
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def get_management_key(id:)
|
|
34
|
+
# Load an existing management key.
|
|
35
|
+
mgmt_get(MGMT_KEY_GET_PATH, { id: })
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def delete_management_key(id:)
|
|
39
|
+
# Delete an existing management key.
|
|
40
|
+
mgmt_post(MGMT_KEY_DELETE_PATH, { ids: [id] })
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def search_management_keys(tenant_ids: nil, status: nil)
|
|
44
|
+
# Search all management keys.
|
|
45
|
+
mgmt_get(MGMT_KEY_SEARCH_PATH, {
|
|
46
|
+
tenantIds: tenant_ids,
|
|
47
|
+
status:
|
|
48
|
+
})
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|