workos 1.2.1 → 1.5.1
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 +3 -6
- 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/audit_trail_spec.rb +2 -0
- data/spec/lib/workos/directory_sync_spec.rb +21 -19
- data/spec/lib/workos/organizations_spec.rb +13 -11
- data/spec/lib/workos/passwordless_spec.rb +2 -0
- data/spec/lib/workos/portal_spec.rb +2 -0
- data/spec/lib/workos/sso_spec.rb +21 -19
- data/spec/spec_helper.rb +3 -0
- 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
- data/spec/support/shared_examples/client_spec.rb +16 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5aecf9fa40a85a4623e12f1ba6804c87fde006931bed9a443327f6851d714df1
|
4
|
+
data.tar.gz: 63d0daa095bf705643906247371d36a15f7ec9aac2b9d5b04293fb7e135a1d57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6c47e8d64139d4e3452dca04e6466b177b8c029b97779e58b93407d5e08f9c886076a0101a9b272376fe33e9ee16c180464e25b3be42a6089b921108187eeb1
|
7
|
+
data.tar.gz: 577c4b464439eed2216d1011d637d619cd0af9c69f985f5d56f56ce58f6c72deb71f0d2dc66efc1014daa7d973cd2c1d3e95a2f729627658d4235ce2da683184
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
workos (1.
|
4
|
+
workos (1.5.1)
|
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.9094)
|
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
@@ -9,12 +9,9 @@ module WorkOS
|
|
9
9
|
|
10
10
|
sig { returns(Net::HTTP) }
|
11
11
|
def client
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
@client.use_ssl = true
|
16
|
-
|
17
|
-
@client
|
12
|
+
Net::HTTP.new(WorkOS::API_HOSTNAME, 443).tap do |http_client|
|
13
|
+
http_client.use_ssl = true
|
14
|
+
end
|
18
15
|
end
|
19
16
|
|
20
17
|
sig do
|
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
@@ -2,6 +2,8 @@
|
|
2
2
|
# typed: false
|
3
3
|
|
4
4
|
describe WorkOS::DirectorySync do
|
5
|
+
it_behaves_like 'client'
|
6
|
+
|
5
7
|
describe '.list_directories' do
|
6
8
|
context 'with no options' do
|
7
9
|
it 'returns directories and metadata' do
|
@@ -282,7 +284,7 @@ describe WorkOS::DirectorySync do
|
|
282
284
|
context 'with directory option' do
|
283
285
|
it 'forms the proper request to the API' do
|
284
286
|
request_args = [
|
285
|
-
'/directory_users?directory=
|
287
|
+
'/directory_users?directory=directory_01FAZYMST676QMTFN1DDJZZX87',
|
286
288
|
'Content-Type' => 'application/json'
|
287
289
|
]
|
288
290
|
|
@@ -293,10 +295,10 @@ describe WorkOS::DirectorySync do
|
|
293
295
|
|
294
296
|
VCR.use_cassette 'directory_sync/list_users/with_directory' do
|
295
297
|
users = described_class.list_users(
|
296
|
-
directory: '
|
298
|
+
directory: 'directory_01FAZYMST676QMTFN1DDJZZX87',
|
297
299
|
)
|
298
300
|
|
299
|
-
expect(users.data.size).to eq(
|
301
|
+
expect(users.data.size).to eq(4)
|
300
302
|
end
|
301
303
|
end
|
302
304
|
end
|
@@ -304,7 +306,7 @@ describe WorkOS::DirectorySync do
|
|
304
306
|
context 'with group option' do
|
305
307
|
it 'forms the proper request to the API' do
|
306
308
|
request_args = [
|
307
|
-
'/directory_users?group=
|
309
|
+
'/directory_users?group=directory_group_01FBXGP79EJAYKW0WS9JCK1V6E',
|
308
310
|
'Content-Type' => 'application/json'
|
309
311
|
]
|
310
312
|
|
@@ -315,10 +317,10 @@ describe WorkOS::DirectorySync do
|
|
315
317
|
|
316
318
|
VCR.use_cassette 'directory_sync/list_users/with_group' do
|
317
319
|
users = described_class.list_users(
|
318
|
-
group: '
|
320
|
+
group: 'directory_group_01FBXGP79EJAYKW0WS9JCK1V6E',
|
319
321
|
)
|
320
322
|
|
321
|
-
expect(users.data.size).to eq(
|
323
|
+
expect(users.data.size).to eq(1)
|
322
324
|
end
|
323
325
|
end
|
324
326
|
end
|
@@ -326,8 +328,8 @@ describe WorkOS::DirectorySync do
|
|
326
328
|
context 'with the before option' do
|
327
329
|
it 'forms the proper request to the API' do
|
328
330
|
request_args = [
|
329
|
-
'/directory_users?before=
|
330
|
-
'directory=
|
331
|
+
'/directory_users?before=directory_user_01FAZYNPC8TJBP7Y2ERT51MGDF&'\
|
332
|
+
'directory=directory_01FAZYMST676QMTFN1DDJZZX87',
|
331
333
|
'Content-Type' => 'application/json'
|
332
334
|
]
|
333
335
|
|
@@ -338,8 +340,8 @@ describe WorkOS::DirectorySync do
|
|
338
340
|
|
339
341
|
VCR.use_cassette 'directory_sync/list_users/with_before' do
|
340
342
|
users = described_class.list_users(
|
341
|
-
before: '
|
342
|
-
directory: '
|
343
|
+
before: 'directory_user_01FAZYNPC8TJBP7Y2ERT51MGDF',
|
344
|
+
directory: 'directory_01FAZYMST676QMTFN1DDJZZX87',
|
343
345
|
)
|
344
346
|
|
345
347
|
expect(users.data.size).to eq(2)
|
@@ -350,8 +352,8 @@ describe WorkOS::DirectorySync do
|
|
350
352
|
context 'with the after option' do
|
351
353
|
it 'forms the proper request to the API' do
|
352
354
|
request_args = [
|
353
|
-
'/directory_users?after=
|
354
|
-
'directory=
|
355
|
+
'/directory_users?after=directory_user_01FAZYNPC8TJBP7Y2ERT51MGDF&' \
|
356
|
+
'directory=directory_01FAZYMST676QMTFN1DDJZZX87',
|
355
357
|
'Content-Type' => 'application/json'
|
356
358
|
]
|
357
359
|
|
@@ -362,11 +364,11 @@ describe WorkOS::DirectorySync do
|
|
362
364
|
|
363
365
|
VCR.use_cassette 'directory_sync/list_users/with_after' do
|
364
366
|
users = described_class.list_users(
|
365
|
-
after: '
|
366
|
-
directory: '
|
367
|
+
after: 'directory_user_01FAZYNPC8TJBP7Y2ERT51MGDF',
|
368
|
+
directory: 'directory_01FAZYMST676QMTFN1DDJZZX87',
|
367
369
|
)
|
368
370
|
|
369
|
-
expect(users.data.size).to eq(
|
371
|
+
expect(users.data.size).to eq(1)
|
370
372
|
end
|
371
373
|
end
|
372
374
|
end
|
@@ -375,7 +377,7 @@ describe WorkOS::DirectorySync do
|
|
375
377
|
it 'forms the proper request to the API' do
|
376
378
|
request_args = [
|
377
379
|
'/directory_users?limit=2&' \
|
378
|
-
'directory=
|
380
|
+
'directory=directory_01FAZYMST676QMTFN1DDJZZX87',
|
379
381
|
'Content-Type' => 'application/json'
|
380
382
|
]
|
381
383
|
|
@@ -387,7 +389,7 @@ describe WorkOS::DirectorySync do
|
|
387
389
|
VCR.use_cassette 'directory_sync/list_users/with_limit' do
|
388
390
|
users = described_class.list_users(
|
389
391
|
limit: 2,
|
390
|
-
directory: '
|
392
|
+
directory: 'directory_01FAZYMST676QMTFN1DDJZZX87',
|
391
393
|
)
|
392
394
|
|
393
395
|
expect(users.data.size).to eq(2)
|
@@ -425,10 +427,10 @@ describe WorkOS::DirectorySync do
|
|
425
427
|
it 'returns a user' do
|
426
428
|
VCR.use_cassette('directory_sync/get_user') do
|
427
429
|
user = WorkOS::DirectorySync.get_user(
|
428
|
-
'
|
430
|
+
'directory_user_01FAZYNPC8M0HRYTKFP2GNX852',
|
429
431
|
)
|
430
432
|
|
431
|
-
expect(user['first_name']).to eq('
|
433
|
+
expect(user['first_name']).to eq('Logan')
|
432
434
|
end
|
433
435
|
end
|
434
436
|
end
|