trusona 2.3.0 → 2.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.gitignore +3 -0
  5. data/.rubocop.yml +13 -0
  6. data/.ruby-version +1 -1
  7. data/.travis.yml +19 -15
  8. data/README.md +4 -3
  9. data/integrations/buster.rb +15 -0
  10. data/integrations/spec_helper.rb +3 -0
  11. data/integrations/trusonafication_spec.rb +18 -3
  12. data/lib/trusona.rb +3 -1
  13. data/lib/trusona/api/signed_request.rb +4 -1
  14. data/lib/trusona/api/verified_response.rb +6 -1
  15. data/lib/trusona/identity_document.rb +0 -6
  16. data/lib/trusona/mappers/base_mapper.rb +5 -0
  17. data/lib/trusona/mappers/paired_tru_code_mapper.rb +1 -0
  18. data/lib/trusona/resources/base_resource.rb +1 -1
  19. data/lib/trusona/resources/device_user_binding.rb +1 -0
  20. data/lib/trusona/resources/device_user_binding_activation.rb +2 -1
  21. data/lib/trusona/resources/identity_document.rb +4 -4
  22. data/lib/trusona/resources/paired_tru_code.rb +1 -0
  23. data/lib/trusona/resources/tru_code.rb +2 -1
  24. data/lib/trusona/resources/trusonafication.rb +29 -20
  25. data/lib/trusona/resources/user_account.rb +6 -2
  26. data/lib/trusona/resources/user_identifier.rb +3 -1
  27. data/lib/trusona/resources/validators.rb +1 -0
  28. data/lib/trusona/services/base_service.rb +9 -2
  29. data/lib/trusona/services/device_user_bindings_service.rb +3 -3
  30. data/lib/trusona/services/identity_documents_service.rb +3 -3
  31. data/lib/trusona/services/paired_tru_code_service.rb +1 -0
  32. data/lib/trusona/trusonafication.rb +32 -3
  33. data/lib/trusona/version.rb +1 -1
  34. data/lib/trusona/workers/device_finder.rb +1 -0
  35. data/lib/trusona/workers/identity_document_finder.rb +1 -0
  36. data/lib/trusona/workers/paired_tru_code_finder.rb +1 -0
  37. data/lib/trusona/workers/tru_code_finder.rb +1 -0
  38. data/lib/trusona/workers/trusonafication_canceler.rb +27 -0
  39. data/lib/trusona/workers/trusonafication_creator.rb +2 -1
  40. data/lib/trusona/workers/trusonafication_finder.rb +1 -1
  41. data/lib/trusona/workers/user_account_finder.rb +1 -3
  42. data/lib/trusona/workers/user_deactivator.rb +1 -3
  43. data/lib/trusona/workers/user_identifier_finder.rb +1 -0
  44. data/trusona.cnf +14 -0
  45. data/trusona.gemspec +9 -7
  46. metadata +85 -57
  47. metadata.gz.sig +0 -0
  48. data/certs/trusona.pem +0 -34
  49. data/trusona.key.pem.enc +0 -0
@@ -38,12 +38,12 @@ module Trusona
38
38
  @emails = parse_emails(params_with_symbol_keys[:emails])
39
39
  @max_level = parse_max_level(params_with_symbol_keys[:metadata])
40
40
 
41
- @params = params_with_symbol_keys
41
+ @params = params_with_symbol_keys
42
42
  end
43
43
  # rubocop:enable Metrics/MethodLength
44
44
  # rubocop:enable Metrics/AbcSize
45
45
 
46
- def to_json
46
+ def to_json(*_args)
47
47
  JSON(to_h)
48
48
  end
49
49
 
@@ -52,20 +52,24 @@ module Trusona
52
52
  def determine_status(status)
53
53
  return Status::INACTIVE if status == 'inactive'
54
54
  return Status::ACTIVE if status == 'active'
55
+
55
56
  Status::UNKNOWN
56
57
  end
57
58
 
58
59
  def parse_emails(emails)
59
60
  return [] if emails.nil? || emails.empty?
61
+
60
62
  emails.map { |e| UserAccountEmail.new(e) }
61
63
  end
62
64
 
63
65
  def parse_max_level(metadata)
64
66
  return Level::ENTRY unless metadata
67
+
65
68
  level = metadata['max_level'] || metadata[:max_level]
66
69
 
67
70
  return Level::ESSENTIAL if level == 'essential'
68
71
  return Level::EXECUTIVE if level == 'executive'
