descope 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yaml +54 -0
  3. data/.gitignore +59 -0
  4. data/.release-please-manifest.json +3 -0
  5. data/.rubocop.yml +10 -0
  6. data/.rubocop_todo.yml +10 -0
  7. data/.ruby-version +1 -0
  8. data/CHANGELOG.md +90 -0
  9. data/Gemfile +22 -0
  10. data/Gemfile.lock +204 -0
  11. data/LICENSE +21 -0
  12. data/README.md +1171 -0
  13. data/Rakefile +31 -0
  14. data/descope.gemspec +34 -0
  15. data/examples/ruby/Gemfile +4 -0
  16. data/examples/ruby/Gemfile.lock +41 -0
  17. data/examples/ruby/access_key_app.rb +45 -0
  18. data/examples/ruby/enchantedlink_app.rb +65 -0
  19. data/examples/ruby/magiclink_app.rb +81 -0
  20. data/examples/ruby/management/Gemfile +5 -0
  21. data/examples/ruby/management/Gemfile.lock +38 -0
  22. data/examples/ruby/management/access_key_app.rb +71 -0
  23. data/examples/ruby/management/audit_app.rb +25 -0
  24. data/examples/ruby/management/authz_app.rb +135 -0
  25. data/examples/ruby/management/authz_files.json +229 -0
  26. data/examples/ruby/management/flow_app.rb +57 -0
  27. data/examples/ruby/management/permission_app.rb +56 -0
  28. data/examples/ruby/management/role_app.rb +58 -0
  29. data/examples/ruby/management/tenant_app.rb +60 -0
  30. data/examples/ruby/management/user_app.rb +60 -0
  31. data/examples/ruby/oauth_app.rb +39 -0
  32. data/examples/ruby/otp_app.rb +50 -0
  33. data/examples/ruby/password_app.rb +76 -0
  34. data/examples/ruby/saml_app.rb +38 -0
  35. data/examples/ruby-on-rails-api/descope/.dockerignore +37 -0
  36. data/examples/ruby-on-rails-api/descope/.gitattributes +9 -0
  37. data/examples/ruby-on-rails-api/descope/.gitignore +40 -0
  38. data/examples/ruby-on-rails-api/descope/.node-version +1 -0
  39. data/examples/ruby-on-rails-api/descope/.ruby-version +1 -0
  40. data/examples/ruby-on-rails-api/descope/Dockerfile +75 -0
  41. data/examples/ruby-on-rails-api/descope/Gemfile +67 -0
  42. data/examples/ruby-on-rails-api/descope/Gemfile.lock +284 -0
  43. data/examples/ruby-on-rails-api/descope/Procfile.dev +3 -0
  44. data/examples/ruby-on-rails-api/descope/README.md +54 -0
  45. data/examples/ruby-on-rails-api/descope/Rakefile +6 -0
  46. data/examples/ruby-on-rails-api/descope/app/assets/builds/.keep +0 -0
  47. data/examples/ruby-on-rails-api/descope/app/assets/config/manifest.js +3 -0
  48. data/examples/ruby-on-rails-api/descope/app/assets/images/.keep +0 -0
  49. data/examples/ruby-on-rails-api/descope/app/assets/images/descope.jpeg +0 -0
  50. data/examples/ruby-on-rails-api/descope/app/assets/images/favicon.ico +0 -0
  51. data/examples/ruby-on-rails-api/descope/app/assets/images/logo192.png +0 -0
  52. data/examples/ruby-on-rails-api/descope/app/assets/images/logo512.png +0 -0
  53. data/examples/ruby-on-rails-api/descope/app/assets/stylesheets/application.bootstrap.scss +67 -0
  54. data/examples/ruby-on-rails-api/descope/app/channels/application_cable/channel.rb +4 -0
  55. data/examples/ruby-on-rails-api/descope/app/channels/application_cable/connection.rb +4 -0
  56. data/examples/ruby-on-rails-api/descope/app/controllers/application_controller.rb +2 -0
  57. data/examples/ruby-on-rails-api/descope/app/controllers/concerns/.keep +0 -0
  58. data/examples/ruby-on-rails-api/descope/app/controllers/homepage_controller.rb +4 -0
  59. data/examples/ruby-on-rails-api/descope/app/controllers/session_controller.rb +66 -0
  60. data/examples/ruby-on-rails-api/descope/app/helpers/application_helper.rb +2 -0
  61. data/examples/ruby-on-rails-api/descope/app/helpers/homepage_helper.rb +2 -0
  62. data/examples/ruby-on-rails-api/descope/app/helpers/session_helper.rb +2 -0
  63. data/examples/ruby-on-rails-api/descope/app/javascript/App.css +53 -0
  64. data/examples/ruby-on-rails-api/descope/app/javascript/application.js +5 -0
  65. data/examples/ruby-on-rails-api/descope/app/javascript/components/App.jsx +4 -0
  66. data/examples/ruby-on-rails-api/descope/app/javascript/components/Dashboard.jsx +60 -0
  67. data/examples/ruby-on-rails-api/descope/app/javascript/components/Home.jsx +27 -0
  68. data/examples/ruby-on-rails-api/descope/app/javascript/components/Login.jsx +45 -0
  69. data/examples/ruby-on-rails-api/descope/app/javascript/components/Profile.jsx +81 -0
  70. data/examples/ruby-on-rails-api/descope/app/javascript/components/index.html +11 -0
  71. data/examples/ruby-on-rails-api/descope/app/javascript/components/index.jsx +24 -0
  72. data/examples/ruby-on-rails-api/descope/app/javascript/controllers/application.js +9 -0
  73. data/examples/ruby-on-rails-api/descope/app/javascript/controllers/index.js +5 -0
  74. data/examples/ruby-on-rails-api/descope/app/javascript/reportWebVitals.js +13 -0
  75. data/examples/ruby-on-rails-api/descope/app/javascript/routes/index.jsx +17 -0
  76. data/examples/ruby-on-rails-api/descope/app/jobs/application_job.rb +7 -0
  77. data/examples/ruby-on-rails-api/descope/app/mailers/application_mailer.rb +4 -0
  78. data/examples/ruby-on-rails-api/descope/app/models/application_record.rb +3 -0
  79. data/examples/ruby-on-rails-api/descope/app/models/concerns/.keep +0 -0
  80. data/examples/ruby-on-rails-api/descope/app/views/homepage/index.html.erb +2 -0
  81. data/examples/ruby-on-rails-api/descope/app/views/layouts/application.html.erb +16 -0
  82. data/examples/ruby-on-rails-api/descope/app/views/layouts/mailer.html.erb +13 -0
  83. data/examples/ruby-on-rails-api/descope/app/views/layouts/mailer.text.erb +1 -0
  84. data/examples/ruby-on-rails-api/descope/app/views/session/index.html.erb +2 -0
  85. data/examples/ruby-on-rails-api/descope/bin/bundle +109 -0
  86. data/examples/ruby-on-rails-api/descope/bin/dev +11 -0
  87. data/examples/ruby-on-rails-api/descope/bin/docker-entrypoint +8 -0
  88. data/examples/ruby-on-rails-api/descope/bin/rails +4 -0
  89. data/examples/ruby-on-rails-api/descope/bin/rake +4 -0
  90. data/examples/ruby-on-rails-api/descope/bin/setup +36 -0
  91. data/examples/ruby-on-rails-api/descope/build.js +30 -0
  92. data/examples/ruby-on-rails-api/descope/config/application.rb +42 -0
  93. data/examples/ruby-on-rails-api/descope/config/boot.rb +4 -0
  94. data/examples/ruby-on-rails-api/descope/config/cable.yml +10 -0
  95. data/examples/ruby-on-rails-api/descope/config/config.yml +9 -0
  96. data/examples/ruby-on-rails-api/descope/config/credentials.yml.enc +1 -0
  97. data/examples/ruby-on-rails-api/descope/config/database.yml +25 -0
  98. data/examples/ruby-on-rails-api/descope/config/environment.rb +5 -0
  99. data/examples/ruby-on-rails-api/descope/config/environments/development.rb +76 -0
  100. data/examples/ruby-on-rails-api/descope/config/environments/production.rb +97 -0
  101. data/examples/ruby-on-rails-api/descope/config/environments/test.rb +64 -0
  102. data/examples/ruby-on-rails-api/descope/config/initializers/assets.rb +13 -0
  103. data/examples/ruby-on-rails-api/descope/config/initializers/content_security_policy.rb +25 -0
  104. data/examples/ruby-on-rails-api/descope/config/initializers/filter_parameter_logging.rb +8 -0
  105. data/examples/ruby-on-rails-api/descope/config/initializers/inflections.rb +16 -0
  106. data/examples/ruby-on-rails-api/descope/config/initializers/load_config.rb +12 -0
  107. data/examples/ruby-on-rails-api/descope/config/initializers/permissions_policy.rb +13 -0
  108. data/examples/ruby-on-rails-api/descope/config/locales/en.yml +31 -0
  109. data/examples/ruby-on-rails-api/descope/config/puma.rb +35 -0
  110. data/examples/ruby-on-rails-api/descope/config/routes.rb +18 -0
  111. data/examples/ruby-on-rails-api/descope/config/storage.yml +34 -0
  112. data/examples/ruby-on-rails-api/descope/config.ru +6 -0
  113. data/examples/ruby-on-rails-api/descope/db/seeds.rb +9 -0
  114. data/examples/ruby-on-rails-api/descope/lib/assets/.keep +0 -0
  115. data/examples/ruby-on-rails-api/descope/lib/tasks/.keep +0 -0
  116. data/examples/ruby-on-rails-api/descope/log/.keep +0 -0
  117. data/examples/ruby-on-rails-api/descope/package-lock.json +19680 -0
  118. data/examples/ruby-on-rails-api/descope/package.json +51 -0
  119. data/examples/ruby-on-rails-api/descope/public/404.html +67 -0
  120. data/examples/ruby-on-rails-api/descope/public/422.html +67 -0
  121. data/examples/ruby-on-rails-api/descope/public/500.html +66 -0
  122. data/examples/ruby-on-rails-api/descope/public/apple-touch-icon-precomposed.png +0 -0
  123. data/examples/ruby-on-rails-api/descope/public/apple-touch-icon.png +0 -0
  124. data/examples/ruby-on-rails-api/descope/public/favicon.ico +0 -0
  125. data/examples/ruby-on-rails-api/descope/public/robots.txt +1 -0
  126. data/examples/ruby-on-rails-api/descope/storage/.keep +0 -0
  127. data/examples/ruby-on-rails-api/descope/tmp/.keep +0 -0
  128. data/examples/ruby-on-rails-api/descope/tmp/pids/.keep +0 -0
  129. data/examples/ruby-on-rails-api/descope/tmp/storage/.keep +0 -0
  130. data/examples/ruby-on-rails-api/descope/vendor/.keep +0 -0
  131. data/examples/ruby-on-rails-api/descope/yarn.lock +10780 -0
  132. data/lib/descope/api/v1/auth/enchantedlink.rb +156 -0
  133. data/lib/descope/api/v1/auth/magiclink.rb +170 -0
  134. data/lib/descope/api/v1/auth/oauth.rb +72 -0
  135. data/lib/descope/api/v1/auth/otp.rb +186 -0
  136. data/lib/descope/api/v1/auth/password.rb +100 -0
  137. data/lib/descope/api/v1/auth/saml.rb +48 -0
  138. data/lib/descope/api/v1/auth/totp.rb +72 -0
  139. data/lib/descope/api/v1/auth.rb +452 -0
  140. data/lib/descope/api/v1/management/access_key.rb +81 -0
  141. data/lib/descope/api/v1/management/audit.rb +82 -0
  142. data/lib/descope/api/v1/management/authz.rb +165 -0
  143. data/lib/descope/api/v1/management/common.rb +147 -0
  144. data/lib/descope/api/v1/management/flow.rb +55 -0
  145. data/lib/descope/api/v1/management/password.rb +58 -0
  146. data/lib/descope/api/v1/management/permission.rb +48 -0
  147. data/lib/descope/api/v1/management/project.rb +53 -0
  148. data/lib/descope/api/v1/management/role.rb +48 -0
  149. data/lib/descope/api/v1/management/scim.rb +206 -0
  150. data/lib/descope/api/v1/management/sso_settings.rb +153 -0
  151. data/lib/descope/api/v1/management/tenant.rb +71 -0
  152. data/lib/descope/api/v1/management/user.rb +619 -0
  153. data/lib/descope/api/v1/management.rb +38 -0
  154. data/lib/descope/api/v1/session.rb +84 -0
  155. data/lib/descope/api/v1.rb +13 -0
  156. data/lib/descope/client.rb +6 -0
  157. data/lib/descope/exception.rb +50 -0
  158. data/lib/descope/mixins/common.rb +129 -0
  159. data/lib/descope/mixins/headers.rb +15 -0
  160. data/lib/descope/mixins/http.rb +133 -0
  161. data/lib/descope/mixins/initializer.rb +80 -0
  162. data/lib/descope/mixins/logging.rb +30 -0
  163. data/lib/descope/mixins/validation.rb +79 -0
  164. data/lib/descope/mixins.rb +22 -0
  165. data/lib/descope/version.rb +7 -0
  166. data/lib/descope.rb +9 -0
  167. data/lib/descope_client.rb +5 -0
  168. data/release-please-config.json +18 -0
  169. data/renovate.json +6 -0
  170. data/spec/factories/user.rb +16 -0
  171. data/spec/lib.descope/api/v1/auth/enchantedlink_spec.rb +159 -0
  172. data/spec/lib.descope/api/v1/auth/magiclink_spec.rb +282 -0
  173. data/spec/lib.descope/api/v1/auth/oauth_spec.rb +117 -0
  174. data/spec/lib.descope/api/v1/auth/otp_spec.rb +285 -0
  175. data/spec/lib.descope/api/v1/auth/password_spec.rb +124 -0
  176. data/spec/lib.descope/api/v1/auth/saml_spec.rb +55 -0
  177. data/spec/lib.descope/api/v1/auth/totp_spec.rb +70 -0
  178. data/spec/lib.descope/api/v1/auth_spec.rb +372 -0
  179. data/spec/lib.descope/api/v1/management/access_key_spec.rb +118 -0
  180. data/spec/lib.descope/api/v1/management/audit_spec.rb +78 -0
  181. data/spec/lib.descope/api/v1/management/authz_spec.rb +336 -0
  182. data/spec/lib.descope/api/v1/management/flow_spec.rb +78 -0
  183. data/spec/lib.descope/api/v1/management/password_spec.rb +25 -0
  184. data/spec/lib.descope/api/v1/management/permission_spec.rb +81 -0
  185. data/spec/lib.descope/api/v1/management/project_spec.rb +63 -0
  186. data/spec/lib.descope/api/v1/management/role_spec.rb +85 -0
  187. data/spec/lib.descope/api/v1/management/scim_spec.rb +312 -0
  188. data/spec/lib.descope/api/v1/management/sso_settings_spec.rb +172 -0
  189. data/spec/lib.descope/api/v1/management/tenant_spec.rb +141 -0
  190. data/spec/lib.descope/api/v1/management/user_spec.rb +667 -0
  191. data/spec/lib.descope/api/v1/session_spec.rb +117 -0
  192. data/spec/lib.descope/client_spec.rb +40 -0
  193. data/spec/spec_helper.rb +72 -0
  194. data/spec/support/client_config.rb +14 -0
  195. data/spec/support/dummy_class.rb +36 -0
  196. data/spec/support/utils.rb +32 -0
  197. metadata +420 -0
