workos 1.2.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -3
- data/lib/workos/client.rb +1 -1
- data/lib/workos/connection.rb +9 -1
- data/lib/workos/directory.rb +12 -1
- data/lib/workos/directory_user.rb +9 -1
- data/lib/workos/errors.rb +13 -2
- data/lib/workos/organization.rb +7 -1
- data/lib/workos/sso.rb +6 -0
- data/lib/workos/types/connection_struct.rb +2 -0
- data/lib/workos/types/directory_struct.rb +3 -0
- data/lib/workos/types/directory_user_struct.rb +2 -0
- data/lib/workos/types/organization_struct.rb +2 -0
- data/lib/workos/types/provider_enum.rb +1 -0
- data/lib/workos/version.rb +1 -1
- data/spec/lib/workos/directory_sync_spec.rb +19 -19
- data/spec/lib/workos/organizations_spec.rb +11 -11
- data/spec/lib/workos/sso_spec.rb +19 -19
- data/spec/support/fixtures/vcr_cassettes/directory_sync/get_user.yml +40 -16
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_directories/with_after.yml +12 -9
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_directories/with_before.yml +8 -5
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_directories/with_domain.yml +8 -8
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_directories/with_limit.yml +9 -9
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_directories/with_no_options.yml +23 -10
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_directories/with_search.yml +8 -8
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_users/with_after.yml +128 -28
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_users/with_before.yml +31 -18
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_users/with_directory.yml +136 -35
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_users/with_group.yml +128 -18
- data/spec/support/fixtures/vcr_cassettes/directory_sync/list_users/with_limit.yml +131 -17
- data/spec/support/fixtures/vcr_cassettes/organization/create.yml +28 -16
- data/spec/support/fixtures/vcr_cassettes/organization/get.yml +27 -16
- data/spec/support/fixtures/vcr_cassettes/organization/list.yml +29 -14
- data/spec/support/fixtures/vcr_cassettes/organization/update.yml +27 -16
- data/spec/support/fixtures/vcr_cassettes/sso/get_connection_with_valid_id.yml +28 -16
- data/spec/support/fixtures/vcr_cassettes/sso/list_connections/with_after.yml +25 -15
- data/spec/support/fixtures/vcr_cassettes/sso/list_connections/with_before.yml +28 -15
- data/spec/support/fixtures/vcr_cassettes/sso/list_connections/with_connection_type.yml +31 -14
- data/spec/support/fixtures/vcr_cassettes/sso/list_connections/with_domain.yml +27 -13
- data/spec/support/fixtures/vcr_cassettes/sso/list_connections/with_limit.yml +24 -15
- data/spec/support/fixtures/vcr_cassettes/sso/list_connections/with_no_options.yml +30 -14
- data/spec/support/fixtures/vcr_cassettes/sso/list_connections/with_organization_id.yml +28 -14
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae5493072c3719c3a6475116ed51d7955e072fb9499a9a40b231482ffd9db082
|
4
|
+
data.tar.gz: 451ba6d7ac9542bf9cda07fe9703035fb8d58d0b1e6b4beceb4b6e7273e3b3f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5a7b8b11117bf140ee16cd1f390cd4c94cb9dba75c5c1668cc558290a2619e016c6e59f47ae2a13d5483e61078d79731bee619643ca6ec9640464b0e96a3d17
|
7
|
+
data.tar.gz: 1534875a20f5410c6b9f9a9680cb9da1ad95247308765a3dc8917f3ffde2c2e1535ae56f022051207f69295d678f621a94b8b9f9ac8ea70812ec3f4108d6edef
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
workos (1.
|
4
|
+
workos (1.5.0)
|
5
5
|
sorbet-runtime (~> 0.5)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
addressable (2.
|
10
|
+
addressable (2.8.0)
|
11
11
|
public_suffix (>= 2.0.2, < 5.0)
|
12
12
|
ast (2.4.2)
|
13
13
|
codecov (0.2.12)
|
@@ -60,7 +60,7 @@ GEM
|
|
60
60
|
simplecov_json_formatter (0.1.2)
|
61
61
|
sorbet (0.5.6388)
|
62
62
|
sorbet-static (= 0.5.6388)
|
63
|
-
sorbet-runtime (0.5.
|
63
|
+
sorbet-runtime (0.5.9035)
|
64
64
|
sorbet-static (0.5.6388-universal-darwin-14)
|
65
65
|
sorbet-static (0.5.6388-universal-darwin-15)
|
66
66
|
sorbet-static (0.5.6388-universal-darwin-16)
|
data/lib/workos/client.rb
CHANGED
@@ -48,7 +48,7 @@ module WorkOS
|
|
48
48
|
'Content-Type' => 'application/json',
|
49
49
|
)
|
50
50
|
|
51
|
-
request['Authorization'] = "Bearer #{access_token || WorkOS.key!}
|
51
|
+
request['Authorization'] = "Bearer #{access_token || WorkOS.key!}" if auth
|
52
52
|
request['User-Agent'] = user_agent
|
53
53
|
request
|
54
54
|
end
|
data/lib/workos/connection.rb
CHANGED
@@ -10,8 +10,9 @@ module WorkOS
|
|
10
10
|
extend T::Sig
|
11
11
|
|
12
12
|
attr_accessor :id, :name, :connection_type, :domains, :organization_id,
|
13
|
-
:state, :status
|
13
|
+
:state, :status, :created_at, :updated_at
|
14
14
|
|
15
|
+
# rubocop:disable Metrics/AbcSize
|
15
16
|
sig { params(json: String).void }
|
16
17
|
def initialize(json)
|
17
18
|
raw = parse_json(json)
|
@@ -23,7 +24,10 @@ module WorkOS
|
|
23
24
|
@organization_id = T.let(raw.organization_id, String)
|
24
25
|
@state = T.let(raw.state, String)
|
25
26
|
@status = T.let(raw.status, String)
|
27
|
+
@created_at = T.let(raw.created_at, String)
|
28
|
+
@updated_at = T.let(raw.updated_at, String)
|
26
29
|
end
|
30
|
+
# rubocop:enable Metrics/AbcSize
|
27
31
|
|
28
32
|
def to_json(*)
|
29
33
|
{
|
@@ -34,6 +38,8 @@ module WorkOS
|
|
34
38
|
organization_id: organization_id,
|
35
39
|
state: state,
|
36
40
|
status: status,
|
41
|
+
created_at: created_at,
|
42
|
+
updated_at: updated_at,
|
37
43
|
}
|
38
44
|
end
|
39
45
|
|
@@ -51,6 +57,8 @@ module WorkOS
|
|
51
57
|
organization_id: hash[:organization_id],
|
52
58
|
state: hash[:state],
|
53
59
|
status: hash[:status],
|
60
|
+
created_at: hash[:created_at],
|
61
|
+
updated_at: hash[:updated_at],
|
54
62
|
)
|
55
63
|
end
|
56
64
|
end
|
data/lib/workos/directory.rb
CHANGED
@@ -8,8 +8,9 @@ module WorkOS
|
|
8
8
|
class Directory
|
9
9
|
extend T::Sig
|
10
10
|
|
11
|
-
attr_accessor :id, :domain, :name, :type, :state
|
11
|
+
attr_accessor :id, :domain, :name, :type, :state, :organization_id, :created_at, :updated_at
|
12
12
|
|
13
|
+
# rubocop:disable Metrics/AbcSize
|
13
14
|
sig { params(json: String).void }
|
14
15
|
def initialize(json)
|
15
16
|
raw = parse_json(json)
|
@@ -19,7 +20,11 @@ module WorkOS
|
|
19
20
|
@domain = T.let(raw.domain, String)
|
20
21
|
@type = T.let(raw.type, String)
|
21
22
|
@state = T.let(raw.state, String)
|
23
|
+
@organization_id = T.let(raw.organization_id, String)
|
24
|
+
@created_at = T.let(raw.created_at, String)
|
25
|
+
@updated_at = T.let(raw.updated_at, String)
|
22
26
|
end
|
27
|
+
# rubocop:enable Metrics/AbcSize
|
23
28
|
|
24
29
|
def to_json(*)
|
25
30
|
{
|
@@ -28,6 +33,9 @@ module WorkOS
|
|
28
33
|
domain: domain,
|
29
34
|
type: type,
|
30
35
|
state: state,
|
36
|
+
organization_id: organization_id,
|
37
|
+
created_at: created_at,
|
38
|
+
updated_at: updated_at,
|
31
39
|
}
|
32
40
|
end
|
33
41
|
|
@@ -47,6 +55,9 @@ module WorkOS
|
|
47
55
|
domain: hash[:domain],
|
48
56
|
type: hash[:type],
|
49
57
|
state: hash[:state],
|
58
|
+
organization_id: hash[:organization_id],
|
59
|
+
created_at: hash[:created_at],
|
60
|
+
updated_at: hash[:updated_at],
|
50
61
|
)
|
51
62
|
end
|
52
63
|
end
|
@@ -9,8 +9,9 @@ module WorkOS
|
|
9
9
|
extend T::Sig
|
10
10
|
|
11
11
|
attr_accessor :id, :idp_id, :emails, :first_name, :last_name, :username, :state,
|
12
|
-
:raw_attributes
|
12
|
+
:groups, :custom_attributes, :raw_attributes
|
13
13
|
|
14
|
+
# rubocop:disable Metrics/AbcSize
|
14
15
|
sig { params(json: String).void }
|
15
16
|
def initialize(json)
|
16
17
|
raw = parse_json(json)
|
@@ -22,8 +23,11 @@ module WorkOS
|
|
22
23
|
@last_name = raw.last_name
|
23
24
|
@username = raw.username
|
24
25
|
@state = raw.state
|
26
|
+
@groups = T.let(raw.groups, Array)
|
27
|
+
@custom_attributes = raw.custom_attributes
|
25
28
|
@raw_attributes = raw.raw_attributes
|
26
29
|
end
|
30
|
+
# rubocop:enable Metrics/AbcSize
|
27
31
|
|
28
32
|
def to_json(*)
|
29
33
|
{
|
@@ -34,6 +38,8 @@ module WorkOS
|
|
34
38
|
last_name: last_name,
|
35
39
|
username: username,
|
36
40
|
state: state,
|
41
|
+
groups: groups,
|
42
|
+
custom_attributes: custom_attributes,
|
37
43
|
raw_attributes: raw_attributes,
|
38
44
|
}
|
39
45
|
end
|
@@ -56,6 +62,8 @@ module WorkOS
|
|
56
62
|
last_name: hash[:last_name],
|
57
63
|
username: hash[:username],
|
58
64
|
state: hash[:state],
|
65
|
+
groups: hash[:groups],
|
66
|
+
custom_attributes: hash[:custom_attributes],
|
59
67
|
raw_attributes: hash[:raw_attributes],
|
60
68
|
)
|
61
69
|
end
|
data/lib/workos/errors.rb
CHANGED
@@ -13,12 +13,16 @@ module WorkOS
|
|
13
13
|
sig do
|
14
14
|
params(
|
15
15
|
message: T.nilable(String),
|
16
|
+
error: T.nilable(String),
|
17
|
+
error_description: T.nilable(String),
|
16
18
|
http_status: T.nilable(Integer),
|
17
19
|
request_id: T.nilable(String),
|
18
20
|
).void
|
19
21
|
end
|
20
|
-
def initialize(message: nil, http_status: nil, request_id: nil)
|
22
|
+
def initialize(message: nil, error: nil, error_description: nil, http_status: nil, request_id: nil)
|
21
23
|
@message = message
|
24
|
+
@error = error
|
25
|
+
@error_description = error_description
|
22
26
|
@http_status = http_status
|
23
27
|
@request_id = request_id
|
24
28
|
end
|
@@ -27,7 +31,14 @@ module WorkOS
|
|
27
31
|
def to_s
|
28
32
|
status_string = @http_status.nil? ? '' : "Status #{@http_status}, "
|
29
33
|
id_string = @request_id.nil? ? '' : " - request ID: #{@request_id}"
|
30
|
-
|
34
|
+
if @error && @error_description
|
35
|
+
error_string = "error: #{@error}, error_description: #{@error_description}"
|
36
|
+
"#{status_string}#{error_string}#{id_string}"
|
37
|
+
elsif @error
|
38
|
+
"#{status_string}#{@error}#{id_string}"
|
39
|
+
else
|
40
|
+
"#{status_string}#{@message}#{id_string}"
|
41
|
+
end
|
31
42
|
end
|
32
43
|
end
|
33
44
|
|
data/lib/workos/organization.rb
CHANGED
@@ -8,7 +8,7 @@ module WorkOS
|
|
8
8
|
class Organization
|
9
9
|
extend T::Sig
|
10
10
|
|
11
|
-
attr_accessor :id, :domains, :name
|
11
|
+
attr_accessor :id, :domains, :name, :created_at, :updated_at
|
12
12
|
|
13
13
|
sig { params(json: String).void }
|
14
14
|
def initialize(json)
|
@@ -17,6 +17,8 @@ module WorkOS
|
|
17
17
|
@id = T.let(raw.id, String)
|
18
18
|
@name = T.let(raw.name, String)
|
19
19
|
@domains = T.let(raw.domains, Array)
|
20
|
+
@created_at = T.let(raw.created_at, String)
|
21
|
+
@updated_at = T.let(raw.updated_at, String)
|
20
22
|
end
|
21
23
|
|
22
24
|
def to_json(*)
|
@@ -24,6 +26,8 @@ module WorkOS
|
|
24
26
|
id: id,
|
25
27
|
name: name,
|
26
28
|
domains: domains,
|
29
|
+
created_at: created_at,
|
30
|
+
updated_at: updated_at,
|
27
31
|
}
|
28
32
|
end
|
29
33
|
|
@@ -41,6 +45,8 @@ module WorkOS
|
|
41
45
|
id: hash[:id],
|
42
46
|
name: hash[:name],
|
43
47
|
domains: hash[:domains],
|
48
|
+
created_at: hash[:created_at],
|
49
|
+
updated_at: hash[:updated_at],
|
44
50
|
)
|
45
51
|
end
|
46
52
|
end
|
data/lib/workos/sso.rb
CHANGED
@@ -248,12 +248,15 @@ module WorkOS
|
|
248
248
|
end
|
249
249
|
|
250
250
|
sig { params(response: Net::HTTPResponse).void }
|
251
|
+
# rubocop:disable Metrics/MethodLength
|
251
252
|
def check_and_raise_profile_and_token_error(response:)
|
252
253
|
begin
|
253
254
|
body = JSON.parse(response.body)
|
254
255
|
return if body['access_token'] && body['profile']
|
255
256
|
|
256
257
|
message = body['message']
|
258
|
+
error = body['error']
|
259
|
+
error_description = body['error_description']
|
257
260
|
request_id = response['x-request-id']
|
258
261
|
rescue StandardError
|
259
262
|
message = 'Something went wrong'
|
@@ -261,10 +264,13 @@ module WorkOS
|
|
261
264
|
|
262
265
|
raise APIError.new(
|
263
266
|
message: message,
|
267
|
+
error: error,
|
268
|
+
error_description: error_description,
|
264
269
|
http_status: nil,
|
265
270
|
request_id: request_id,
|
266
271
|
)
|
267
272
|
end
|
273
|
+
# rubocop:enable Metrics/MethodLength
|
268
274
|
end
|
269
275
|
end
|
270
276
|
end
|
@@ -13,6 +13,8 @@ module WorkOS
|
|
13
13
|
const :last_name, T.nilable(String)
|
14
14
|
const :username, T.nilable(String)
|
15
15
|
const :state, T.nilable(String)
|
16
|
+
const :groups, T::Array[T.untyped]
|
17
|
+
const :custom_attributes, T::Hash[Symbol, T.untyped]
|
16
18
|
const :raw_attributes, T::Hash[Symbol, Object]
|
17
19
|
end
|
18
20
|
end
|
data/lib/workos/version.rb
CHANGED
@@ -282,7 +282,7 @@ describe WorkOS::DirectorySync do
|
|
282
282
|
context 'with directory option' do
|
283
283
|
it 'forms the proper request to the API' do
|
284
284
|
request_args = [
|
285
|
-
'/directory_users?directory=
|
285
|
+
'/directory_users?directory=directory_01FAZYMST676QMTFN1DDJZZX87',
|
286
286
|
'Content-Type' => 'application/json'
|
287
287
|
]
|
288
288
|
|
@@ -293,10 +293,10 @@ describe WorkOS::DirectorySync do
|
|
293
293
|
|
294
294
|
VCR.use_cassette 'directory_sync/list_users/with_directory' do
|
295
295
|
users = described_class.list_users(
|
296
|
-
directory: '
|
296
|
+
directory: 'directory_01FAZYMST676QMTFN1DDJZZX87',
|
297
297
|
)
|
298
298
|
|
299
|
-
expect(users.data.size).to eq(
|
299
|
+
expect(users.data.size).to eq(4)
|
300
300
|
end
|
301
301
|
end
|
302
302
|
end
|
@@ -304,7 +304,7 @@ describe WorkOS::DirectorySync do
|
|
304
304
|
context 'with group option' do
|
305
305
|
it 'forms the proper request to the API' do
|
306
306
|
request_args = [
|
307
|
-
'/directory_users?group=
|
307
|
+
'/directory_users?group=directory_group_01FBXGP79EJAYKW0WS9JCK1V6E',
|
308
308
|
'Content-Type' => 'application/json'
|
309
309
|
]
|
310
310
|
|
@@ -315,10 +315,10 @@ describe WorkOS::DirectorySync do
|
|
315
315
|
|
316
316
|
VCR.use_cassette 'directory_sync/list_users/with_group' do
|
317
317
|
users = described_class.list_users(
|
318
|
-
group: '
|
318
|
+
group: 'directory_group_01FBXGP79EJAYKW0WS9JCK1V6E',
|
319
319
|
)
|
320
320
|
|
321
|
-
expect(users.data.size).to eq(
|
321
|
+
expect(users.data.size).to eq(1)
|
322
322
|
end
|
323
323
|
end
|
324
324
|
end
|
@@ -326,8 +326,8 @@ describe WorkOS::DirectorySync do
|
|
326
326
|
context 'with the before option' do
|
327
327
|
it 'forms the proper request to the API' do
|
328
328
|
request_args = [
|
329
|
-
'/directory_users?before=
|
330
|
-
'directory=
|
329
|
+
'/directory_users?before=directory_user_01FAZYNPC8TJBP7Y2ERT51MGDF&'\
|
330
|
+
'directory=directory_01FAZYMST676QMTFN1DDJZZX87',
|
331
331
|
'Content-Type' => 'application/json'
|
332
332
|
]
|
333
333
|
|
@@ -338,8 +338,8 @@ describe WorkOS::DirectorySync do
|
|
338
338
|
|
339
339
|
VCR.use_cassette 'directory_sync/list_users/with_before' do
|
340
340
|
users = described_class.list_users(
|
341
|
-
before: '
|
342
|
-
directory: '
|
341
|
+
before: 'directory_user_01FAZYNPC8TJBP7Y2ERT51MGDF',
|
342
|
+
directory: 'directory_01FAZYMST676QMTFN1DDJZZX87',
|
343
343
|
)
|
344
344
|
|
345
345
|
expect(users.data.size).to eq(2)
|
@@ -350,8 +350,8 @@ describe WorkOS::DirectorySync do
|
|
350
350
|
context 'with the after option' do
|
351
351
|
it 'forms the proper request to the API' do
|
352
352
|
request_args = [
|
353
|
-
'/directory_users?after=
|
354
|
-
'directory=
|
353
|
+
'/directory_users?after=directory_user_01FAZYNPC8TJBP7Y2ERT51MGDF&' \
|
354
|
+
'directory=directory_01FAZYMST676QMTFN1DDJZZX87',
|
355
355
|
'Content-Type' => 'application/json'
|
356
356
|
]
|
357
357
|
|
@@ -362,11 +362,11 @@ describe WorkOS::DirectorySync do
|
|
362
362
|
|
363
363
|
VCR.use_cassette 'directory_sync/list_users/with_after' do
|
364
364
|
users = described_class.list_users(
|
365
|
-
after: '
|
366
|
-
directory: '
|
365
|
+
after: 'directory_user_01FAZYNPC8TJBP7Y2ERT51MGDF',
|
366
|
+
directory: 'directory_01FAZYMST676QMTFN1DDJZZX87',
|
367
367
|
)
|
368
368
|
|
369
|
-
expect(users.data.size).to eq(
|
369
|
+
expect(users.data.size).to eq(1)
|
370
370
|
end
|
371
371
|
end
|
372
372
|
end
|
@@ -375,7 +375,7 @@ describe WorkOS::DirectorySync do
|
|
375
375
|
it 'forms the proper request to the API' do
|
376
376
|
request_args = [
|
377
377
|
'/directory_users?limit=2&' \
|
378
|
-
'directory=
|
378
|
+
'directory=directory_01FAZYMST676QMTFN1DDJZZX87',
|
379
379
|
'Content-Type' => 'application/json'
|
380
380
|
]
|
381
381
|
|
@@ -387,7 +387,7 @@ describe WorkOS::DirectorySync do
|
|
387
387
|
VCR.use_cassette 'directory_sync/list_users/with_limit' do
|
388
388
|
users = described_class.list_users(
|
389
389
|
limit: 2,
|
390
|
-
directory: '
|
390
|
+
directory: 'directory_01FAZYMST676QMTFN1DDJZZX87',
|
391
391
|
)
|
392
392
|
|
393
393
|
expect(users.data.size).to eq(2)
|
@@ -425,10 +425,10 @@ describe WorkOS::DirectorySync do
|
|
425
425
|
it 'returns a user' do
|
426
426
|
VCR.use_cassette('directory_sync/get_user') do
|
427
427
|
user = WorkOS::DirectorySync.get_user(
|
428
|
-
'
|
428
|
+
'directory_user_01FAZYNPC8M0HRYTKFP2GNX852',
|
429
429
|
)
|
430
430
|
|
431
|
-
expect(user['first_name']).to eq('
|
431
|
+
expect(user['first_name']).to eq('Logan')
|
432
432
|
end
|
433
433
|
end
|
434
434
|
end
|