72
+
69
73
  Level::ENTRY
70
74
  end
71
75
 
@@ -19,7 +19,7 @@ module Trusona
19
19
  @params
20
20
  end
21
21
 
22
- def to_json
22
+ def to_json(*_args)
23
23
  JSON(to_h)
24
24
  end
25
25
 
@@ -36,12 +36,14 @@ module Trusona
36
36
  def attributes_present
37
37
  return false unless @params.key?(:identifier)
38
38
  return false unless @params.key?(:trusona_id)
39
+
39
40
  true
40
41
  end
41
42
 
42
43
  def attributes_filled
43
44
  return false if @params.fetch(:identifier).empty?
44
45
  return false if @params.fetch(:trusona_id).empty?
46
+
45
47
  true
46
48
  end
47
49
  end
@@ -7,6 +7,7 @@ module Trusona
7
7
  module Validators
8
8
  def present?(item)
9
9
  return false if item.nil? || item.to_s.empty?
10
+
10
11
  true
11
12
  end
12
13
 
@@ -21,21 +21,25 @@ module Trusona
21
21
 
22
22
  def get(resource)
23
23
  raise Trusona::InvalidResourceError unless resource.id
24
+
24
25
  handle(@client.get(member_path(resource)), resource)
25
26
  end
26
27
 
27
28
  def create(resource)
28
29
  raise Trusona::InvalidResourceError unless resource.valid?
30
+
29
31
  handle(@client.post(collection_path, resource.to_json), resource)
30
32
  end
31
33
 
32
34
  def update(resource)
33
35
  raise Trusona::InvalidResourceError unless resource.id
36
+
34
37
  handle(@client.patch(member_path(resource), resource.to_json), resource)
35
38
  end
36
39
 
37
40
  def delete(resource)
38
41
  raise Trusona::InvalidResourceError unless resource.id
42
+
39
43
  handle(@client.delete(member_path(resource)), resource)
40
44
  end
41
45
 
@@ -53,12 +57,13 @@ module Trusona
53
57
  raise Trusona::SigningError unless response.verified?
54
58
  end
55
59
 
56
- # rubocop:disable MethodLength
60
+ # rubocop:disable Metrics/MethodLength
57
61
  # rubocop:disable Metrics/CyclomaticComplexity
58
62
  def handle(response, resource = {})
59
63
  @response = response
60
64
 
61
65
  raise if resource.nil?
66
+
62
67
  case response.code
63
68
  when 200..299
64
69
  success(response, resource)
@@ -78,7 +83,7 @@ module Trusona
78
83
  raise Trusona::RequestError, readable_error
79
84
  end
80
85
  end
81
- # rubocop:enable MethodLength
86
+ # rubocop:enable Metrics/MethodLength
82
87
  # rubocop:enable Metrics/CyclomaticComplexity
83
88
 
84
89
  def success(response, resource)
@@ -113,10 +118,12 @@ module Trusona
113
118
  def readable_error
114
119
  default = '[UNKNOWN] Error - An unknown error has occurred.'
115
120
  return default unless @response
121
+
116
122
  body = @response.to_h
117
123
  msg = []
118
124
  msg << "[#{body['error']}] #{body['message']} - #{body['description']}"
119
125
  return msg.join("\n") unless body['field_errors']
126
+
120
127
  body['field_errors'].each do |field|
121
128
  msg << "\t #{field.join(' => ')}"
122
129
  end
@@ -6,9 +6,9 @@ module Trusona
6
6
  ## Device User Bindings Service
7
7
  class DeviceUserBindingsService < BaseService
8
8
  def initialize(
9
- client: Trusona::Api::HTTPClient.new(Trusona.config.api_host),
10
- mapper: Trusona::Mappers::DeviceUserBindingMapper.new
11
- )
9
+ client: Trusona::Api::HTTPClient.new(Trusona.config.api_host),
10
+ mapper: Trusona::Mappers::DeviceUserBindingMapper.new
11
+ )
12
12
  @client = client
13
13
  @mapper = mapper
14
14
  @resource_path = '/api/v2/user_devices'
@@ -6,9 +6,9 @@ module Trusona
6
6
  ## Identity Documents Service
7
7
  class IdentityDocumentsService < BaseService