@@ -0,0 +1,229 @@
1
+ {
2
+ "name": "Files",
3
+ "namespaces": [
4
+ {
5
+ "name": "org",
6
+ "relationDefinitions": [
7
+ {
8
+ "name": "parent"
9
+ },
10
+ {
11
+ "name": "member",
12
+ "complexDefinition": {
13
+ "nType": "union",
14
+ "children": [
15
+ {
16
+ "nType": "child",
17
+ "expression": {
18
+ "neType": "self"
19
+ }
20
+ },
21
+ {
22
+ "nType": "child",
23
+ "expression": {
24
+ "neType": "relationLeft",
25
+ "relationDefinition": "parent",
26
+ "relationDefinitionNamespace": "org",
27
+ "targetRelationDefinition": "member",
28
+ "targetRelationDefinitionNamespace": "org"
29
+ }
30
+ }
31
+ ]
32
+ }
33
+ }
34
+ ]
35
+ },
36
+ {
37
+ "name": "folder",
38
+ "relationDefinitions": [
39
+ {
40
+ "name": "parent"
41
+ },
42
+ {
43
+ "name": "owner",
44
+ "complexDefinition": {
45
+ "nType": "union",
46
+ "children": [
47
+ {
48
+ "nType": "child",
49
+ "expression": {
50
+ "neType": "self"
51
+ }
52
+ },
53
+ {
54
+ "nType": "child",
55
+ "expression": {
56
+ "neType": "relationRight",
57
+ "relationDefinition": "parent",
58
+ "relationDefinitionNamespace": "folder",
59
+ "targetRelationDefinition": "owner",
60
+ "targetRelationDefinitionNamespace": "folder"
61
+ }
62
+ }
63
+ ]
64
+ }
65
+ },
66
+ {
67
+ "name": "editor",
68
+ "complexDefinition": {
69
+ "nType": "union",
70
+ "children": [
71
+ {
72
+ "nType": "child",
73
+ "expression": {
74
+ "neType": "self"
75
+ }
76
+ },
77
+ {
78
+ "nType": "child",
79
+ "expression": {
80
+ "neType": "relationRight",
81
+ "relationDefinition": "parent",
82
+ "relationDefinitionNamespace": "folder",
83
+ "targetRelationDefinition": "editor",
84
+ "targetRelationDefinitionNamespace": "folder"
85
+ }
86
+ },
87
+ {
88
+ "nType": "child",
89
+ "expression": {
90
+ "neType": "targetSet",
91
+ "targetRelationDefinition": "owner",
92
+ "targetRelationDefinitionNamespace": "folder"
93
+ }
94
+ }
95
+ ]
96
+ }
97
+ },
98
+ {
99
+ "name": "viewer",
100
+ "complexDefinition": {
101
+ "nType": "union",
102
+ "children": [
103
+ {
104
+ "nType": "child",
105
+ "expression": {
106
+ "neType": "self"
107
+ }
108
+ },
109
+ {
110
+ "nType": "child",
111
+ "expression": {
112
+ "neType": "relationRight",
113
+ "relationDefinition": "parent",
114
+ "relationDefinitionNamespace": "folder",
115
+ "targetRelationDefinition": "viewer",
116
+ "targetRelationDefinitionNamespace": "folder"
117
+ }
118
+ },
119
+ {
120
+ "nType": "child",
121
+ "expression": {
122
+ "neType": "targetSet",
123
+ "targetRelationDefinition": "editor",
124
+ "targetRelationDefinitionNamespace": "folder"
125
+ }
126
+ }
127
+ ]
128
+ }
129
+ }
130
+ ]
131
+ },
132
+ {
133
+ "name": "doc",
134
+ "relationDefinitions": [
135
+ {
136
+ "name": "parent"
137
+ },
138
+ {
139
+ "name": "owner",
140
+ "complexDefinition": {
141
+ "nType": "union",
142
+ "children": [
143
+ {
144
+ "nType": "child",
145
+ "expression": {
146
+ "neType": "self"
147
+ }
148
+ },
149
+ {
150
+ "nType": "child",
151
+ "expression": {
152
+ "neType": "relationRight",
153
+ "relationDefinition": "parent",
154
+ "relationDefinitionNamespace": "doc",
155
+ "targetRelationDefinition": "owner",
156
+ "targetRelationDefinitionNamespace": "folder"
157
+ }
158
+ }
159
+ ]
160
+ }
161
+ },
162
+ {
163
+ "name": "editor",
164
+ "complexDefinition": {
165
+ "nType": "union",
166
+ "children": [
167
+ {
168
+ "nType": "child",
169
+ "expression": {
170
+ "neType": "self"
171
+ }
172
+ },
173
+ {
174
+ "nType": "child",
175
+ "expression": {
176
+ "neType": "relationRight",
177
+ "relationDefinition": "parent",
178
+ "relationDefinitionNamespace": "doc",
179
+ "targetRelationDefinition": "editor",
180
+ "targetRelationDefinitionNamespace": "folder"
181
+ }
182
+ },
183
+ {
184
+ "nType": "child",
185
+ "expression": {
186
+ "neType": "targetSet",
187
+ "targetRelationDefinition": "owner",
188
+ "targetRelationDefinitionNamespace": "doc"
189
+ }
190
+ }
191
+ ]
192
+ }
193
+ },
194
+ {
195
+ "name": "viewer",
196
+ "complexDefinition": {
197
+ "nType": "union",
198
+ "children": [
199
+ {
200
+ "nType": "child",
201
+ "expression": {
202
+ "neType": "self"
203
+ }
204
+ },
205
+ {
206
+ "nType": "child",
207
+ "expression": {
208
+ "neType": "relationRight",
209
+ "relationDefinition": "parent",
210
+ "relationDefinitionNamespace": "doc",
211
+ "targetRelationDefinition": "viewer",
212
+ "targetRelationDefinitionNamespace": "folder"
213
+ }
214
+ },
215
+ {
216
+ "nType": "child",
217
+ "expression": {
218
+ "neType": "targetSet",
219
+ "targetRelationDefinition": "editor",
220
+ "targetRelationDefinitionNamespace": "doc"
221
+ }
222
+ }
223
+ ]
224
+ }
225
+ }
226
+ ]
227
+ }
228
+ ]
229
+ }
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'descope'
5
+
6
+ @logger = Logger.new($stdout)
7
+
8
+ @project_id = ENV['DESCOPE_PROJECT_ID']
9
+ @management_key = ENV['DESCOPE_MANAGEMENT_KEY']
10
+
11
+ @logger.info("Initializing Descope API with project_id: #{@project_id} and base_uri: #{@base_uri}")
12
+
13
+ @client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
14
+
15
+ begin
16
+ name = 'sign-up-or-in'
17
+
18
+ begin
19
+ @logger.info("Going to export 'sign-up-or-in' flow")
20
+ @res = @client.export_flow(name)
21
+
22
+ rescue Descope::AuthException => e
23
+ @logger.error("Export flow failed #{e}")
24
+ end
25
+
26
+ begin
27
+ @logger.info('Importing sign-up-or-in flow and change name')
28
+ @res['flow']['name'] = 'Importing from SDK'
29
+ @client.import_flow(
30
+ flow_id: 'sign-up-or-in',
31
+ flow: @res['flow'],
32
+ screens: @res['screens']
33
+ )
34
+ rescue Descope::AuthException => e
35
+ @logger.info("Importing flow failed #{e}")
36
+ end
37
+
38
+ begin
39
+ @logger.info('Going to export the project theme')
40
+ @res = @client.export_theme
41
+ @logger.info("Export theme success: #{@res}")
42
+
43
+ rescue Descope::AuthException => e
44
+ @logger.info("Export theme failed #{e}")
45
+ end
46
+
47
+ begin
48
+ @logger.info('Importing theme back')
49
+ @client.import_theme(@res)
50
+ @logger.info('Importing theme success')
51
+ rescue Descope::AuthException => e
52
+ @logger.error("Importing theme failed #{e}")
53
+ end
54
+
55
+ rescue Descope::AuthException
56
+ raise
57
+ end
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'descope'
5
+
6
+ @logger = Logger.new($stdout)
7
+
8
+ @project_id = ENV['DESCOPE_PROJECT_ID']
9
+ @management_key = ENV['DESCOPE_MANAGEMENT_KEY']
10
+
11
+ @logger.info("Initializing Descope API with project_id: #{@project_id} and base_uri: #{@base_uri}")
12
+
13
+ @client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
14
+
15
+ begin
16
+ @logger.info('Going to create a new permission')
17
+ name = 'My Permission'
18
+ @client.create_permission(name:, description: 'Allowed to test')
19
+
20
+ rescue Descope::AuthException => e
21
+ @logger.info("Permission creation failed #{e}")
22
+ end
23
+
24
+ begin
25
+ @logger.info('Loading all permissions')
26
+ permissions_resp = @client.load_all_permissions
27
+ permissions = permissions_resp['permissions']
28
+ permissions.each do |permission|
29
+ @logger.info("Search Found permission #{permission}")
30
+ end
31
+
32
+ rescue Descope::AuthException => e
33
+ @logger.error("Permission load failed #{e}")
34
+ end
35
+
36
+ begin
37
+ @logger.info('Updating newly created permission')
38
+ # update overrides all fields, must provide the entire entity
39
+ # we mean to update.
40
+ name = 'My Permission'
41
+ @client.update_permission(
42
+ name:, new_name: 'My Updated Permission', description: 'New Description'
43
+ )
44
+
45
+ rescue Descope::AuthException => e
46
+ @logger.error("Permission update failed #{e}")
47
+ end
48
+
49
+ begin
50
+ @logger.info('Deleting newly created permission')
51
+ @client.delete_permission('My Updated Permission')
52
+
53
+ rescue Descope::AuthException => e
54
+ @logger.error("Permission deletion failed #{e}")
55
+ end
56
+
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'descope'
5
+
6
+ @logger = Logger.new($stdout)
7
+
8
+ @project_id = ENV['DESCOPE_PROJECT_ID']
9
+ @management_key = ENV['DESCOPE_MANAGEMENT_KEY']
10
+
11
+ @logger.info("Initializing Descope API with project_id: #{@project_id} and base_uri: #{@base_uri}")
12
+
13
+ @client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
14
+
15
+ name = 'My Role'
16
+
17
+ begin
18
+ @logger.info('Going to create a new role')
19
+ @client.create_role(
20
+ name:, description: 'Allowed to test :)', permission_names: ['SSO Admin']
21
+ )
22
+ rescue Descope::AuthException => e
23
+ @logger.info("Role creation failed #{e}")
24
+ end
25
+
26
+ begin
27
+ @logger.info('Loading all roles')
28
+ roles_resp = @client.load_all_roles
29
+ roles = roles_resp['roles']
30
+ roles.each do |role|
31
+ @logger.info("Search Found role #{role}")
32
+ end
33
+
34
+ rescue Descope::AuthException => e
35
+ @logger.error("Role load failed #{e}")
36
+ end
37
+
38
+ begin
39
+ @logger.info('Updating newly created role')
40
+ @client.update_role(
41
+ name:,
42
+ new_name: 'My Updated Role',
43
+ description: 'New Description',
44
+ permission_names: ['User Admin']
45
+ )
46
+
47
+ rescue Descope::AuthException => e
48
+ @logger.error("Role update failed #{e}")
49
+ end
50
+
51
+ begin
52
+ @logger.info('Deleting newly created role')
53
+ @client.delete_role('My Updated Role')
54
+
55
+ rescue Descope::AuthException => e
56
+ @logger.error("Role deletion failed #{e}")
57
+ end
58
+
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'descope'
5
+
6
+ @logger = Logger.new($stdout)
7
+
8
+ @project_id = ENV['DESCOPE_PROJECT_ID']
9
+ @management_key = ENV['DESCOPE_MANAGEMENT_KEY']
10
+
11
+ @logger.info("Initializing Descope API with project_id: #{@project_id} and base_uri: #{@base_uri}")
12
+
13
+ @client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
14
+
15
+ @tenant_id = ''
16
+
17
+ begin
18
+ @logger.info('Going to create a new tenant')
19
+ resp = @client.create_tenant(name: 'My First Tenant')
20
+ @tenant_id = resp['id']
21
+ @logger.info("Tenant creation response: #{resp}")
22
+ rescue Descope::AuthException => e
23
+ @logger.info("Tenant creation failed #{e}")
24
+ end
25
+
26
+ begin
27
+ @logger.info('Loading tenant by id')
28
+ tenant_resp = @client.load_tenant(@tenant_id)
29
+ @logger.info("Found tenant #{tenant_resp}")
30
+ rescue Descope::AuthException => e
31
+ @logger.info("Permission load failed #{e}")
32
+ end
33
+
34
+ begin
35
+ @logger.info('Loading all tenants')
36
+ tenants_resp = @client.load_all_tenants
37
+ tenants = tenants_resp['tenants']
38
+ tenants.each do |tenant|
39
+ @logger.info("Search Found tenant #{tenant}")
40
+ end
41
+ rescue Descope::AuthException => e
42
+ @logger.error("Permission load failed #{e}")
43
+ end
44
+
45
+ begin
46
+ @logger.info('Updating newly created tenant')
47
+ @client.update_tenant(
48
+ name: 'My First Tenant', id: @tenant_id, self_provisioning_domains: ['mydomain.com']
49
+ )
50
+ rescue Descope::AuthException => e
51
+ @logger.error("Tenant update failed #{e}")
52
+ end
53
+
54
+ begin
55
+ @logger.info('Deleting newly created tenant')
56
+ @client.delete_tenant(@tenant_id)
57
+ rescue Descope::AuthException => e
58
+ @logger.error("Tenant deletion failed #{e}")
59
+ end
60
+
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'descope'
5
+
6
+ @logger = Logger.new($stdout)
7
+
8
+ @project_id = ENV['DESCOPE_PROJECT_ID']
9
+ @management_key = ENV['DESCOPE_MANAGEMENT_KEY']
10
+
11
+ @logger.info("Initializing Descope API with project_id: #{@project_id} and base_uri: #{@base_uri}")
12
+
13
+ @client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
14
+
15
+ user_login_id = 'des@copeland.com'
16
+
17
+ begin
18
+ @logger.info('Going to create a new user')
19
+ @client.create_user(login_id: user_login_id)
20
+ rescue Descope::AuthException => e
21
+ @logger.info("User creation failed #{e}")
22
+ end
23
+
24
+ begin
25
+ @logger.info('Searching for created user')
26
+ user_resp = @client.load_user(user_login_id)
27
+ user_res = user_resp['user']
28
+ @logger.info("Load: found user #{user_res}")
29
+ rescue Descope::AuthException => e
30
+ @logger.info("User load failed #{e}")
31
+ end
32
+
33
+ begin
34
+ @logger.info('Searching all users created user')
35
+ users_resp = @client.search_all_users
36
+ users = users_resp['users']
37
+ users.each do |user|
38
+ @logger.info("Search Found user #{user}")
39
+ end
40
+ rescue Descope::AuthException => e
41
+ @logger.info("User load failed #{e}")
42
+ end
43
+
44
+ begin
45
+ @logger.info('Updating newly created user')
46
+ # update overrides all fields, must provide the entire entity
47
+ # we mean to update.
48
+ @client.update_user(
49
+ login_id: user_login_id, name: 'Desmond Copeland'
50
+ )
51
+ rescue Descope::AuthException => e
52
+ @logger.info("User update failed #{e}")
53
+ end
54
+
55
+ begin
56
+ @logger.info('Deleting newly created user')
57
+ @client.delete_user(user_login_id)
58
+ rescue Descope::AuthException => e
59
+ @logger.info("User deletion failed #{e}")
60
+ end
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'descope'
5
+ require 'launchy'
6
+
7
+ @logger = Logger.new($stdout)
8
+
9
+ @project_id = ENV['DESCOPE_PROJECT_ID']
10
+ @management_key = ENV['DESCOPE_MANAGEMENT_KEY']
11
+
12
+ @logger.info("Initializing Descope API with project_id: #{@project_id} and base_uri: #{@base_uri}")
13
+
14
+ @client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
15
+
16
+ begin
17
+ @logger.info('Going to login with Oauth auth method ...')
18
+ resp = @client.oauth_start(provider: 'github', return_url: 'https://www.google.com')
19
+ @logger.info("oauth response: #{resp}")
20
+
21
+ # open the browser with the url
22
+ link = resp['url']
23
+ Launchy.open(link) # open the browser with the
24
+
25
+
26
+ puts "Please insert the code you received from redirect URI:\n"
27
+ code = gets.chomp
28
+
29
+ jwt_response = @client.oauth_exchange_token(code)
30
+ @logger.info('oauth code valid')
31
+ refresh_token = jwt_response['refreshSessionToken']['jwt']
32
+ my_details = @client.me(refresh_token)
33
+ @logger.info("my details: #{my_details}")
34
+
35
+ @client.sign_out(refresh_token)
36
+ @logger.info('User logged out')
37
+ rescue Descope::AuthException => e
38
+ @logger.error("Error: #{e.message}")
39
+ end
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'descope'
5
+
6
+ @logger = Logger.new($stdout)
7
+
8
+ @project_id = ENV['DESCOPE_PROJECT_ID']
9
+ @management_key = ENV['DESCOPE_MANAGEMENT_KEY']
10
+
11
+ @logger.info("Initializing Descope API with project_id: #{@project_id} and base_uri: #{@base_uri}")
12
+
13
+ @client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
14
+
15
+ begin
16
+ @logger.info('Going to signup or in using OTP...')
17
+ puts 'Please insert email to signup or in:\n'
18
+ email = gets.chomp
19
+ masked_email = @client.otp_sign_up_or_in(
20
+ method: Descope::Mixins::Common::DeliveryMethod::EMAIL, login_id: email
21
+ )
22
+
23
+ puts "Please insert the code you received by email to #{masked_email}:\n"
24
+ value = gets.chomp
25
+
26
+ jwt_response = @client.otp_verify_code(
27
+ method: Descope::Mixins::Common::DeliveryMethod::EMAIL, login_id: email, code: value
28
+ )
29
+ @logger.info('Code is valid')
30
+ puts "jwt_response: #{jwt_response}"
31
+ session_token = jwt_response[Descope::Mixins::Common::SESSION_TOKEN_NAME].fetch('jwt')
32
+ refresh_token = jwt_response[Descope::Mixins::Common::REFRESH_SESSION_TOKEN_NAME].fetch('jwt')
33
+ @logger.info("jwt_response: #{jwt_response}")
34
+
35
+ @logger.info('going to validate session..')
36
+ @client.validate_session(session_token:)
37
+ @logger.info('Session is valid and all is OK')
38
+
39
+ @logger.info('refreshing the session token..')
40
+ claims = @client.refresh_session(refresh_token:)
41
+ @logger.info(
42
+ 'going to revalidate the session with the newly refreshed token..'
43
+ )
44
+
45
+ new_session_token = claims.fetch(Descope::Mixins::Common::SESSION_TOKEN_NAME).fetch('jwt')
46
+ @client.validate_and_refresh_session(session_token: new_session_token, refresh_token:)
47
+ @logger.info('Session is valid also for the refreshed token.')
48
+ rescue Descope::AuthException => e
49
+ @logger.error("Error: #{e.message}")
50
+ end
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'descope'
5
+
6
+ @logger = Logger.new($stdout)
7
+
8
+ @project_id = ENV['DESCOPE_PROJECT_ID']
9
+ @management_key = ENV['DESCOPE_MANAGEMENT_KEY']
10
+
11
+ @logger.info("Initializing Descope API with project_id: #{@project_id} and base_uri: #{@base_uri}")
12
+
13
+ @client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
14
+
15
+ begin
16
+ @logger.info('Going to signup using password...')
17
+ puts 'Please insert email to signup with:\n'
18
+ email = gets.chomp
19
+
20
+ puts 'Please insert password to signup with:\n'
21
+ password = gets.chomp
22
+
23
+ jwt_response = @client.password_sign_up(login_id: email, password:)
24
+ @logger.info("Signup successful! jwt_response: #{jwt_response}")
25
+ puts "=> #{Descope::Mixins::Common::SESSION_TOKEN_NAME}"
26
+ session_token = jwt_response[Descope::Mixins::Common::SESSION_TOKEN_NAME].fetch('jwt')
27
+ refresh_token = jwt_response[Descope::Mixins::Common::REFRESH_SESSION_TOKEN_NAME].fetch('jwt')
28
+
29
+ @logger.info('Validating email address...')
30
+ @client.magiclink_update_user_email(login_id: email, email:, refresh_token:)
31
+
32
+ puts "Validation email send, please paste the token you received by email:\n"
33
+ token = gets.chomp
34
+ jwt_response = @client.magiclink_verify_token(token)
35
+ @logger.info('Token verified successfully! #{jwt_response}')
36
+ session_token = jwt_response[Descope::Mixins::Common::SESSION_TOKEN_NAME].fetch('jwt')
37
+ refresh_token = jwt_response[Descope::Mixins::Common::REFRESH_SESSION_TOKEN_NAME].fetch('jwt')
38
+
39
+ @logger.info('Going to reset password...')
40
+ @client.password_reset(login_id: email)
41
+ puts 'Reset password email send, please paste the token you received by email:\n'
42
+ token = gets.chomp
43
+ jwt_response = @client.magiclink_verify_token(token)
44
+ @logger.info('Token verified successfully!')
45
+ session_token = jwt_response[Descope::Mixins::Common::SESSION_TOKEN_NAME].fetch('jwt')
46
+ refresh_token = jwt_response[Descope::Mixins::Common::REFRESH_SESSION_TOKEN_NAME].fetch('jwt')
47
+ @logger.info("jwt_response: #{jwt_response}")
48
+
49
+ puts "Please insert new password:\n"
50
+ new_password = gets.chomp
51
+ @client.password_update(login_id: email, new_password:, refresh_token:)
52
+ @logger.info('Attempting to sign in with new password...')
53
+ jwt_response = @client.password_sign_in(login_id: email, password: new_password)
54
+ session_token = jwt_response[Descope::Mixins::Common::SESSION_TOKEN_NAME].fetch('jwt')
55
+ refresh_token = jwt_response[Descope::Mixins::Common::REFRESH_SESSION_TOKEN_NAME].fetch('jwt')
56
+ @logger.info("jwt_response: #{jwt_response}")
57
+
58
+ @logger.info('going to validate session...')
59
+ @client.validate_session(session_token:)
60
+ @logger.info('Session validated successfully and all is OK!')
61
+
62
+ @logger.info('refreshing the session token...')
63
+ claims = @client.refresh_session(refresh_token:)
64
+ @logger.info('going to revalidate the session with the newly refreshed token...')
65
+
66
+ new_session_token = claims[Descope::Mixins::Common::SESSION_TOKEN_NAME].fetch('jwt')
67
+ @client.validate_and_refresh_session(session_token: new_session_token, refresh_token:)
68
+ @logger.info('Session is also valid for the refreshed token.')
69
+
70
+ @logger.info('going to sign out...')
71
+ @client.sign_out(refresh_token)
72
+ @logger.info('Session is signed out successfully.')
73
+
74
+ rescue Descope::AuthException => e
75
+ @logger.error("Error: #{e.message}")
76
+ end