descope 1.0.5 → 1.0.6
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/publish-gem.yaml +30 -5
- data/Gemfile +3 -3
- data/Gemfile.lock +12 -20
- data/README.md +18 -3
- data/descope.gemspec +25 -20
- data/examples/ruby/.ruby-version +1 -0
- data/examples/ruby/access_key_app.rb +4 -3
- data/examples/ruby/enchantedlink_app.rb +1 -0
- data/examples/ruby/magiclink_app.rb +1 -0
- data/examples/ruby/management/.ruby-version +1 -0
- data/examples/ruby/management/Gemfile +2 -2
- data/examples/ruby/management/access_key_app.rb +2 -0
- data/examples/ruby/management/audit_app.rb +32 -8
- data/examples/ruby/management/authz_app.rb +1 -0
- data/examples/ruby/management/flow_app.rb +1 -0
- data/examples/ruby/management/permission_app.rb +3 -2
- data/examples/ruby/management/role_app.rb +3 -2
- data/examples/ruby/management/tenant_app.rb +1 -0
- data/examples/ruby/management/user_app.rb +1 -0
- data/examples/ruby/oauth_app.rb +1 -0
- data/examples/ruby/otp_app.rb +38 -12
- data/examples/ruby/password_app.rb +8 -7
- data/examples/ruby/saml_app.rb +1 -0
- data/examples/ruby/version_check.rb +17 -0
- data/examples/ruby-on-rails-api/descope/Gemfile +3 -1
- data/examples/ruby-on-rails-api/descope/Gemfile.lock +121 -90
- data/examples/ruby-on-rails-api/descope/README.md +18 -18
- data/examples/ruby-on-rails-api/descope/app/assets/builds/application.css +20092 -23
- data/examples/ruby-on-rails-api/descope/app/assets/builds/application.js +0 -1
- data/examples/ruby-on-rails-api/descope/app/assets/builds/components/index.js +0 -14
- data/examples/ruby-on-rails-api/descope/package-lock.json +1021 -19306
- data/examples/ruby-on-rails-api/descope/package.json +8 -16
- data/examples/ruby-on-rails-api/descope/yarn.lock +459 -10641
- data/lib/descope/api/v1/auth/otp.rb +21 -14
- data/lib/descope/api/v1/auth.rb +17 -20
- data/lib/descope/api/v1/management/audit.rb +24 -0
- data/lib/descope/api/v1/management/common.rb +1 -0
- data/lib/descope/mixins/common.rb +5 -2
- data/lib/descope/mixins/validation.rb +21 -6
- data/lib/descope/version.rb +1 -1
- data/spec/integration/lib.descope/api/v1/auth/otp_spec.rb +72 -7
- data/spec/integration/lib.descope/api/v1/management/audit_spec.rb +36 -0
- data/spec/integration/lib.descope/api/v1/management/roles_spec.rb +1 -1
- data/spec/lib.descope/api/v1/auth/otp_spec.rb +176 -18
- data/spec/lib.descope/api/v1/auth_spec.rb +1 -1
- data/spec/lib.descope/api/v1/management/audit_spec.rb +92 -0
- metadata +25 -133
- data/examples/ruby-on-rails-api/descope/app/assets/builds/reportWebVitals.js +0 -211
- data/examples/ruby-on-rails-api/descope/app/assets/builds/reportWebVitals.js.map +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c34965cb6d8afe8eef75358f8a2bfe51a4c85732b7a6704352d67429be4ef2a1
|
4
|
+
data.tar.gz: d683b72349fe21ad68c8eb5ba3f5efc630f6d064d725200d874b0b1a07fda450
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aed5e37a77c61eca6ee2e52cef996ebc5088b57dd78ed566cb2c4e21b7b939ddd5779712de35fdba59e13990872757dc8fb3a84a6c05b4bf8d169fefa281dcc9
|
7
|
+
data.tar.gz: 6cca87aa406e2eda34f7d38ad02178422c5b37262d0c4d5195f582ab7b4eabffe4c5508a06c10615f165de612e0a2b6caf5d14d7c19157b245354746f582810a
|
@@ -4,17 +4,16 @@ on:
|
|
4
4
|
release:
|
5
5
|
types: [published]
|
6
6
|
|
7
|
-
permissions:
|
8
|
-
contents: read
|
9
|
-
pull-requests: read # to detect changes files
|
10
|
-
|
11
7
|
jobs:
|
12
|
-
|
8
|
+
release:
|
13
9
|
name: Publish Ruby Gem
|
14
10
|
runs-on: ubuntu-latest
|
15
11
|
steps:
|
16
12
|
- name: Checkout Code
|
17
13
|
uses: actions/checkout@v4
|
14
|
+
with:
|
15
|
+
ref: main
|
16
|
+
fetch-depth: 0
|
18
17
|
|
19
18
|
- uses: ruby/setup-ruby@v1
|
20
19
|
with:
|
@@ -24,6 +23,32 @@ jobs:
|
|
24
23
|
- name: Install dependencies
|
25
24
|
run: bundle install
|
26
25
|
|
26
|
+
- name: Bump version
|
27
|
+
run: |
|
28
|
+
NEW_VERSION=$(echo ${{ github.event.release.tag_name }} | sed 's/^v//') # strip the 'v' from the tag if present
|
29
|
+
sed -i "s/^ VERSION = '.*'/ VERSION = '${NEW_VERSION}'/g" lib/descope/version.rb
|
30
|
+
echo -e "Updated version file:\n $(cat lib/descope/version.rb)"
|
31
|
+
|
32
|
+
- name: Commit changes
|
33
|
+
run: |
|
34
|
+
git config --global user.name 'github-actions'
|
35
|
+
git config --global user.email 'github-actions@github.com'
|
36
|
+
git checkout main
|
37
|
+
git add ./lib/descope/version.rb
|
38
|
+
git commit -m "Bump version to $NEW_VERSION"
|
39
|
+
git push origin main
|
40
|
+
env:
|
41
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
42
|
+
|
43
|
+
- name: Repoint the tag to latest commit
|
44
|
+
run: |
|
45
|
+
git tag -d ${{ github.event.release.tag_name }}
|
46
|
+
git tag ${{ github.event.release.tag_name }} -m "Release $NEW_VERSION"
|
47
|
+
git push origin :${{ github.event.release.tag_name }}
|
48
|
+
git push
|
49
|
+
env:
|
50
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
51
|
+
|
27
52
|
- name: Publish to RubyGems
|
28
53
|
run: |
|
29
54
|
mkdir -p $HOME/.gem
|
data/Gemfile
CHANGED
@@ -4,8 +4,8 @@ source 'https://rubygems.org'
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
group :development do
|
7
|
-
gem 'rubocop', '1.
|
8
|
-
gem 'rubocop-rails', '2.
|
7
|
+
gem 'rubocop', '1.63.2', require: false
|
8
|
+
gem 'rubocop-rails', '2.24.1', require: false
|
9
9
|
end
|
10
10
|
|
11
11
|
group :test do
|
@@ -14,7 +14,7 @@ group :test do
|
|
14
14
|
gem 'rack-test', '2.1.0', require: false
|
15
15
|
gem 'rotp', '6.3.0', require: false
|
16
16
|
gem 'rspec', '3.13.0', require: false
|
17
|
-
gem 'selenium-webdriver', '4.
|
17
|
+
gem 'selenium-webdriver', '4.19.0', require: false
|
18
18
|
gem 'simplecov', '0.22.0', require: false
|
19
19
|
gem 'super_diff', '0.11.0', require: false
|
20
20
|
end
|
data/Gemfile.lock
CHANGED
@@ -35,17 +35,14 @@ GEM
|
|
35
35
|
drb (2.2.1)
|
36
36
|
factory_bot (6.4.6)
|
37
37
|
activesupport (>= 5.0.0)
|
38
|
-
faker (3.
|
38
|
+
faker (3.3.1)
|
39
39
|
i18n (>= 1.8.11, < 2)
|
40
|
-
fuubar (2.5.1)
|
41
|
-
rspec-core (~> 3.0)
|
42
|
-
ruby-progressbar (~> 1.4)
|
43
40
|
http-accept (1.7.0)
|
44
41
|
http-cookie (1.0.5)
|
45
42
|
domain_name (~> 0.5)
|
46
43
|
i18n (1.14.4)
|
47
44
|
concurrent-ruby (~> 1.0)
|
48
|
-
json (2.7.
|
45
|
+
json (2.7.2)
|
49
46
|
jwt (2.8.1)
|
50
47
|
base64
|
51
48
|
language_server-protocol (3.17.0.3)
|
@@ -62,13 +59,12 @@ GEM
|
|
62
59
|
racc
|
63
60
|
patience_diff (1.2.0)
|
64
61
|
optimist (~> 3.0)
|
65
|
-
public_suffix (5.0.
|
62
|
+
public_suffix (5.0.5)
|
66
63
|
racc (1.7.3)
|
67
|
-
rack (3.0.
|
64
|
+
rack (3.0.10)
|
68
65
|
rack-test (2.1.0)
|
69
66
|
rack (>= 1.3)
|
70
67
|
rainbow (3.1.1)
|
71
|
-
rake (13.1.0)
|
72
68
|
regexp_parser (2.9.0)
|
73
69
|
rest-client (2.1.0)
|
74
70
|
http-accept (>= 1.7.0, < 2.0)
|
@@ -91,7 +87,7 @@ GEM
|
|
91
87
|
diff-lcs (>= 1.2.0, < 2.0)
|
92
88
|
rspec-support (~> 3.13.0)
|
93
89
|
rspec-support (3.13.1)
|
94
|
-
rubocop (1.
|
90
|
+
rubocop (1.63.2)
|
95
91
|
json (~> 2.3)
|
96
92
|
language_server-protocol (>= 3.17.0)
|
97
93
|
parallel (~> 1.10)
|
@@ -99,19 +95,19 @@ GEM
|
|
99
95
|
rainbow (>= 2.2.2, < 4.0)
|
100
96
|
regexp_parser (>= 1.8, < 3.0)
|
101
97
|
rexml (>= 3.2.5, < 4.0)
|
102
|
-
rubocop-ast (>= 1.
|
98
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
103
99
|
ruby-progressbar (~> 1.7)
|
104
100
|
unicode-display_width (>= 2.4.0, < 3.0)
|
105
101
|
rubocop-ast (1.31.2)
|
106
102
|
parser (>= 3.3.0.4)
|
107
|
-
rubocop-rails (2.
|
103
|
+
rubocop-rails (2.24.1)
|
108
104
|
activesupport (>= 4.2.0)
|
109
105
|
rack (>= 1.1)
|
110
106
|
rubocop (>= 1.33.0, < 2.0)
|
111
|
-
rubocop-ast (>= 1.
|
107
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
112
108
|
ruby-progressbar (1.13.0)
|
113
109
|
rubyzip (2.3.2)
|
114
|
-
selenium-webdriver (4.
|
110
|
+
selenium-webdriver (4.19.0)
|
115
111
|
base64 (~> 0.2)
|
116
112
|
rexml (~> 3.2, >= 3.2.5)
|
117
113
|
rubyzip (>= 1.2.2, < 3.0)
|
@@ -137,19 +133,15 @@ PLATFORMS
|
|
137
133
|
x86_64-linux
|
138
134
|
|
139
135
|
DEPENDENCIES
|
140
|
-
bundler
|
141
|
-
concurrent-ruby (~> 1.1)
|
142
136
|
descope!
|
143
137
|
factory_bot (= 6.4.6)
|
144
138
|
faker
|
145
|
-
fuubar (~> 2.0)
|
146
139
|
rack-test (= 2.1.0)
|
147
|
-
rake (~> 13.0)
|
148
140
|
rotp (= 6.3.0)
|
149
141
|
rspec (= 3.13.0)
|
150
|
-
rubocop (= 1.
|
151
|
-
rubocop-rails (= 2.
|
152
|
-
selenium-webdriver (= 4.
|
142
|
+
rubocop (= 1.63.2)
|
143
|
+
rubocop-rails (= 2.24.1)
|
144
|
+
selenium-webdriver (= 4.19.0)
|
153
145
|
simplecov (= 0.22.0)
|
154
146
|
super_diff (= 0.11.0)
|
155
147
|
|
data/README.md
CHANGED
@@ -67,7 +67,7 @@ These sections show how to use the SDK to perform permission and user management
|
|
67
67
|
8. [Manage Flows](#manage-flows-and-theme)
|
68
68
|
9. [Manage JWTs](#manage-jwts)
|
69
69
|
10. [Embedded links](#embedded-links)
|
70
|
-
11. [
|
70
|
+
11. [Audit](#audit)
|
71
71
|
12. [Manage ReBAC Authz](#manage-rebac-authz)
|
72
72
|
13. [Manage Project](#manage-project)
|
73
73
|
|
@@ -79,7 +79,7 @@ For rate limiting information, please confer to the [API Rate Limits](#api-rate-
|
|
79
79
|
|
80
80
|
### OTP Authentication
|
81
81
|
|
82
|
-
Send a user a one-time password (OTP) using your preferred delivery method (email/SMS). An email address or phone number must be provided accordingly.
|
82
|
+
Send a user a one-time password (OTP) using your preferred delivery method (email/SMS/Voice call). An email address or phone number must be provided accordingly.
|
83
83
|
|
84
84
|
The user can either `sign up`, `sign in` or `sign up or in`
|
85
85
|
|
@@ -871,7 +871,7 @@ This token can then be verified using the magic link 'verify' function, either d
|
|
871
871
|
token = descope_client.generate_embedded_link(login_id: 'desmond@descope.com', custom_claims: {'key1':'value1'})
|
872
872
|
```
|
873
873
|
|
874
|
-
###
|
874
|
+
### Audit
|
875
875
|
|
876
876
|
You can perform an audit search for either specific values or full-text across the fields. Audit search is limited to the last 30 days.
|
877
877
|
Below are some examples. For a full list of available search criteria options, see the function documentation.
|
@@ -898,6 +898,21 @@ audits = descope_client.audit_search(
|
|
898
898
|
audits = descope_client.audit_search(actions: ['LoginSucceed'])
|
899
899
|
```
|
900
900
|
|
901
|
+
You can also create audit event with data
|
902
|
+
|
903
|
+
```ruby
|
904
|
+
descope_client.audit_create_event(
|
905
|
+
actor_id: "UXXX", # required, for example a user ID
|
906
|
+
tenant_id: "tenant-id", # required
|
907
|
+
action: "pencil.created", # required
|
908
|
+
type: "info", # either: info/warn/error # required
|
909
|
+
data: {
|
910
|
+
pencil_id: "PXXX",
|
911
|
+
pencil_name: "Pencil Name"
|
912
|
+
} # optional
|
913
|
+
)
|
914
|
+
```
|
915
|
+
|
901
916
|
### Manage ReBAC Authz
|
902
917
|
|
903
918
|
Descope supports full relation based access control (ReBAC) using a [Google Zanzibar](https://research.google/pubs/pub48190/) like schema and operations.
|
data/descope.gemspec
CHANGED
@@ -1,34 +1,39 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
3
3
|
require 'descope/version'
|
4
|
+
version = Descope::VERSION
|
4
5
|
|
5
6
|
Gem::Specification.new do |s|
|
6
|
-
s.
|
7
|
-
s.
|
8
|
-
s.
|
9
|
-
s.
|
10
|
-
s.
|
11
|
-
|
12
|
-
s.
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.name = "descope"
|
9
|
+
s.version = version
|
10
|
+
s.summary = "Descope Ruby API Client"
|
11
|
+
s.description = "Ruby API Client for Descope API https://descope.com"
|
12
|
+
|
13
|
+
s.required_ruby_version = ">= 3.3.0"
|
14
|
+
s.required_rubygems_version = ">= 3.5"
|
15
|
+
|
16
|
+
s.author = "Descope Inc."
|
17
|
+
s.email = "support@descope.com"
|
18
|
+
s.homepage = "https://github.com/descope/descope-ruby-sdk"
|
19
|
+
|
20
|
+
s.license = "MIT"
|
13
21
|
|
14
22
|
s.files = `git ls-files`.split("\n")
|
15
23
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
24
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
17
25
|
s.require_paths = ['lib']
|
18
26
|
|
19
|
-
s.
|
20
|
-
|
21
|
-
|
27
|
+
s.metadata = {
|
28
|
+
"bug_tracker_uri" => "https://github.com/descope/descope-ruby-sdk/issues",
|
29
|
+
"changelog_uri" => "https://github.com/descope/descope-ruby-sdk/releases/tag/#{version}",
|
30
|
+
"documentation_uri" => "https://docs.descope.com",
|
31
|
+
"source_code_uri" => "https://github.com/descope/descope-ruby-sdk/tree/#{version}",
|
32
|
+
}
|
33
|
+
|
22
34
|
s.add_runtime_dependency 'addressable', '~> 2.8'
|
35
|
+
s.add_runtime_dependency 'jwt', '~> 2.7'
|
36
|
+
s.add_runtime_dependency 'rest-client', '~> 2.1'
|
23
37
|
s.add_runtime_dependency 'retryable', '~> 3.0'
|
24
|
-
|
25
|
-
s.add_development_dependency 'bundler'
|
26
|
-
s.add_development_dependency 'rake', '~> 13.0'
|
27
|
-
s.add_development_dependency 'fuubar', '~> 2.0'
|
28
|
-
s.add_development_dependency 'rspec', '~> 3.11'
|
29
|
-
s.add_development_dependency 'simplecov', '~> 0.9'
|
30
|
-
s.add_development_dependency 'faker', '~> 2.0'
|
31
|
-
s.add_development_dependency "super_diff", "~> 1.0"
|
32
|
-
s.add_development_dependency 'concurrent-ruby', '~> 1.1'
|
33
|
-
s.license = 'MIT'
|
38
|
+
s.add_runtime_dependency 'zache', '~> 0.12'
|
34
39
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
3.3.0
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require_relative './version_check'
|
4
5
|
require 'descope'
|
5
6
|
|
6
7
|
@logger = Logger.new($stdout)
|
@@ -25,17 +26,17 @@ begin
|
|
25
26
|
login_options = {
|
26
27
|
customClaims: { "k1": 'v1' }
|
27
28
|
}
|
28
|
-
jwt_response = @client.exchange_access_key(access_key
|
29
|
+
jwt_response = @client.exchange_access_key(access_key: access_key, login_options: login_options)
|
29
30
|
@logger.info('exchange access key successfully')
|
30
31
|
@logger.info("jwt_response: #{jwt_response}")
|
31
32
|
|
32
33
|
permission_name = 'TestPermission'
|
33
34
|
permission_presented = @client.validate_permissions(
|
34
|
-
jwt_response
|
35
|
+
jwt_response: jwt_response, permissions: [permission_name]
|
35
36
|
)
|
36
37
|
@logger.info("#{permission_name} presented on the jwt: [#{permission_presented}]")
|
37
38
|
role_name = 'TestRole'
|
38
|
-
role_presented = @client.validate_roles(jwt_response
|
39
|
+
role_presented = @client.validate_roles(jwt_response: jwt_response, roles: [role_name])
|
39
40
|
@logger.info("#{role_name} presented on the jwt: [#{role_presented}]")
|
40
41
|
rescue Descope::AuthException => e
|
41
42
|
@logger.error("Failed to exchange access key #{e}")
|
@@ -0,0 +1 @@
|
|
1
|
+
3.3.0
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require_relative '../version_check'
|
4
5
|
require 'descope'
|
5
6
|
|
6
7
|
@logger = Logger.new($stdout)
|
@@ -13,13 +14,36 @@ require 'descope'
|
|
13
14
|
@client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
|
14
15
|
|
15
16
|
begin
|
16
|
-
@logger.info('
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
@logger.info('Do you want to to create a new audit event? [y/n] ')
|
18
|
+
create_audit = gets.chomp
|
19
|
+
if create_audit == 'y'
|
20
|
+
@logger.info('Enter the action for the audit event: ')
|
21
|
+
action = gets.chomp
|
22
|
+
@logger.info('Enter the type for the audit event: [info/warn/error] ')
|
23
|
+
type = gets.chomp
|
24
|
+
@logger.info('Enter the actorId for the audit event: ')
|
25
|
+
actor_id = gets.chomp
|
26
|
+
@logger.info('Enter the tenantId for the audit event: ')
|
27
|
+
tenant_id = gets.chomp
|
28
|
+
res = @client.audit_create_event(
|
29
|
+
action: action,
|
30
|
+
type: type,
|
31
|
+
actor_id: actor_id,
|
32
|
+
tenant_id: tenant_id
|
33
|
+
)
|
34
|
+
@logger.info("Audit event created successfully: #{res}")
|
35
|
+
end
|
36
|
+
|
37
|
+
@logger.info('Do you want to search the audit trail? [y/n] ')
|
38
|
+
search_audit = gets.chomp
|
39
|
+
if search_audit == 'y'
|
40
|
+
@logger.info('Enter the text to search: ')
|
41
|
+
text = gets.chomp
|
42
|
+
@logger.info('Enter the from_ts in ISO8601 format (2024-01-01 15:00:00.000) to search: ')
|
43
|
+
from_ts = gets.chomp
|
44
|
+
res = @client.audit_search(text: text, from_ts: from_ts)
|
45
|
+
@logger.info("Audit search result: #{res}")
|
46
|
+
end
|
23
47
|
rescue Descope::AuthException => e
|
24
|
-
@logger.error("Audit
|
48
|
+
@logger.error("Audit action failed #{e}")
|
25
49
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require_relative '../version_check'
|
4
5
|
require 'descope'
|
5
6
|
|
6
7
|
@logger = Logger.new($stdout)
|
@@ -15,7 +16,7 @@ require 'descope'
|
|
15
16
|
begin
|
16
17
|
@logger.info('Going to create a new permission')
|
17
18
|
name = 'My Permission'
|
18
|
-
@client.create_permission(name
|
19
|
+
@client.create_permission(name: name, description: 'Allowed to test')
|
19
20
|
|
20
21
|
rescue Descope::AuthException => e
|
21
22
|
@logger.info("Permission creation failed #{e}")
|
@@ -39,7 +40,7 @@ begin
|
|
39
40
|
# we mean to update.
|
40
41
|
name = 'My Permission'
|
41
42
|
@client.update_permission(
|
42
|
-
name
|
43
|
+
name: name, new_name: 'My Updated Permission', description: 'New Description'
|
43
44
|
)
|
44
45
|
|
45
46
|
rescue Descope::AuthException => e
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require_relative '../version_check'
|
4
5
|
require 'descope'
|
5
6
|
|
6
7
|
@logger = Logger.new($stdout)
|
@@ -21,7 +22,7 @@ begin
|
|
21
22
|
tenant = @client.create_tenant(name: tenant_name)
|
22
23
|
@logger.info('Going to create a new role')
|
23
24
|
@client.create_role(
|
24
|
-
name
|
25
|
+
name: name, description: 'Allowed to test :)', permission_names: ['SSO Admin'], tenant_id: tenant['id']
|
25
26
|
)
|
26
27
|
rescue Descope::AuthException => e
|
27
28
|
@logger.info("Role creation failed #{e}")
|
@@ -42,7 +43,7 @@ end
|
|
42
43
|
begin
|
43
44
|
@logger.info('Updating newly created role')
|
44
45
|
@client.update_role(
|
45
|
-
name
|
46
|
+
name: name,
|
46
47
|
new_name: 'My Updated Role',
|
47
48
|
description: 'New Description',
|
48
49
|
permission_names: ['User Admin'],
|
data/examples/ruby/oauth_app.rb
CHANGED
data/examples/ruby/otp_app.rb
CHANGED
@@ -7,25 +7,51 @@ require 'descope'
|
|
7
7
|
|
8
8
|
@project_id = ENV['DESCOPE_PROJECT_ID']
|
9
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
10
|
@client = Descope::Client.new({ project_id: @project_id, management_key: @management_key })
|
11
|
+
@logger.info("Initializing Descope API with project_id: #{@project_id} and base_uri: #{@client.base_uri}")
|
14
12
|
|
15
13
|
begin
|
16
14
|
@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
15
|
|
23
|
-
puts "Please
|
16
|
+
puts "Please select OTP method: [email, sms, voice]:\n"
|
17
|
+
method = gets.chomp
|
18
|
+
|
19
|
+
case method
|
20
|
+
when 'email'
|
21
|
+
requested_method = Descope::Mixins::Common::DeliveryMethod::EMAIL
|
22
|
+
puts "Please insert the email address you want to use:\n"
|
23
|
+
email = gets.chomp
|
24
|
+
requested_params = { login_id: email }
|
25
|
+
when 'sms'
|
26
|
+
requested_method = Descope::Mixins::Common::DeliveryMethod::SMS
|
27
|
+
@logger.info('Once signed up, we will use the update phone number')
|
28
|
+
puts "Please insert the phone number you want to use:\n"
|
29
|
+
phone = gets.chomp
|
30
|
+
requested_params = { login_id: phone }
|
31
|
+
when 'voice'
|
32
|
+
requested_method = Descope::Mixins::Common::DeliveryMethod::VOICE
|
33
|
+
@logger.info('Once signed up, we will use the update phone number')
|
34
|
+
puts "Please insert the phone number you want to use:\n"
|
35
|
+
phone = gets.chomp
|
36
|
+
requested_params = { login_id: phone }
|
37
|
+
else
|
38
|
+
raise 'Invalid method'
|
39
|
+
end
|
40
|
+
|
41
|
+
@logger.info("Signing up using OTP with #{method}...")
|
42
|
+
if method == 'email'
|
43
|
+
user = { login_id: email, name: 'John Doe', email: email, phone: phone }
|
44
|
+
login_id = email
|
45
|
+
masked_method = @client.otp_sign_up(method: requested_method, user: user, login_id: email, phone: phone)
|
46
|
+
else
|
47
|
+
login_id = phone
|
48
|
+
masked_method = @client.otp_sign_up_or_in(method: requested_method, login_id: phone)
|
49
|
+
end
|
50
|
+
|
51
|
+
puts "Please insert the code you received by #{method} to #{masked_method}:\n"
|
24
52
|
value = gets.chomp
|
25
53
|
|
26
|
-
jwt_response = @client.otp_verify_code(
|
27
|
-
method: Descope::Mixins::Common::DeliveryMethod::EMAIL, login_id: email, code: value
|
28
|
-
)
|
54
|
+
jwt_response = @client.otp_verify_code(method: requested_method, login_id: login_id, code: value)
|
29
55
|
@logger.info('Code is valid')
|
30
56
|
puts "jwt_response: #{jwt_response}"
|
31
57
|
session_token = jwt_response[Descope::Mixins::Common::SESSION_TOKEN_NAME].fetch('jwt')
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require_relative './version_check'
|
4
5
|
require 'descope'
|
5
6
|
|
6
7
|
@logger = Logger.new($stdout)
|
@@ -20,19 +21,19 @@ begin
|
|
20
21
|
puts 'Please insert password to signup with:\n'
|
21
22
|
password = gets.chomp
|
22
23
|
|
23
|
-
jwt_response = @client.password_sign_up(login_id: email, password:)
|
24
|
+
jwt_response = @client.password_sign_up(login_id: email, password: password)
|
24
25
|
@logger.info("Signup successful! jwt_response: #{jwt_response}")
|
25
26
|
puts "=> #{Descope::Mixins::Common::SESSION_TOKEN_NAME}"
|
26
27
|
session_token = jwt_response[Descope::Mixins::Common::SESSION_TOKEN_NAME].fetch('jwt')
|
27
28
|
refresh_token = jwt_response[Descope::Mixins::Common::REFRESH_SESSION_TOKEN_NAME].fetch('jwt')
|
28
29
|
|
29
30
|
@logger.info('Validating email address...')
|
30
|
-
@client.magiclink_update_user_email(login_id: email, email
|
31
|
+
@client.magiclink_update_user_email(login_id: email, email: email, refresh_token: refresh_token)
|
31
32
|
|
32
33
|
puts "Validation email send, please paste the token you received by email:\n"
|
33
34
|
token = gets.chomp
|
34
35
|
jwt_response = @client.magiclink_verify_token(token)
|
35
|
-
@logger.info(
|
36
|
+
@logger.info("Token verified successfully! #{jwt_response}")
|
36
37
|
session_token = jwt_response[Descope::Mixins::Common::SESSION_TOKEN_NAME].fetch('jwt')
|
37
38
|
refresh_token = jwt_response[Descope::Mixins::Common::REFRESH_SESSION_TOKEN_NAME].fetch('jwt')
|
38
39
|
|
@@ -48,7 +49,7 @@ begin
|
|
48
49
|
|
49
50
|
puts "Please insert new password:\n"
|
50
51
|
new_password = gets.chomp
|
51
|
-
@client.password_update(login_id: email, new_password
|
52
|
+
@client.password_update(login_id: email, new_password: new_password, refresh_token: refresh_token)
|
52
53
|
@logger.info('Attempting to sign in with new password...')
|
53
54
|
jwt_response = @client.password_sign_in(login_id: email, password: new_password)
|
54
55
|
session_token = jwt_response[Descope::Mixins::Common::SESSION_TOKEN_NAME].fetch('jwt')
|
@@ -56,15 +57,15 @@ begin
|
|
56
57
|
@logger.info("jwt_response: #{jwt_response}")
|
57
58
|
|
58
59
|
@logger.info('going to validate session...')
|
59
|
-
@client.validate_session(session_token:)
|
60
|
+
@client.validate_session(session_token: session_token)
|
60
61
|
@logger.info('Session validated successfully and all is OK!')
|
61
62
|
|
62
63
|
@logger.info('refreshing the session token...')
|
63
|
-
claims = @client.refresh_session(refresh_token:)
|
64
|
+
claims = @client.refresh_session(refresh_token: refresh_token)
|
64
65
|
@logger.info('going to revalidate the session with the newly refreshed token...')
|
65
66
|
|
66
67
|
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
|
+
@client.validate_and_refresh_session(session_token: new_session_token, refresh_token: refresh_token)
|
68
69
|
@logger.info('Session is also valid for the refreshed token.')
|
69
70
|
|
70
71
|
@logger.info('going to sign out...')
|
data/examples/ruby/saml_app.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
required_version = File.read('.ruby-version').strip
|
4
|
+
|
5
|
+
begin
|
6
|
+
# Check the Ruby version using RUBY_VERSION constant
|
7
|
+
current_version = RUBY_VERSION
|
8
|
+
|
9
|
+
# Compare major, minor and patch versions
|
10
|
+
if current_version.split('.').map(&:to_i) != required_version.split('.').map(&:to_i)
|
11
|
+
raise StandardError, "Script requires Ruby version #{required_version} but found #{current_version}"
|
12
|
+
end
|
13
|
+
rescue StandardError => e
|
14
|
+
puts "Error: #{e}"
|
15
|
+
puts "Script cannot run with incompatible Ruby version. Please install version #{required_version}."
|
16
|
+
exit(1) # Exit with an error code
|
17
|
+
end
|