8
8
  def initialize(
9
- client: Trusona::Api::HTTPClient.new(Trusona.config.api_host),
10
- mapper: Trusona::Mappers::IdentityDocumentMapper.new
11
- )
9
+ client: Trusona::Api::HTTPClient.new(Trusona.config.api_host),
10
+ mapper: Trusona::Mappers::IdentityDocumentMapper.new
11
+ )
12
12
  @client = client
13
13
  @mapper = mapper
14
14
  @resource_path = '/api/v2/identity_documents'
@@ -2,6 +2,7 @@
2
2
 
3
3
  module Trusona
4
4
  module Services
5
+ ## Paired trucode service
5
6
  class PairedTruCodeService < BaseService
6
7
  def initialize(client: Trusona::Api::HTTPClient.new)
7
8
  super(client: client, mapper: Trusona::Mappers::PairedTruCodeMapper.new)
@@ -28,6 +28,29 @@ module Trusona
28
28
  Trusona::Workers::TrusonaficationFinder.new.find(trusonafication_id)
29
29
  end
30
30
 
31
+ ##
32
+ # Cancels existing IN_PROGRESS Trusonafications using their ID. Once
33
+ # canceled the trusonafication can no longer be acted upon.
34
+ #
35
+ # @param trusonafication_id [String] the ID of an existing Trusonafication
36
+ # @raise [Trusona::InvalidRecordIdentifier] if the +trusonafication_id+ is
37
+ # empty or nil.
38
+ # @raise [Trusona::ResourceNotFoundError] if the resource does not exist
39
+ # in the Trusona API
40
+ # @raise [Trusona::UnprocessableEntityError] if the resource could not be
41
+ # cancel because it was not IN_PROGRESS
42
+ #
43
+ # @example
44
+ # Trusona::Trusonafication.cancel('756c1034-2159-4cf9-bd48-662a60a7afff')
45
+ #
46
+ def self.cancel(trusonafication_id)
47
+ if trusonafication_id.nil? || trusonafication_id.strip.empty?
48
+ raise Trusona::InvalidRecordIdentifier, 'Trusonafication ID is missing'
49
+ end
50
+
51
+ Trusona::Workers::TrusonaficationCanceler.new.cancel(trusonafication_id)
52
+ end
53
+
31
54
  ##
32
55
  # Creates a Trusonafication using the supplied options
33
56
  #
@@ -55,12 +78,18 @@ module Trusona
55
78
  # Accept or Reject this Trusonafication?
56
79
  # @option params [String] :expires_at ('90 seconds') The ISO-8601 UTC
57
80
  # timestamp of the Trusonafication's expiration.
58
- # @param timeout [Int] (30) The max amount of time, in seconds, to wait
59
- # for a response from the Trusona API when polling for a Trusonafication
60
- # result
61
81
  # @option params [Hash] :custom_fields Optional data to be associated with
62
82
  # this Trusonafication and can be used to constomize any UX elements. Total
63
83
  # size of data is limited to 1MB.
84
+ # @option params [String] :callback_url A HTTPS URL to POST to call when the
85
+ # trusonafication has been completed (accepted, rejected, or expired).
86
+ #
87
+ # NOTE: The URL should include a randomized segment so it cannot be guessed
88
+ # and abused by third-parties e.g. https://your.domain.com/completed_authentications/f8abe61d-4e51-493f-97b1-464c157624f2.
89
+ #
90
+ # @param timeout [Int] (30) The max amount of time, in seconds, to wait
91
+ # for a response from the Trusona API when polling for a Trusonafication
92
+ # result
64
93
  # @yield [Trusona::Resources::Trusonafication] Yields the completed
65
94
  # Trusonafication to the block
66
95
  # @raise [Trusona::InvalidResourceError] if the resource is not +valid?+
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Trusona
4
- VERSION = '2.3.0'
4
+ VERSION = '2.5.3'
5
5
  end
@@ -11,6 +11,7 @@ module Trusona
11
11
 
12
12
  def find(id = nil)
13
13
  raise(ArgumentError, 'A device identifier is required.') unless id
14
+
14
15
  @service.get(Trusona::Resources::Device.new(id: id))
15
16
  end
16
17
  end
@@ -18,6 +18,7 @@ module Trusona
18
18
 
19
19
  def find(id = nil)
20
20
  raise(ArgumentError, 'An Identity Document id is required.') unless id
21
+
21
22
  @service.get(Trusona::Resources::IdentityDocument.new(id: id))
22
23
  end
23
24
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module Trusona
4
4
  module Workers
5
+ # A Paired Trucode Finder
5
6
  class PairedTruCodeFinder
