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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yaml +51 -12
  3. data/.github/workflows/publish-gem.yaml +6 -33
  4. data/.github/workflows/release-please.yaml +36 -0
  5. data/.gitignore +3 -2
  6. data/.release-please-manifest.json +1 -1
  7. data/.rubocop.yml +1 -1
  8. data/.rubocop_todo.yml +1 -1
  9. data/.ruby-version +1 -1
  10. data/CHANGELOG.md +31 -0
  11. data/Gemfile +7 -6
  12. data/Gemfile.lock +46 -45
  13. data/README.md +244 -1
  14. data/examples/ruby-on-rails-api/descope/package-lock.json +16 -10
  15. data/examples/ruby-on-rails-api/descope/yarn.lock +3 -3
  16. data/lib/descope/api/v1/auth/enchantedlink.rb +76 -9
  17. data/lib/descope/api/v1/management/access_key.rb +8 -7
  18. data/lib/descope/api/v1/management/analytics.rb +62 -0
  19. data/lib/descope/api/v1/management/audit.rb +2 -2
  20. data/lib/descope/api/v1/management/authz.rb +15 -15
  21. data/lib/descope/api/v1/management/common.rb +76 -0
  22. data/lib/descope/api/v1/management/descoper.rb +45 -0
  23. data/lib/descope/api/v1/management/engine.rb +44 -0
  24. data/lib/descope/api/v1/management/fga.rb +64 -0
  25. data/lib/descope/api/v1/management/flow.rb +5 -5
  26. data/lib/descope/api/v1/management/group.rb +42 -0
  27. data/lib/descope/api/v1/management/jwt_template.rb +49 -0
  28. data/lib/descope/api/v1/management/lists.rb +96 -0
  29. data/lib/descope/api/v1/management/management_key.rb +54 -0
  30. data/lib/descope/api/v1/management/outbound_app.rb +112 -0
  31. data/lib/descope/api/v1/management/password.rb +2 -2
  32. data/lib/descope/api/v1/management/permission.rb +4 -4
  33. data/lib/descope/api/v1/management/project.rb +5 -5
  34. data/lib/descope/api/v1/management/role.rb +5 -5
  35. data/lib/descope/api/v1/management/scim.rb +14 -14
  36. data/lib/descope/api/v1/management/scope_claim_mapping.rb +34 -0
  37. data/lib/descope/api/v1/management/sso_application.rb +7 -7
  38. data/lib/descope/api/v1/management/sso_settings.rb +5 -5
  39. data/lib/descope/api/v1/management/tenant.rb +8 -6
  40. data/lib/descope/api/v1/management/third_party_application.rb +190 -0
  41. data/lib/descope/api/v1/management/user.rb +36 -36
  42. data/lib/descope/api/v1/management.rb +22 -0
  43. data/lib/descope/http_client.rb +30 -0
  44. data/lib/descope/mixins/common.rb +1 -0
  45. data/lib/descope/mixins/http.rb +25 -18
  46. data/lib/descope/mixins/initializer.rb +23 -11
  47. data/lib/descope/mixins/requests.rb +24 -0
  48. data/lib/descope/mixins.rb +2 -1
  49. data/lib/descope/version.rb +1 -1
  50. data/spec/integration/lib.descope/api/v1/auth/enchantedlink_spec.rb +19 -21
  51. data/spec/integration/lib.descope/api/v1/auth/magiclink_spec.rb +5 -1
  52. data/spec/integration/lib.descope/api/v1/auth/otp_spec.rb +5 -1
  53. data/spec/integration/lib.descope/api/v1/auth/session_spec.rb +24 -5
  54. data/spec/integration/lib.descope/api/v1/auth/totp_spec.rb +5 -1
  55. data/spec/integration/lib.descope/api/v1/management/access_key_spec.rb +10 -2
  56. data/spec/integration/lib.descope/api/v1/management/authz_spec.rb +26 -5
  57. data/spec/integration/lib.descope/api/v1/management/permissions_spec.rb +20 -2
  58. data/spec/integration/lib.descope/api/v1/management/project_spec.rb +16 -2
  59. data/spec/integration/lib.descope/api/v1/management/roles_spec.rb +114 -36
  60. data/spec/integration/lib.descope/api/v1/management/user_spec.rb +21 -4
  61. data/spec/lib.descope/api/v1/auth/enchantedlink_spec.rb +163 -1
  62. data/spec/lib.descope/api/v1/management/access_key_spec.rb +7 -7
  63. data/spec/lib.descope/api/v1/management/analytics_spec.rb +82 -0
  64. data/spec/lib.descope/api/v1/management/audit_spec.rb +2 -2
  65. data/spec/lib.descope/api/v1/management/authz_spec.rb +16 -16
  66. data/spec/lib.descope/api/v1/management/descoper_spec.rb +101 -0
  67. data/spec/lib.descope/api/v1/management/engine_spec.rb +115 -0
  68. data/spec/lib.descope/api/v1/management/fga_spec.rb +169 -0
  69. data/spec/lib.descope/api/v1/management/flow_spec.rb +5 -5
  70. data/spec/lib.descope/api/v1/management/group_spec.rb +72 -0
  71. data/spec/lib.descope/api/v1/management/jwt_template_spec.rb +103 -0
  72. data/spec/lib.descope/api/v1/management/lists_spec.rb +285 -0
  73. data/spec/lib.descope/api/v1/management/management_key_spec.rb +109 -0
  74. data/spec/lib.descope/api/v1/management/outbound_app_spec.rb +236 -0
  75. data/spec/lib.descope/api/v1/management/password_spec.rb +2 -2
  76. data/spec/lib.descope/api/v1/management/permission_spec.rb +4 -4
  77. data/spec/lib.descope/api/v1/management/project_spec.rb +4 -4
  78. data/spec/lib.descope/api/v1/management/role_spec.rb +5 -5
  79. data/spec/lib.descope/api/v1/management/scim_spec.rb +14 -14
  80. data/spec/lib.descope/api/v1/management/scope_claim_mapping_spec.rb +59 -0
  81. data/spec/lib.descope/api/v1/management/sso_application_spec.rb +6 -6
  82. data/spec/lib.descope/api/v1/management/sso_settings_spec.rb +5 -5
  83. data/spec/lib.descope/api/v1/management/tenant_spec.rb +6 -6
  84. data/spec/lib.descope/api/v1/management/third_party_application_spec.rb +171 -0
  85. data/spec/lib.descope/api/v1/management/user_spec.rb +36 -36
  86. data/spec/lib.descope/auth_management_key_spec.rb +151 -0
  87. data/spec/lib.descope/mixins/http_spec.rb +17 -6
  88. data/spec/support/client_config.rb +1 -0
  89. data/spec/support/dummy_class.rb +12 -9
  90. data/spec/support/utils.rb +15 -0
  91. 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 = post(AUDIT_SEARCH, request_params)
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
- post(AUDIT_CREATE_EVENT, request_params)
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
- post(AUTHZ_SCHEMA_SAVE, request_params)
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
- post(AUTHZ_SCHEMA_DELETE)
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
- post(AUTHZ_SCHEMA_LOAD)
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
- post(AUTHZ_NS_SAVE, request_params)
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
- post(AUTHZ_NS_DELETE, request_params)
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
- post(AUTHZ_RD_SAVE, request_params)
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
- post(AUTHZ_RD_DELETE, request_params)
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
- post(AUTHZ_RE_CREATE, { relations: })
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
- post(AUTHZ_RE_DELETE, { relations: })
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
- post(AUTHZ_RE_DELETE_RESOURCES, { resources: })
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
- post(AUTHZ_RE_HAS_RELATIONS, { relationQueries: relation_queries })
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
- post(AUTHZ_RE_WHO, request_params)
142
+ mgmt_post(AUTHZ_RE_WHO, request_params)
143
143
  end
144
144
 
145
145
  def authz_resource_relations(resources: nil)
146
- post(AUTHZ_RE_RESOURCE, { resources: })
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
- post(AUTHZ_RE_TARGETS, { targets: })
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 = post(AUTHZ_RE_TARGET_ALL, { target: })
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
- post(FLOW_LIST_PATH, request_params)
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
- post(FLOW_EXPORT_PATH, request_params)
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
- post(FLOW_IMPORT_PATH, request_params)
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
- post(THEME_EXPORT_PATH)
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
- post(THEME_IMPORT_PATH, request_params)
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