auth0 5.9.0 → 5.10.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/.circleci/config.yml +3 -3
- data/.devcontainer/Dockerfile +19 -0
- data/.devcontainer/devcontainer.json +37 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +28 -24
- data/auth0.gemspec +2 -2
- data/examples/ruby-api/Gemfile +3 -2
- data/examples/ruby-api/Gemfile.lock +32 -0
- data/examples/ruby-api/README.md +2 -2
- data/lib/auth0/api/v2/jobs.rb +15 -4
- data/lib/auth0/api/v2/organizations.rb +1 -1
- data/lib/auth0/mixins/httpproxy.rb +11 -12
- data/lib/auth0/mixins/token_management.rb +1 -1
- data/lib/auth0/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Clients/_patch_client/should_update_the_client_with_the_correct_attributes.yml +2 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Connections/_update_connection/should_update_the_connection.yml +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Rules/_update_rule/should_update_the_disabled_rule_to_be_enabled.yml +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_revert_the_tenant_name.yml +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Tenants/_update_tenant_settings/should_update_the_tenant_settings_with_a_new_tenant_name.yml +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_add_user_roles/should_add_a_Role_to_a_User_successfully.yml +1 -1
- data/spec/fixtures/vcr_cassettes/Auth0_Api_V2_Users/_patch_user/should_patch_the_User_successfully.yml +1 -1
- data/spec/lib/auth0/api/v2/jobs_spec.rb +18 -0
- data/spec/lib/auth0/mixins/httpproxy_spec.rb +53 -17
- data/spec/lib/auth0/mixins/token_management_spec.rb +2 -7
- data/spec/spec_helper.rb +4 -0
- metadata +9 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 40aab484c4f3864d285e116a837151c8e57872a9f879485bdf2433a926b4f668
|
|
4
|
+
data.tar.gz: 7affd4b6a58f93b73bfa66c8aea85c8064e14a0c74e692e8952223dfda8947a3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 68da74cb1dac1f68810babc29ceef1ea51d5ef16db4f462d728feb904e2734aae58882cf8a2e945710ccdd796d0c2957a378a42e36b2d3aeb0a286dd52604eae
|
|
7
|
+
data.tar.gz: 16a91e8033143986d95d8857c66f2642640df6b8416ab7e88f0478668336447c95fbf30fda20a058656cea7936ae1b36d376f99ade14953b10e25faa458de4bb
|
data/.circleci/config.yml
CHANGED
|
@@ -6,9 +6,9 @@ orbs:
|
|
|
6
6
|
matrix_ruby_versions: &matrix_ruby_versions
|
|
7
7
|
matrix:
|
|
8
8
|
parameters:
|
|
9
|
-
ruby_version: ["2.
|
|
9
|
+
ruby_version: ["2.7", "3.0", "3.1"]
|
|
10
10
|
# Default version of ruby to use for lint and publishing
|
|
11
|
-
default_ruby_version: &default_ruby_version "
|
|
11
|
+
default_ruby_version: &default_ruby_version "3.1"
|
|
12
12
|
|
|
13
13
|
executors:
|
|
14
14
|
ruby-image:
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
ruby_version: << parameters.ruby_version >>
|
|
31
31
|
steps:
|
|
32
32
|
- checkout
|
|
33
|
-
- run: gem install bundler:
|
|
33
|
+
- run: gem install bundler:2.3.22
|
|
34
34
|
- run: rm Gemfile.lock
|
|
35
35
|
- restore_cache:
|
|
36
36
|
key: gems-v2-{{ checksum "Gemfile.lock" }}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/ruby/.devcontainer/base.Dockerfile
|
|
2
|
+
|
|
3
|
+
# [Choice] Ruby version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.1, 3.0, 2, 2.7, 3-bullseye, 3.1-bullseye, 3.0-bullseye, 2-bullseye, 2.7-bullseye, 3-buster, 3.1-buster, 3.0-buster, 2-buster, 2.7-buster
|
|
4
|
+
ARG VARIANT="3.1-bullseye"
|
|
5
|
+
FROM mcr.microsoft.com/vscode/devcontainers/ruby:0-${VARIANT}
|
|
6
|
+
|
|
7
|
+
# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10
|
|
8
|
+
ARG NODE_VERSION="none"
|
|
9
|
+
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
|
|
10
|
+
|
|
11
|
+
# [Optional] Uncomment this section to install additional OS packages.
|
|
12
|
+
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
|
13
|
+
# && apt-get -y install --no-install-recommends <your-package-list-here>
|
|
14
|
+
|
|
15
|
+
# [Optional] Uncomment this line to install additional gems.
|
|
16
|
+
# RUN gem install <your-gem-names-here>
|
|
17
|
+
|
|
18
|
+
# [Optional] Uncomment this line to install global node packages.
|
|
19
|
+
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
|
|
2
|
+
// https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/ruby
|
|
3
|
+
{
|
|
4
|
+
"name": "Ruby",
|
|
5
|
+
"build": {
|
|
6
|
+
"dockerfile": "Dockerfile",
|
|
7
|
+
"args": {
|
|
8
|
+
// Update 'VARIANT' to pick a Ruby version: 3, 3.1, 3.0, 2, 2.7
|
|
9
|
+
// Append -bullseye or -buster to pin to an OS version.
|
|
10
|
+
// Use -bullseye variants on local on arm64/Apple Silicon.
|
|
11
|
+
"VARIANT": "3.1",
|
|
12
|
+
// Options
|
|
13
|
+
"NODE_VERSION": "lts/*"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
// Configure tool-specific properties.
|
|
18
|
+
"customizations": {
|
|
19
|
+
// Configure properties specific to VS Code.
|
|
20
|
+
"vscode": {
|
|
21
|
+
// Add the IDs of extensions you want installed when the container is created.
|
|
22
|
+
"extensions": [
|
|
23
|
+
"rebornix.Ruby"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
|
29
|
+
// "forwardPorts": [],
|
|
30
|
+
|
|
31
|
+
// Use 'postCreateCommand' to run commands after the container is created.
|
|
32
|
+
// "postCreateCommand": "ruby --version",
|
|
33
|
+
|
|
34
|
+
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
|
|
35
|
+
"remoteUser": "vscode"
|
|
36
|
+
|
|
37
|
+
}
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## [v5.10.0](https://github.com/auth0/ruby-auth0/tree/v5.10.0) (2022-10-10)
|
|
4
|
+
[Full Changelog](https://github.com/auth0/ruby-auth0/compare/v5.9.0...v5.10.0)
|
|
5
|
+
|
|
6
|
+
**Changed**
|
|
7
|
+
- Update jwt ~2.5 [\#384](https://github.com/auth0/ruby-auth0/pull/384) ([stevehobbsdev](https://github.com/stevehobbsdev))
|
|
8
|
+
|
|
9
|
+
**Fixed**
|
|
10
|
+
- Stop :get, :delete parameters from bleeding into subsequent requests [\#388](https://github.com/auth0/ruby-auth0/pull/388) ([stevehobbsdev](https://github.com/stevehobbsdev))
|
|
11
|
+
- Support complex field names in export_users [\#387](https://github.com/auth0/ruby-auth0/pull/387) ([stevehobbsdev](https://github.com/stevehobbsdev))
|
|
12
|
+
- Reconfigure rate limiting exponential backoff [\#386](https://github.com/auth0/ruby-auth0/pull/386) ([stevehobbsdev](https://github.com/stevehobbsdev))
|
|
13
|
+
|
|
3
14
|
## [v5.9.0](https://github.com/auth0/ruby-auth0/tree/v5.9.0) (2022-08-24)
|
|
4
15
|
[Full Changelog](https://github.com/auth0/ruby-auth0/compare/v5.8.1...v5.9.0)
|
|
5
16
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
auth0 (5.
|
|
4
|
+
auth0 (5.10.0)
|
|
5
5
|
addressable (~> 2.8)
|
|
6
|
-
jwt (~> 2.
|
|
6
|
+
jwt (~> 2.5)
|
|
7
7
|
rest-client (~> 2.1)
|
|
8
8
|
retryable (~> 3.0)
|
|
9
9
|
zache (~> 0.12)
|
|
@@ -11,20 +11,20 @@ PATH
|
|
|
11
11
|
GEM
|
|
12
12
|
remote: https://rubygems.org/
|
|
13
13
|
specs:
|
|
14
|
-
actionpack (7.0.
|
|
15
|
-
actionview (= 7.0.
|
|
16
|
-
activesupport (= 7.0.
|
|
14
|
+
actionpack (7.0.4)
|
|
15
|
+
actionview (= 7.0.4)
|
|
16
|
+
activesupport (= 7.0.4)
|
|
17
17
|
rack (~> 2.0, >= 2.2.0)
|
|
18
18
|
rack-test (>= 0.6.3)
|
|
19
19
|
rails-dom-testing (~> 2.0)
|
|
20
20
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
|
21
|
-
actionview (7.0.
|
|
22
|
-
activesupport (= 7.0.
|
|
21
|
+
actionview (7.0.4)
|
|
22
|
+
activesupport (= 7.0.4)
|
|
23
23
|
builder (~> 3.1)
|
|
24
24
|
erubi (~> 1.4)
|
|
25
25
|
rails-dom-testing (~> 2.0)
|
|
26
26
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
|
27
|
-
activesupport (7.0.
|
|
27
|
+
activesupport (7.0.4)
|
|
28
28
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
29
29
|
i18n (>= 1.6, < 2)
|
|
30
30
|
minitest (>= 5.1)
|
|
@@ -53,7 +53,7 @@ GEM
|
|
|
53
53
|
dotenv (= 2.8.1)
|
|
54
54
|
railties (>= 3.2)
|
|
55
55
|
erubi (1.11.0)
|
|
56
|
-
faker (2.
|
|
56
|
+
faker (2.23.0)
|
|
57
57
|
i18n (>= 1.8.11, < 2)
|
|
58
58
|
fuubar (2.5.1)
|
|
59
59
|
rspec-core (~> 3.0)
|
|
@@ -66,11 +66,11 @@ GEM
|
|
|
66
66
|
i18n (1.12.0)
|
|
67
67
|
concurrent-ruby (~> 1.0)
|
|
68
68
|
io-console (0.5.11)
|
|
69
|
-
irb (1.4.
|
|
69
|
+
irb (1.4.2)
|
|
70
70
|
reline (>= 0.3.0)
|
|
71
71
|
json (2.6.2)
|
|
72
|
-
jwt (2.
|
|
73
|
-
loofah (2.
|
|
72
|
+
jwt (2.5.0)
|
|
73
|
+
loofah (2.19.0)
|
|
74
74
|
crass (~> 1.0.2)
|
|
75
75
|
nokogiri (>= 1.5.9)
|
|
76
76
|
method_source (0.9.2)
|
|
@@ -85,6 +85,9 @@ GEM
|
|
|
85
85
|
parallel (1.22.1)
|
|
86
86
|
parser (3.1.2.1)
|
|
87
87
|
ast (~> 2.4.1)
|
|
88
|
+
pp (0.3.0)
|
|
89
|
+
prettyprint
|
|
90
|
+
prettyprint (0.1.1)
|
|
88
91
|
pry (0.12.2)
|
|
89
92
|
coderay (~> 1.1.0)
|
|
90
93
|
method_source (~> 0.9.0)
|
|
@@ -100,16 +103,16 @@ GEM
|
|
|
100
103
|
nokogiri (>= 1.6)
|
|
101
104
|
rails-html-sanitizer (1.4.3)
|
|
102
105
|
loofah (~> 2.3)
|
|
103
|
-
railties (7.0.
|
|
104
|
-
actionpack (= 7.0.
|
|
105
|
-
activesupport (= 7.0.
|
|
106
|
+
railties (7.0.4)
|
|
107
|
+
actionpack (= 7.0.4)
|
|
108
|
+
activesupport (= 7.0.4)
|
|
106
109
|
method_source
|
|
107
110
|
rake (>= 12.2)
|
|
108
111
|
thor (~> 1.0)
|
|
109
112
|
zeitwerk (~> 2.5)
|
|
110
113
|
rainbow (3.1.1)
|
|
111
114
|
rake (13.0.6)
|
|
112
|
-
regexp_parser (2.
|
|
115
|
+
regexp_parser (2.6.0)
|
|
113
116
|
reline (0.3.1)
|
|
114
117
|
io-console (~> 0.5)
|
|
115
118
|
rest-client (2.1.0)
|
|
@@ -125,14 +128,14 @@ GEM
|
|
|
125
128
|
rspec-mocks (~> 3.11.0)
|
|
126
129
|
rspec-core (3.11.0)
|
|
127
130
|
rspec-support (~> 3.11.0)
|
|
128
|
-
rspec-expectations (3.11.
|
|
131
|
+
rspec-expectations (3.11.1)
|
|
129
132
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
130
133
|
rspec-support (~> 3.11.0)
|
|
131
134
|
rspec-mocks (3.11.1)
|
|
132
135
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
133
136
|
rspec-support (~> 3.11.0)
|
|
134
|
-
rspec-support (3.11.
|
|
135
|
-
rubocop (1.
|
|
137
|
+
rspec-support (3.11.1)
|
|
138
|
+
rubocop (1.36.0)
|
|
136
139
|
json (~> 2.3)
|
|
137
140
|
parallel (~> 1.10)
|
|
138
141
|
parser (>= 3.1.2.1)
|
|
@@ -144,10 +147,10 @@ GEM
|
|
|
144
147
|
unicode-display_width (>= 1.4.0, < 3.0)
|
|
145
148
|
rubocop-ast (1.21.0)
|
|
146
149
|
parser (>= 3.1.1.0)
|
|
147
|
-
rubocop-rails (2.
|
|
150
|
+
rubocop-rails (2.16.1)
|
|
148
151
|
activesupport (>= 4.2.0)
|
|
149
152
|
rack (>= 1.1)
|
|
150
|
-
rubocop (>= 1.
|
|
153
|
+
rubocop (>= 1.33.0, < 2.0)
|
|
151
154
|
ruby-progressbar (1.11.0)
|
|
152
155
|
simplecov (0.21.2)
|
|
153
156
|
docile (~> 1.1)
|
|
@@ -170,14 +173,14 @@ GEM
|
|
|
170
173
|
unf (0.1.4)
|
|
171
174
|
unf_ext
|
|
172
175
|
unf_ext (0.0.8.2)
|
|
173
|
-
unicode-display_width (2.
|
|
176
|
+
unicode-display_width (2.3.0)
|
|
174
177
|
vcr (6.1.0)
|
|
175
178
|
webmock (3.18.1)
|
|
176
179
|
addressable (>= 2.8.0)
|
|
177
180
|
crack (>= 0.3.2)
|
|
178
181
|
hashdiff (>= 0.4.0, < 2.0.0)
|
|
179
182
|
zache (0.12.0)
|
|
180
|
-
zeitwerk (2.6.
|
|
183
|
+
zeitwerk (2.6.1)
|
|
181
184
|
|
|
182
185
|
PLATFORMS
|
|
183
186
|
x86_64-linux
|
|
@@ -191,12 +194,13 @@ DEPENDENCIES
|
|
|
191
194
|
fuubar (~> 2.0)
|
|
192
195
|
gem-release (~> 0.7)
|
|
193
196
|
irb
|
|
197
|
+
pp
|
|
194
198
|
pry (~> 0.10)
|
|
195
199
|
pry-nav (~> 0.2)
|
|
196
200
|
rack (~> 2.1)
|
|
197
201
|
rack-test (~> 0.6)
|
|
198
202
|
rake (~> 13.0)
|
|
199
|
-
rspec (~> 3.
|
|
203
|
+
rspec (~> 3.11)
|
|
200
204
|
rubocop
|
|
201
205
|
rubocop-rails
|
|
202
206
|
simplecov (~> 0.9)
|
data/auth0.gemspec
CHANGED
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
|
17
17
|
s.require_paths = ['lib']
|
|
18
18
|
|
|
19
19
|
s.add_runtime_dependency 'rest-client', '~> 2.1'
|
|
20
|
-
s.add_runtime_dependency 'jwt', '~> 2.
|
|
20
|
+
s.add_runtime_dependency 'jwt', '~> 2.5'
|
|
21
21
|
s.add_runtime_dependency 'zache', '~> 0.12'
|
|
22
22
|
s.add_runtime_dependency 'addressable', '~> 2.8'
|
|
23
23
|
s.add_runtime_dependency 'retryable', '~> 3.0'
|
|
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
|
|
|
29
29
|
s.add_development_dependency 'dotenv-rails', '~> 2.0'
|
|
30
30
|
s.add_development_dependency 'pry', '~> 0.10'
|
|
31
31
|
s.add_development_dependency 'pry-nav', '~> 0.2'
|
|
32
|
-
s.add_development_dependency 'rspec', '~> 3.
|
|
32
|
+
s.add_development_dependency 'rspec', '~> 3.11'
|
|
33
33
|
s.add_development_dependency 'rack-test', '~> 0.6'
|
|
34
34
|
s.add_development_dependency 'rack', '~> 2.1'
|
|
35
35
|
s.add_development_dependency 'simplecov', '~> 0.9'
|
data/examples/ruby-api/Gemfile
CHANGED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
GEM
|
|
2
|
+
remote: http://rubygems.org/
|
|
3
|
+
specs:
|
|
4
|
+
dotenv (2.8.1)
|
|
5
|
+
jwt (2.5.0)
|
|
6
|
+
mustermann (2.0.2)
|
|
7
|
+
ruby2_keywords (~> 0.0.1)
|
|
8
|
+
nio4r (2.5.8)
|
|
9
|
+
puma (5.6.5)
|
|
10
|
+
nio4r (~> 2.0)
|
|
11
|
+
rack (2.2.4)
|
|
12
|
+
rack-protection (2.2.2)
|
|
13
|
+
rack
|
|
14
|
+
ruby2_keywords (0.0.5)
|
|
15
|
+
sinatra (2.2.2)
|
|
16
|
+
mustermann (~> 2.0)
|
|
17
|
+
rack (~> 2.2)
|
|
18
|
+
rack-protection (= 2.2.2)
|
|
19
|
+
tilt (~> 2.0)
|
|
20
|
+
tilt (2.0.11)
|
|
21
|
+
|
|
22
|
+
PLATFORMS
|
|
23
|
+
aarch64-linux
|
|
24
|
+
|
|
25
|
+
DEPENDENCIES
|
|
26
|
+
dotenv
|
|
27
|
+
jwt (~> 2.5)
|
|
28
|
+
puma
|
|
29
|
+
sinatra (~> 2.2)
|
|
30
|
+
|
|
31
|
+
BUNDLED WITH
|
|
32
|
+
2.3.7
|
data/examples/ruby-api/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#Auth0 + Ruby API Seed
|
|
1
|
+
# Auth0 + Ruby API Seed
|
|
2
2
|
|
|
3
3
|
This is the seed project you need to use if you're going to create a Ruby API. You'll mostly use this API either for a SPA or a Mobile app.
|
|
4
4
|
|
|
5
|
-
#Running the example
|
|
5
|
+
# Running the example
|
|
6
6
|
|
|
7
7
|
In order to run the example you need to have ruby installed.
|
|
8
8
|
|
data/lib/auth0/api/v2/jobs.rb
CHANGED
|
@@ -60,6 +60,9 @@ module Auth0
|
|
|
60
60
|
# :format [string] The format of the file. Valid values are: "json" and "csv".
|
|
61
61
|
# :limit [integer] Limit the number of users to export.
|
|
62
62
|
# :fields [array] A list of fields to be included in the CSV.
|
|
63
|
+
# This can either be an array of strings representing field names, or an object.
|
|
64
|
+
# If it's a string, it is mapped to the correct { name: '<field name>' } object required by the endpoint.
|
|
65
|
+
# If it's an object, it is passed through as-is to the endpoint.
|
|
63
66
|
# If omitted, a set of predefined fields will be exported.
|
|
64
67
|
#
|
|
65
68
|
# @return [json] Returns the job status and properties.
|
|
@@ -109,14 +112,22 @@ module Auth0
|
|
|
109
112
|
@jobs_path ||= '/api/v2/jobs'
|
|
110
113
|
end
|
|
111
114
|
|
|
112
|
-
# Map array of
|
|
113
|
-
# @param fields [array]
|
|
114
|
-
|
|
115
|
+
# Map array of fields for export to array of objects
|
|
116
|
+
# @param fields [array] Fields to be included in the export
|
|
117
|
+
# This can either be an array of strings representing field names, or an object.
|
|
118
|
+
# If it's a string, it is mapped to the correct { name: '<field name>' } object required by the endpoint.
|
|
119
|
+
# If it's an object, it is passed through as-is to the endpoint.
|
|
115
120
|
# @return [array] Returns the fields mapped as array of objects for the export_users endpoint
|
|
116
121
|
def fields_for_export(fields)
|
|
117
122
|
return nil if fields.to_s.empty?
|
|
118
123
|
|
|
119
|
-
fields.map { |field|
|
|
124
|
+
fields.map { |field|
|
|
125
|
+
if field.is_a? String
|
|
126
|
+
{ name: field }
|
|
127
|
+
else
|
|
128
|
+
field
|
|
129
|
+
end
|
|
130
|
+
}
|
|
120
131
|
end
|
|
121
132
|
end
|
|
122
133
|
end
|
|
@@ -9,7 +9,7 @@ module Auth0
|
|
|
9
9
|
|
|
10
10
|
# Get all organizations.
|
|
11
11
|
# @see https://auth0.com/docs/api/management/v2/#!/Organizations/get_organizations
|
|
12
|
-
# @param options [hash] The Hash options used to define the paging of
|
|
12
|
+
# @param options [hash] The Hash options used to define the paging of results
|
|
13
13
|
# * :per_page [integer] The amount of entries per page. Default: 50. Max value: 100.
|
|
14
14
|
# * :page [integer] The page number. Zero based.
|
|
15
15
|
# * :from [string] For checkpoint pagination, the ID from which to start selection from.
|
|
@@ -8,11 +8,12 @@ module Auth0
|
|
|
8
8
|
# for now, if you want to feel free to use your own http client
|
|
9
9
|
module HTTPProxy
|
|
10
10
|
attr_accessor :headers, :base_uri, :timeout, :retry_count
|
|
11
|
-
|
|
11
|
+
DEFAULT_RETRIES = 3
|
|
12
12
|
MAX_ALLOWED_RETRIES = 10
|
|
13
13
|
MAX_REQUEST_RETRY_JITTER = 250
|
|
14
14
|
MAX_REQUEST_RETRY_DELAY = 1000
|
|
15
|
-
MIN_REQUEST_RETRY_DELAY =
|
|
15
|
+
MIN_REQUEST_RETRY_DELAY = 250
|
|
16
|
+
BASE_DELAY = 100
|
|
16
17
|
|
|
17
18
|
# proxying requests from instance methods to HTTP class methods
|
|
18
19
|
%i(get post post_file put patch delete delete_with_body).each do |method|
|
|
@@ -26,14 +27,14 @@ module Auth0
|
|
|
26
27
|
|
|
27
28
|
def retry_options
|
|
28
29
|
sleep_timer = lambda do |attempt|
|
|
29
|
-
wait =
|
|
30
|
-
wait += rand(wait..wait+MAX_REQUEST_RETRY_JITTER) # Add jitter to the delay window.
|
|
30
|
+
wait = BASE_DELAY * (2**attempt-1) # Exponential delay with each subsequent request attempt.
|
|
31
|
+
wait += rand(wait+1..wait+MAX_REQUEST_RETRY_JITTER) # Add jitter to the delay window.
|
|
31
32
|
wait = [MAX_REQUEST_RETRY_DELAY, wait].min # Cap delay at MAX_REQUEST_RETRY_DELAY.
|
|
32
33
|
wait = [MIN_REQUEST_RETRY_DELAY, wait].max # Ensure delay is no less than MIN_REQUEST_RETRY_DELAY.
|
|
33
34
|
wait / 1000.to_f.round(2) # convert ms to seconds
|
|
34
35
|
end
|
|
35
36
|
|
|
36
|
-
tries = 1 + [Integer(retry_count ||
|
|
37
|
+
tries = 1 + [Integer(retry_count || DEFAULT_RETRIES), MAX_ALLOWED_RETRIES].min # Cap retries at MAX_ALLOWED_RETRIES
|
|
37
38
|
|
|
38
39
|
{
|
|
39
40
|
tries: tries,
|
|
@@ -72,15 +73,13 @@ module Auth0
|
|
|
72
73
|
|
|
73
74
|
def request(method, uri, body = {}, extra_headers = {})
|
|
74
75
|
result = if method == :get
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
# Merge custom headers into existing ones for this req.
|
|
78
|
-
# This prevents future calls from using them.
|
|
79
|
-
get_headers = headers.merge extra_headers
|
|
80
|
-
# Make the call with extra_headers, if provided.
|
|
76
|
+
@headers ||= {}
|
|
77
|
+
get_headers = @headers.merge({params: body}).merge(extra_headers)
|
|
81
78
|
call(:get, encode_uri(uri), timeout, get_headers)
|
|
82
79
|
elsif method == :delete
|
|
83
|
-
|
|
80
|
+
@headers ||= {}
|
|
81
|
+
delete_headers = @headers.merge({ params: body })
|
|
82
|
+
call(:delete, encode_uri(uri), timeout, delete_headers)
|
|
84
83
|
elsif method == :delete_with_body
|
|
85
84
|
call(:delete, encode_uri(uri), timeout, headers, body.to_json)
|
|
86
85
|
elsif method == :post_file
|
|
@@ -6,7 +6,6 @@ module Auth0
|
|
|
6
6
|
|
|
7
7
|
def initialize_token(options)
|
|
8
8
|
@token = options[:access_token] || options[:token]
|
|
9
|
-
|
|
10
9
|
# default expiry to an hour if a token was given but no expires_at
|
|
11
10
|
@token_expires_at = @token ? options[:token_expires_at] || Time.now.to_i + 3600 : nil
|
|
12
11
|
|
|
@@ -15,6 +14,7 @@ module Auth0
|
|
|
15
14
|
end
|
|
16
15
|
|
|
17
16
|
def get_token
|
|
17
|
+
# pp @token_expires_at
|
|
18
18
|
has_expired = @token && @token_expires_at ? @token_expires_at < (Time.now.to_i + 10) : false
|
|
19
19
|
|
|
20
20
|
if (@token.nil? || has_expired) && @client_id && @client_secret
|
data/lib/auth0/version.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
http_interactions:
|
|
3
3
|
- request:
|
|
4
4
|
method: patch
|
|
5
|
-
uri: https://auth0-sdk-tests.auth0.com/api/v2/clients/SftKo9ySyHnMPezQUFd0C70GBoNFM21F
|
|
5
|
+
uri: https://auth0-sdk-tests.auth0.com/api/v2/clients/SftKo9ySyHnMPezQUFd0C70GBoNFM21F
|
|
6
6
|
body:
|
|
7
7
|
encoding: UTF-8
|
|
8
8
|
string: '{"custom_login_page_on":false,"sso":true}'
|
|
@@ -12,6 +12,7 @@ http_interactions:
|
|
|
12
12
|
User-Agent:
|
|
13
13
|
- rest-client/2.1.0 (darwin19.6.0 x86_64) ruby/2.7.0p0
|
|
14
14
|
Content-Type:
|
|
15
|
+
|
|
15
16
|
- application/json
|
|
16
17
|
Auth0-Client:
|
|
17
18
|
- eyJuYW1lIjoicnVieS1hdXRoMCIsInZlcnNpb24iOiI1LjUuMCIsImVudiI6eyJydWJ5IjoiMi43LjAifX0=
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
http_interactions:
|
|
3
3
|
- request:
|
|
4
4
|
method: patch
|
|
5
|
-
uri: https://auth0-sdk-tests.auth0.com/api/v2/connections/con_WltM0fv20JCnxOuY
|
|
5
|
+
uri: https://auth0-sdk-tests.auth0.com/api/v2/connections/con_WltM0fv20JCnxOuY
|
|
6
6
|
body:
|
|
7
7
|
encoding: UTF-8
|
|
8
8
|
string: '{"options":{"mfa":{"active":true,"return_enroll_settings":true},"passwordPolicy":"excellent","strategy_version":2,"brute_force_protection":true}}'
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
http_interactions:
|
|
3
3
|
- request:
|
|
4
4
|
method: patch
|
|
5
|
-
uri: https://auth0-sdk-tests.auth0.com/api/v2/rules/rul_bsg64xEPZz4WOkXz
|
|
5
|
+
uri: https://auth0-sdk-tests.auth0.com/api/v2/rules/rul_bsg64xEPZz4WOkXz
|
|
6
6
|
body:
|
|
7
7
|
encoding: UTF-8
|
|
8
8
|
string: '{"enabled":true}'
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
http_interactions:
|
|
3
3
|
- request:
|
|
4
4
|
method: patch
|
|
5
|
-
uri: https://auth0-sdk-tests.auth0.com/api/v2/tenants/settings
|
|
5
|
+
uri: https://auth0-sdk-tests.auth0.com/api/v2/tenants/settings
|
|
6
6
|
body:
|
|
7
7
|
encoding: UTF-8
|
|
8
8
|
string: '{"friendly_name":"Auth0"}'
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
http_interactions:
|
|
3
3
|
- request:
|
|
4
4
|
method: patch
|
|
5
|
-
uri: https://auth0-sdk-tests.auth0.com/api/v2/tenants/settings
|
|
5
|
+
uri: https://auth0-sdk-tests.auth0.com/api/v2/tenants/settings
|
|
6
6
|
body:
|
|
7
7
|
encoding: UTF-8
|
|
8
8
|
string: '{"friendly_name":"Auth0-CHANGED"}'
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
http_interactions:
|
|
3
3
|
- request:
|
|
4
4
|
method: post
|
|
5
|
-
uri: https://auth0-sdk-tests.auth0.com/api/v2/users/auth0%7C613282adac819400692c0dd9/roles
|
|
5
|
+
uri: https://auth0-sdk-tests.auth0.com/api/v2/users/auth0%7C613282adac819400692c0dd9/roles
|
|
6
6
|
body:
|
|
7
7
|
encoding: UTF-8
|
|
8
8
|
string: '{"roles":["rol_2VZOCes8HgBar3Tp"]}'
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
http_interactions:
|
|
3
3
|
- request:
|
|
4
4
|
method: patch
|
|
5
|
-
uri: https://auth0-sdk-tests.auth0.com/api/v2/users/auth0%7C613282adac819400692c0dd9
|
|
5
|
+
uri: https://auth0-sdk-tests.auth0.com/api/v2/users/auth0%7C613282adac819400692c0dd9
|
|
6
6
|
body:
|
|
7
7
|
encoding: UTF-8
|
|
8
8
|
string: '{"email_verified":true,"user_metadata":{"addresses":{"home_address":"742
|
|
@@ -67,6 +67,7 @@ describe Auth0::Api::V2::Jobs do
|
|
|
67
67
|
format: 'csv',
|
|
68
68
|
limit: 10
|
|
69
69
|
})
|
|
70
|
+
|
|
70
71
|
@instance.export_users(
|
|
71
72
|
fields: ['author'],
|
|
72
73
|
connection_id: 'test-connection',
|
|
@@ -74,6 +75,23 @@ describe Auth0::Api::V2::Jobs do
|
|
|
74
75
|
limit: 10
|
|
75
76
|
)
|
|
76
77
|
end
|
|
78
|
+
|
|
79
|
+
it 'sends post to /api/v2/jobs/users-exports with export_as field' do
|
|
80
|
+
expect(@instance).to receive(:post).with(
|
|
81
|
+
'/api/v2/jobs/users-exports', {
|
|
82
|
+
fields: [{ name: 'author', export_as: 'writer' }],
|
|
83
|
+
connection_id: 'test-connection',
|
|
84
|
+
format: 'csv',
|
|
85
|
+
limit: 10
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
@instance.export_users(
|
|
89
|
+
fields: [{ name: 'author', export_as: 'writer' }],
|
|
90
|
+
connection_id: 'test-connection',
|
|
91
|
+
format: 'csv',
|
|
92
|
+
limit: 10
|
|
93
|
+
)
|
|
94
|
+
end
|
|
77
95
|
end
|
|
78
96
|
|
|
79
97
|
context '.send_verification_email' do
|
|
@@ -494,12 +494,13 @@ describe Auth0::Mixins::HTTPProxy do
|
|
|
494
494
|
end
|
|
495
495
|
|
|
496
496
|
context "Renewing tokens" do
|
|
497
|
-
|
|
498
|
-
|
|
497
|
+
let(:httpproxy_instance) {
|
|
498
|
+
DummyClassForTokens.new(
|
|
499
499
|
client_id: 'test-client-id',
|
|
500
500
|
client_secret: 'test-client-secret',
|
|
501
|
-
domain: 'auth0.com'
|
|
502
|
-
|
|
501
|
+
domain: 'auth0.com',
|
|
502
|
+
)
|
|
503
|
+
}
|
|
503
504
|
|
|
504
505
|
%i(get delete).each do |http_method|
|
|
505
506
|
context "for #{http_method}" do
|
|
@@ -507,7 +508,7 @@ describe Auth0::Mixins::HTTPProxy do
|
|
|
507
508
|
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
|
508
509
|
method: :post,
|
|
509
510
|
url: 'https://auth0.com/oauth/token',
|
|
510
|
-
)
|
|
511
|
+
)).and_return(StubResponse.new({
|
|
511
512
|
"access_token" => "access_token",
|
|
512
513
|
"expires_in" => 86400},
|
|
513
514
|
true,
|
|
@@ -515,11 +516,10 @@ describe Auth0::Mixins::HTTPProxy do
|
|
|
515
516
|
|
|
516
517
|
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
|
517
518
|
method: http_method,
|
|
518
|
-
url: 'https://auth0.com/test'
|
|
519
|
-
headers: { params: {}, "Authorization" => "Bearer access_token" }
|
|
519
|
+
url: 'https://auth0.com/test'
|
|
520
520
|
)).and_return(StubResponse.new('Some random text here', true, 200))
|
|
521
521
|
|
|
522
|
-
expect {
|
|
522
|
+
expect { httpproxy_instance.send(http_method, '/test') }.not_to raise_error
|
|
523
523
|
end
|
|
524
524
|
end
|
|
525
525
|
end
|
|
@@ -539,24 +539,24 @@ describe Auth0::Mixins::HTTPProxy do
|
|
|
539
539
|
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
|
540
540
|
method: http_method,
|
|
541
541
|
url: 'https://auth0.com/test',
|
|
542
|
-
headers:
|
|
542
|
+
headers: hash_including( "Authorization" => "Bearer access_token")
|
|
543
543
|
)).and_return(StubResponse.new('Some random text here', true, 200))
|
|
544
544
|
|
|
545
|
-
expect {
|
|
545
|
+
expect { httpproxy_instance.send(http_method, '/test') }.not_to raise_error
|
|
546
546
|
end
|
|
547
547
|
end
|
|
548
548
|
end
|
|
549
549
|
end
|
|
550
550
|
|
|
551
551
|
context "Using cached tokens" do
|
|
552
|
-
|
|
553
|
-
|
|
552
|
+
let(:httpproxy_instance) {
|
|
553
|
+
DummyClassForTokens.new(
|
|
554
554
|
client_id: 'test-client-id',
|
|
555
555
|
client_secret: 'test-client-secret',
|
|
556
556
|
domain: 'auth0.com',
|
|
557
557
|
token: 'access_token',
|
|
558
558
|
token_expires_at: Time.now.to_i + 86400)
|
|
559
|
-
|
|
559
|
+
}
|
|
560
560
|
|
|
561
561
|
%i(get delete).each do |http_method|
|
|
562
562
|
context "for #{http_method}" do
|
|
@@ -569,10 +569,10 @@ describe Auth0::Mixins::HTTPProxy do
|
|
|
569
569
|
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
|
570
570
|
method: http_method,
|
|
571
571
|
url: 'https://auth0.com/test',
|
|
572
|
-
headers:
|
|
572
|
+
headers: hash_including(params: {}, "Authorization" => "Bearer access_token")
|
|
573
573
|
)).and_return(StubResponse.new('Some random text here', true, 200))
|
|
574
574
|
|
|
575
|
-
expect {
|
|
575
|
+
expect { httpproxy_instance.send(http_method, '/test') }.not_to raise_error
|
|
576
576
|
end
|
|
577
577
|
end
|
|
578
578
|
end
|
|
@@ -588,10 +588,46 @@ describe Auth0::Mixins::HTTPProxy do
|
|
|
588
588
|
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
|
589
589
|
method: http_method,
|
|
590
590
|
url: 'https://auth0.com/test',
|
|
591
|
-
headers:
|
|
591
|
+
headers: hash_including("Authorization" => "Bearer access_token")
|
|
592
592
|
)).and_return(StubResponse.new('Some random text here', true, 200))
|
|
593
593
|
|
|
594
|
-
expect {
|
|
594
|
+
expect { httpproxy_instance.send(http_method, '/test') }.not_to raise_error
|
|
595
|
+
end
|
|
596
|
+
end
|
|
597
|
+
end
|
|
598
|
+
end
|
|
599
|
+
|
|
600
|
+
context 'Normal operation' do
|
|
601
|
+
let(:httpproxy_instance) {
|
|
602
|
+
DummyClassForTokens.new(
|
|
603
|
+
client_id: 'test-client-id',
|
|
604
|
+
client_secret: 'test-client-secret',
|
|
605
|
+
domain: 'auth0.com',
|
|
606
|
+
token: 'access_token',
|
|
607
|
+
token_expires_at: Time.now.to_i + 86400)
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
# This sets up a test matrix to verify that both :get and :delete calls (the only two HTTP methods in the proxy that mutated headers)
|
|
611
|
+
# don't bleed query params into subsequent calls to :post :patch and :put.
|
|
612
|
+
%i(get delete).each do |http_get_delete|
|
|
613
|
+
%i(post patch put).each do |http_ppp|
|
|
614
|
+
it "should not bleed :#{http_get_delete} headers/parameters to the subsequent :#{http_ppp} request" do
|
|
615
|
+
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
|
616
|
+
method: http_get_delete,
|
|
617
|
+
url: "https://auth0.com/test-#{http_get_delete}",
|
|
618
|
+
headers: hash_including(params: { email: 'test@test.com' })
|
|
619
|
+
)).and_return(StubResponse.new('OK', true, 200))
|
|
620
|
+
|
|
621
|
+
# email: parameter that is sent in the GET request should not appear
|
|
622
|
+
# as a parameter in the `headers` hash for the subsequent PATCH request.
|
|
623
|
+
expect(RestClient::Request).to receive(:execute).with(hash_including(
|
|
624
|
+
method: http_ppp,
|
|
625
|
+
url: "https://auth0.com/test-#{http_ppp}",
|
|
626
|
+
headers: hash_not_including(:params)
|
|
627
|
+
)).and_return(StubResponse.new('OK', true, 200))
|
|
628
|
+
|
|
629
|
+
expect { httpproxy_instance.send(http_get_delete, "/test-#{http_get_delete}", { email: 'test@test.com' }) }.not_to raise_error
|
|
630
|
+
expect { httpproxy_instance.send(http_ppp, "/test-#{http_ppp}") }.not_to raise_error
|
|
595
631
|
end
|
|
596
632
|
end
|
|
597
633
|
end
|
|
@@ -110,16 +110,11 @@ describe Auth0::Mixins::TokenManagement do
|
|
|
110
110
|
|
|
111
111
|
it 'does not renew existing token if no token_expires_at' do
|
|
112
112
|
params[:token] = 'test-token'
|
|
113
|
+
instance.instance_variable_set '@token_expires_at', nil
|
|
113
114
|
|
|
114
|
-
expect(RestClient::Request).not_to receive(:execute)
|
|
115
|
-
method: :post,
|
|
116
|
-
url: 'https://samples.auth0.com/oauth/token',
|
|
117
|
-
))
|
|
115
|
+
expect(RestClient::Request).not_to receive(:execute)
|
|
118
116
|
|
|
119
117
|
instance.send(:get_token)
|
|
120
|
-
|
|
121
|
-
expect(instance.instance_variable_get('@token')).to eq('test-token')
|
|
122
|
-
expect(instance.instance_variable_get('@token_expires_at')).to be_nil
|
|
123
118
|
end
|
|
124
119
|
end
|
|
125
120
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -51,6 +51,10 @@ RSpec.configure do |config|
|
|
|
51
51
|
config.filter_run focus: true
|
|
52
52
|
config.run_all_when_everything_filtered = true
|
|
53
53
|
config.include Credentials
|
|
54
|
+
|
|
55
|
+
config.expect_with :rspec do |c|
|
|
56
|
+
c.max_formatted_output_length = 1000000
|
|
57
|
+
end
|
|
54
58
|
end
|
|
55
59
|
|
|
56
60
|
def wait(time, increment = 5, elapsed_time = 0, &block)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: auth0
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.
|
|
4
|
+
version: 5.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Auth0
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2022-
|
|
14
|
+
date: 2022-10-10 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: rest-client
|
|
@@ -33,14 +33,14 @@ dependencies:
|
|
|
33
33
|
requirements:
|
|
34
34
|
- - "~>"
|
|
35
35
|
- !ruby/object:Gem::Version
|
|
36
|
-
version: 2.
|
|
36
|
+
version: '2.5'
|
|
37
37
|
type: :runtime
|
|
38
38
|
prerelease: false
|
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
40
40
|
requirements:
|
|
41
41
|
- - "~>"
|
|
42
42
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: 2.
|
|
43
|
+
version: '2.5'
|
|
44
44
|
- !ruby/object:Gem::Dependency
|
|
45
45
|
name: zache
|
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -173,14 +173,14 @@ dependencies:
|
|
|
173
173
|
requirements:
|
|
174
174
|
- - "~>"
|
|
175
175
|
- !ruby/object:Gem::Version
|
|
176
|
-
version: '3.
|
|
176
|
+
version: '3.11'
|
|
177
177
|
type: :development
|
|
178
178
|
prerelease: false
|
|
179
179
|
version_requirements: !ruby/object:Gem::Requirement
|
|
180
180
|
requirements:
|
|
181
181
|
- - "~>"
|
|
182
182
|
- !ruby/object:Gem::Version
|
|
183
|
-
version: '3.
|
|
183
|
+
version: '3.11'
|
|
184
184
|
- !ruby/object:Gem::Dependency
|
|
185
185
|
name: rack-test
|
|
186
186
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -260,6 +260,8 @@ extra_rdoc_files: []
|
|
|
260
260
|
files:
|
|
261
261
|
- ".bundle/config"
|
|
262
262
|
- ".circleci/config.yml"
|
|
263
|
+
- ".devcontainer/Dockerfile"
|
|
264
|
+
- ".devcontainer/devcontainer.json"
|
|
263
265
|
- ".env.example"
|
|
264
266
|
- ".gemrelease"
|
|
265
267
|
- ".github/CODEOWNERS"
|
|
@@ -291,6 +293,7 @@ files:
|
|
|
291
293
|
- examples/ruby-api/.env.example
|
|
292
294
|
- examples/ruby-api/.gitignore
|
|
293
295
|
- examples/ruby-api/Gemfile
|
|
296
|
+
- examples/ruby-api/Gemfile.lock
|
|
294
297
|
- examples/ruby-api/README.md
|
|
295
298
|
- examples/ruby-api/config.ru
|
|
296
299
|
- examples/ruby-api/main.rb
|