6
7
  def initialize(service: Trusona::Services::PairedTruCodeService.new)
7
8
  @service = service
@@ -11,6 +11,7 @@ module Trusona
11
11
 
12
12
  def find(id)
13
13
  raise ArgumentError, 'Missing TruCode Id' unless id
14
+
14
15
  resource = Trusona::Resources::BaseResource.new(id: id)
15
16
  @service.get(resource)
16
17
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trusona
4
+ module Workers
5
+ #
6
+ ## Cancel a Trusonafication
7
+ class TrusonaficationCanceler
8
+ def initialize(service: nil)
9
+ @service = service || Trusona::Services::TrusonaficationService.new
10
+ end
11
+
12
+ def cancel(trusonafication_id)
13
+ if trusonafication_id.nil? || trusonafication_id.strip.empty?
14
+ raise(
15
+ Trusona::InvalidResourceError,
16
+ 'Trusonafication Id cannot be empty or nil'
17
+ )
18
+ end
19
+
20
+ resource = Trusona::Resources::Trusonafication.new(
21
+ id: trusonafication_id
22
+ )
23
+ @service.delete(resource)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -14,6 +14,7 @@ module Trusona
14
14
  def create(params: {}, timeout: nil, &block)
15
15
  raise ArgumentError, 'Missing or empty params hash' if
16
16
  params.nil? || params.empty?
17
+
17
18
  resource = Trusona::Resources::Trusonafication.new(params)
18
19
  trusonafication = @service.create(resource)
19
20
  return trusonafication unless block_given?
@@ -43,4 +44,4 @@ module Trusona
43
44
  # rubocop:enable Metrics/MethodLength
44
45
  end
45
46
  end
46
- end
47
+ end
@@ -24,4 +24,4 @@ module Trusona
24
24
  end
25
25
  end
26
26
  end
27
- end
27
+ end
@@ -18,9 +18,7 @@ module Trusona
18
18
 
19
19
  resource = build_resource(opts)
20
20
 
21
- if opts[:trusona_id] || opts['trusona_id']
22
- return @user_accounts.get(resource)
23
- end
21
+ return @user_accounts.get(resource) if opts[:trusona_id] || opts['trusona_id']
24
22
 
25
23
  @lookups.create(resource) if opts[:email] || opts['email']
26
24
  end
@@ -10,9 +10,7 @@ module Trusona
10
10
  end
11
11
 
12
12
  def deactivate(user_identifier)
13
- if user_identifier.nil? || user_identifier.empty?
14
- raise(ArgumentError, "The user's identifier is required")
15
- end
13
+ raise(ArgumentError, "The user's identifier is required") if user_identifier.nil? || user_identifier.empty?
16
14
 
17
15
  user = Trusona::Resources::User.new(user_identifier: user_identifier)
18
16
  @service.delete(user)
@@ -12,6 +12,7 @@ module Trusona
12
12
  def find(opts)
13
13
  raise ArgumentError, 'Missing user identifier' unless
14
14
  contains_required_arguments(opts)
15
+
15
16
  @service.get(build_resource(opts))
16
17
  end
17
18
 
@@ -0,0 +1,14 @@
1
+ [req]
2
+ default_bits = 4096
3
+ prompt = no
4
+ default_md = sha256
5
+ distinguished_name = dn
6
+
7
+ [dn]
8
+ C=US
9
+ ST=Arizona
10
+ L=Scottsdale
11
+ O=Trusona, Inc.
12
+ OU=Engineering
13
+ emailAddress=engineering@trusona.com
14
+ CN=trusona.com
@@ -14,8 +14,8 @@ Gem::Specification.new do |spec|
14
14
  spec.description = 'Easily interact with the Trusona REST API'
15
15
  spec.homepage = 'https://trusona.com'
16
16
  spec.license = 'Apache-2.0'
17
- spec.cert_chain = ['certs/trusona.pem']
18
- spec.signing_key = 'trusona.key.pem' if $0 =~ /gem\z/
17
+ spec.cert_chain = ['trusona.pub.pem']
18
+ spec.signing_key = 'trusona.key.pem' if $0 =~ /gem\z/
19
19
 
20
20
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
21
21
  f.match(%r{^(test|spec|features)/})
@@ -28,17 +28,19 @@ Gem::Specification.new do |spec|
28
28
 
29
29
  spec.metadata['yard.run'] = 'yri' # use "yard" to build full HTML docs.
30
30
 
31
+ spec.add_development_dependency 'activesupport', '~> 6.0'
31
32
  spec.add_development_dependency 'bump', '~> 0.5'
32
- spec.add_development_dependency 'bundler'
33
33
  spec.add_development_dependency 'dotenv', '~> 2.2'
34
34
  spec.add_development_dependency 'guard', '~> 2.14'
35
35
  spec.add_development_dependency 'guard-rspec', '~> 4.7'
36
36
  spec.add_development_dependency 'guard-rubocop', '~> 1.3'
37
37
  spec.add_development_dependency 'guard-yard', '~> 2.2'
38
- spec.add_development_dependency 'rake', '~> 10.0'
38
+ spec.add_development_dependency 'rake', '~> 13.0'
39
39
  spec.add_development_dependency 'rspec', '~> 3.0'
40
- spec.add_development_dependency 'rubocop', '~> 0.49'
41
- spec.add_development_dependency 'simplecov', '~> 0.14'
40
+ spec.add_development_dependency 'rspec-wait', '~> 0.0'
41
+ spec.add_development_dependency 'rubocop', '~> 0.89.1'
42
+ spec.add_development_dependency 'rubocop-performance', '~> 1.7.1'
43
+ spec.add_development_dependency 'simplecov', '0.19.0'
42
44
  spec.add_development_dependency 'yard', '~> 0.9'
43
- spec.add_development_dependency 'webmock'
45
+ spec.add_development_dependency 'webmock', '~> 3.5'
44
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trusona
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trusona
@@ -10,40 +10,39 @@ bindir: exe
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- ++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
44
- eNCk84I=
13
+ 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
45
44
  -----END CERTIFICATE-----
46
- date: 2019-07-31 00:00:00.000000000 Z
45
+ date: 2020-09-01 00:00:00.000000000 Z
47
46
  dependencies:
48
47
  - !ruby/object:Gem::Dependency
49
48
  name: httparty
@@ -60,33 +59,33 @@ dependencies:
60
59
  - !ruby/object:Gem::Version
61
60
  version: '0.15'
62
61
  - !ruby/object:Gem::Dependency
63
- name: bump
62
+ name: activesupport
64
63
  requirement: !ruby/object:Gem::Requirement
65
64
  requirements:
66
65
  - - "~>"
67
66
  - !ruby/object:Gem::Version
68
- version: '0.5'
67
+ version: '6.0'
69
68
  type: :development
70
69
  prerelease: false
71
70
  version_requirements: !ruby/object:Gem::Requirement
72
71
  requirements:
73
72
  - - "~>"
74
73
  - !ruby/object:Gem::Version
75
- version: '0.5'
74
+ version: '6.0'
76
75
  - !ruby/object:Gem::Dependency
77
- name: bundler
76
+ name: bump
78
77
  requirement: !ruby/object:Gem::Requirement
79
78
  requirements:
80
- - - ">="
79
+ - - "~>"
81
80
  - !ruby/object:Gem::Version
82
- version: '0'
81
+ version: '0.5'
83
82
  type: :development
84
83
  prerelease: false
85
84
  version_requirements: !ruby/object:Gem::Requirement
86
85
  requirements:
87
- - - ">="
86
+ - - "~>"
88
87
  - !ruby/object:Gem::Version
89
- version: '0'
88
+ version: '0.5'
90
89
  - !ruby/object:Gem::Dependency
91
90
  name: dotenv
92
91
  requirement: !ruby/object:Gem::Requirement
@@ -163,14 +162,14 @@ dependencies:
163
162
  requirements:
164
163
  - - "~>"
165
164
  - !ruby/object:Gem::Version
166
- version: '10.0'
165
+ version: '13.0'
167
166
  type: :development
168
167
  prerelease: false
169
168
  version_requirements: !ruby/object:Gem::Requirement
170
169
  requirements:
171
170
  - - "~>"
172
171
  - !ruby/object:Gem::Version
173
- version: '10.0'
172
+ version: '13.0'
174
173
  - !ruby/object:Gem::Dependency
175
174
  name: rspec
176
175
  requirement: !ruby/object:Gem::Requirement
@@ -185,34 +184,62 @@ dependencies:
185
184
  - - "~>"
186
185
  - !ruby/object:Gem::Version
187
186
  version: '3.0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: rspec-wait
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '0.0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '0.0'
188
201
  - !ruby/object:Gem::Dependency
189
202
  name: rubocop
190
203
  requirement: !ruby/object:Gem::Requirement
191
204
  requirements:
192
205
  - - "~>"
193
206
  - !ruby/object:Gem::Version
194
- version: '0.49'
207
+ version: 0.89.1
195
208
  type: :development
196
209
  prerelease: false
197
210
  version_requirements: !ruby/object:Gem::Requirement
198
211
  requirements:
199
212
  - - "~>"
200
213
  - !ruby/object:Gem::Version
201
- version: '0.49'
214
+ version: 0.89.1
202
215
  - !ruby/object:Gem::Dependency
203
- name: simplecov
216
+ name: rubocop-performance
204
217
  requirement: !ruby/object:Gem::Requirement
205
218
  requirements:
206
219
  - - "~>"
207
220
  - !ruby/object:Gem::Version
208
- version: '0.14'
221
+ version: 1.7.1
209
222
  type: :development
210
223
  prerelease: false
211
224
  version_requirements: !ruby/object:Gem::Requirement
212
225
  requirements:
213
226
  - - "~>"
214
227
  - !ruby/object:Gem::Version
215
- version: '0.14'
228
+ version: 1.7.1
229
+ - !ruby/object:Gem::Dependency
230
+ name: simplecov
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - '='
234
+ - !ruby/object:Gem::Version
235
+ version: 0.19.0
236
+ type: :development
237
+ prerelease: false
238
+ version_requirements: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - '='
241
+ - !ruby/object:Gem::Version
242
+ version: 0.19.0
216
243
  - !ruby/object:Gem::Dependency
217
244
  name: yard
218
245
  requirement: !ruby/object:Gem::Requirement
@@ -231,16 +258,16 @@ dependencies:
231
258
  name: webmock
232
259
  requirement: !ruby/object:Gem::Requirement
233
260
  requirements:
234
- - - ">="
261
+ - - "~>"
235
262
  - !ruby/object:Gem::Version
236
- version: '0'
263
+ version: '3.5'
237
264
  type: :development
238
265
  prerelease: false
239
266
  version_requirements: !ruby/object:Gem::Requirement
240
267
  requirements:
241
- - - ">="
268
+ - - "~>"
242
269
  - !ruby/object:Gem::Version
243
- version: '0'
270
+ version: '3.5'
244
271
  description: Easily interact with the Trusona REST API
245
272
  email:
246
273
  - engineering@trusona.com
@@ -251,6 +278,7 @@ files:
251
278
  - ".env.example"
252
279
  - ".gitignore"
253
280
  - ".rspec"
281
+ - ".rubocop.yml"
254
282
  - ".ruby-version"
255
283
  - ".travis.yml"
256
284
  - DEVELOP.md
@@ -261,8 +289,8 @@ files:
261
289
  - Rakefile
262
290
  - bin/console
263
291
  - bin/setup
264
- - certs/trusona.pem
265
292
  - checksum/trusona-0.16.0.gem.sha512
293
+ - integrations/buster.rb
266
294
  - integrations/device_user_binding_integration_spec.rb
267
295
  - integrations/identity_documents_spec.rb
268
296
  - integrations/paired_tru_code_spec.rb
@@ -331,14 +359,15 @@ files:
331
359
  - lib/trusona/workers/paired_tru_code_finder.rb
332
360
  - lib/trusona/workers/tru_code_creator.rb
333
361
  - lib/trusona/workers/tru_code_finder.rb
362
+ - lib/trusona/workers/trusonafication_canceler.rb
334
363
  - lib/trusona/workers/trusonafication_creator.rb
335
364
  - lib/trusona/workers/trusonafication_finder.rb
336
365
  - lib/trusona/workers/user_account_finder.rb
337
366
  - lib/trusona/workers/user_deactivator.rb
338
367
  - lib/trusona/workers/user_identifier_creator.rb
339
368
  - lib/trusona/workers/user_identifier_finder.rb
369
+ - trusona.cnf
340
370
  - trusona.gemspec
341
- - trusona.key.pem.enc
342
371
  homepage: https://trusona.com
343
372
  licenses:
344
373
  - Apache-2.0
@@ -359,8 +388,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
359
388
  - !ruby/object:Gem::Version
360
389
  version: '0'
361
390
  requirements: []
362
- rubyforge_project:
363
- rubygems_version: 2.6.14
391
+ rubygems_version: 3.0.8
364
392
  signing_key:
365
393
  specification_version: 4
366
394
  summary: Trusona REST API wrapper