yoti 1.6.4 → 1.7.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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -0
  3. data/Rakefile +0 -8
  4. data/lib/yoti.rb +50 -1
  5. data/lib/yoti/client.rb +13 -4
  6. data/lib/yoti/configuration.rb +7 -2
  7. data/lib/yoti/data_type/age_verification.rb +1 -1
  8. data/lib/yoti/data_type/base_profile.rb +1 -1
  9. data/lib/yoti/data_type/image.rb +4 -12
  10. data/lib/yoti/data_type/image_jpeg.rb +2 -0
  11. data/lib/yoti/data_type/image_png.rb +2 -0
  12. data/lib/yoti/data_type/media.rb +19 -0
  13. data/lib/yoti/doc_scan/client.rb +163 -0
  14. data/lib/yoti/doc_scan/constants.rb +28 -0
  15. data/lib/yoti/doc_scan/session/create/create_session_result.rb +50 -0
  16. data/lib/yoti/doc_scan/session/create/document_filter.rb +31 -0
  17. data/lib/yoti/doc_scan/session/create/document_restrictions_filter.rb +140 -0
  18. data/lib/yoti/doc_scan/session/create/notification_config.rb +142 -0
  19. data/lib/yoti/doc_scan/session/create/orthogonal_restrictions_filter.rb +150 -0
  20. data/lib/yoti/doc_scan/session/create/requested_check.rb +39 -0
  21. data/lib/yoti/doc_scan/session/create/requested_document_authenticity_check.rb +53 -0
  22. data/lib/yoti/doc_scan/session/create/requested_face_match_check.rb +95 -0
  23. data/lib/yoti/doc_scan/session/create/requested_liveness_check.rb +108 -0
  24. data/lib/yoti/doc_scan/session/create/requested_task.rb +39 -0
  25. data/lib/yoti/doc_scan/session/create/requested_text_extraction_task.rb +94 -0
  26. data/lib/yoti/doc_scan/session/create/required_document.rb +31 -0
  27. data/lib/yoti/doc_scan/session/create/required_id_document.rb +53 -0
  28. data/lib/yoti/doc_scan/session/create/sdk_config.rb +221 -0
  29. data/lib/yoti/doc_scan/session/create/session_specification.rb +203 -0
  30. data/lib/yoti/doc_scan/session/retrieve/authenticity_check_response.rb +12 -0
  31. data/lib/yoti/doc_scan/session/retrieve/breakdown_response.rb +38 -0
  32. data/lib/yoti/doc_scan/session/retrieve/check_response.rb +63 -0
  33. data/lib/yoti/doc_scan/session/retrieve/details_response.rb +28 -0
  34. data/lib/yoti/doc_scan/session/retrieve/document_fields_response.rb +21 -0
  35. data/lib/yoti/doc_scan/session/retrieve/face_map_response.rb +21 -0
  36. data/lib/yoti/doc_scan/session/retrieve/face_match_check_response.rb +12 -0
  37. data/lib/yoti/doc_scan/session/retrieve/frame_response.rb +21 -0
  38. data/lib/yoti/doc_scan/session/retrieve/generated_check_response.rb +28 -0
  39. data/lib/yoti/doc_scan/session/retrieve/generated_media.rb +28 -0
  40. data/lib/yoti/doc_scan/session/retrieve/generated_text_data_check_response.rb +12 -0
  41. data/lib/yoti/doc_scan/session/retrieve/get_session_result.rb +113 -0
  42. data/lib/yoti/doc_scan/session/retrieve/id_document_resource_response.rb +52 -0
  43. data/lib/yoti/doc_scan/session/retrieve/liveness_check_response.rb +12 -0
  44. data/lib/yoti/doc_scan/session/retrieve/liveness_resource_response.rb +24 -0
  45. data/lib/yoti/doc_scan/session/retrieve/media_response.rb +38 -0
  46. data/lib/yoti/doc_scan/session/retrieve/page_response.rb +27 -0
  47. data/lib/yoti/doc_scan/session/retrieve/recommendation_response.rb +34 -0
  48. data/lib/yoti/doc_scan/session/retrieve/report_response.rb +31 -0
  49. data/lib/yoti/doc_scan/session/retrieve/resource_container.rb +50 -0
  50. data/lib/yoti/doc_scan/session/retrieve/resource_response.rb +39 -0
  51. data/lib/yoti/doc_scan/session/retrieve/task_response.rb +87 -0
  52. data/lib/yoti/doc_scan/session/retrieve/text_data_check_response.rb +12 -0
  53. data/lib/yoti/doc_scan/session/retrieve/text_extraction_task_response.rb +18 -0
  54. data/lib/yoti/doc_scan/session/retrieve/zoom_liveness_resource_response.rb +33 -0
  55. data/lib/yoti/doc_scan/support/supported_documents.rb +60 -0
  56. data/lib/yoti/dynamic_share_service/extension/thirdparty_attribute_extension.rb +1 -1
  57. data/lib/yoti/dynamic_share_service/policy/dynamic_policy.rb +4 -4
  58. data/lib/yoti/dynamic_share_service/share_url.rb +26 -33
  59. data/lib/yoti/errors.rb +17 -2
  60. data/lib/yoti/http/aml_check_request.rb +12 -6
  61. data/lib/yoti/http/payloads/aml_address.rb +4 -0
  62. data/lib/yoti/http/payloads/aml_profile.rb +7 -1
  63. data/lib/yoti/http/profile_request.rb +11 -6
  64. data/lib/yoti/http/request.rb +218 -18
  65. data/lib/yoti/http/signed_request.rb +13 -4
  66. data/lib/yoti/ssl.rb +2 -2
  67. data/lib/yoti/util/anchor_processor.rb +1 -1
  68. data/lib/yoti/util/validation.rb +41 -0
  69. data/lib/yoti/version.rb +1 -1
  70. data/rubocop.yml +9 -1
  71. data/yoti.gemspec +1 -2
  72. metadata +49 -18
@@ -3,6 +3,11 @@ require 'base64'
3
3
  module Yoti
4
4
  # Converts a basic Net::HTTP request into a Yoti Signed Request
5
5
  class SignedRequest
6
+ #
7
+ # @param [Net::HTTPRequest] unsigned_request
8
+ # @param [String] path
9
+ # @param [#to_json,String] payload
10
+ #
6
11
  def initialize(unsigned_request, path, payload = {})
7
12
  @http_req = unsigned_request
8
13
  @path = path
@@ -10,6 +15,9 @@ module Yoti
10
15
  @auth_key = Yoti::SSL.auth_key_from_pem
11
16
  end
12
17
 
18
+ #
19
+ # @return [Net::HTTPRequest]
20
+ #
13
21
  def sign
14
22
  @http_req['X-Yoti-Auth-Digest'] = message_signature
15
23
  @http_req['X-Yoti-SDK'] = Yoti.configuration.sdk_identifier
@@ -20,18 +28,19 @@ module Yoti
20
28
  private
21
29
 
22
30
  def message_signature
23
- @message_signature ||= Yoti::SSL.get_secure_signature("#{http_method}&#{@path}#{payload_string}")
31
+ @message_signature ||= Yoti::SSL.get_secure_signature("#{http_method}&#{@path}#{base64_payload}")
24
32
  end
25
33
 
26
34
  def http_method
27
35
  @http_req.method
28
36
  end
29
37
 
30
- # Create the base64 encoded request body
31
- def payload_string
38
+ def base64_payload
32
39
  return '' unless @payload
33
40
 
34
- '&' + Base64.strict_encode64(@payload.to_json)
41
+ payload_string = @payload.is_a?(String) ? @payload : @payload.to_json
42
+
43
+ '&' + Base64.strict_encode64(payload_string)
35
44
  end
36
45
  end
37
46
  end
@@ -32,7 +32,7 @@ module Yoti
32
32
  end
33
33
 
34
34
  # Extracts the public key from pem key, converts it to a DER base 64 encoded value
35
- # @return [String] base 64 encoded anthentication key
35
+ # @return [String] base 64 encoded authentication key
36
36
  def auth_key_from_pem
37
37
  public_key = private_key.public_key
38
38
  Base64.strict_encode64(public_key.to_der)
@@ -48,7 +48,7 @@ module Yoti
48
48
 
49
49
  # Uses the decrypted receipt key and the current user's iv to decode the text
50
50
  # @param key [String] base 64 decoded key
51
- # @param iv [String] base 64 decoded iv
51
+ # @param user_iv [String] base 64 decoded iv
52
52
  # @param text [String] base 64 decoded cyphered text
53
53
  # @return [String] base 64 decoded deciphered text
54
54
  def decipher(key, user_iv, text)
@@ -7,7 +7,7 @@ module Yoti
7
7
  #
8
8
  class AnchorProcessor
9
9
  #
10
- # @param [Array<Yoti::Protobuf::Attrpubapi::Anchor>]
10
+ # @param [Array<Yoti::Protobuf::Attrpubapi::Anchor>] anchors_list
11
11
  #
12
12
  def initialize(anchors_list)
13
13
  @anchors_list = anchors_list
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yoti
4
+ class Validation
5
+ #
6
+ # @param value
7
+ # @param [String] name
8
+ #
9
+ def self.assert_not_nil(value, name)
10
+ return unless value.nil?
11
+
12
+ raise(ArgumentError, "#{name} must not be nil")
13
+ end
14
+
15
+ #
16
+ # @param [Class] type
17
+ # @param value
18
+ # @param [String] name
19
+ # @param [Boolean] nilable
20
+ #
21
+ def self.assert_is_a(type, value, name, nilable = false)
22
+ return if nilable && value.nil?
23
+ return if value.is_a?(type)
24
+
25
+ raise(ArgumentError, "#{name} must be a #{type.name}")
26
+ end
27
+
28
+ #
29
+ # @param [Symbol] method
30
+ # @param value
31
+ # @param [String] name
32
+ #
33
+ def self.assert_respond_to(method, value, name)
34
+ assert_not_nil(value, name)
35
+
36
+ return if value.respond_to?(method)
37
+
38
+ raise(ArgumentError, "#{name} must respond to #{method}")
39
+ end
40
+ end
41
+ end
@@ -1,4 +1,4 @@
1
1
  module Yoti
2
2
  # @return [String] the gem's current version
3
- VERSION = '1.6.4'.freeze
3
+ VERSION = '1.7.0'.freeze
4
4
  end
@@ -4,6 +4,8 @@ AllCops:
4
4
  TargetRubyVersion: 2.4
5
5
  Exclude:
6
6
  - 'examples/rails/config/**/*'
7
+ - 'examples/doc_scan/config/**/*'
8
+ - 'examples/doc_scan/bin/**/*'
7
9
  - 'lib/yoti/protobuf/attrpubapi/*'
8
10
  - 'lib/yoti/protobuf/compubapi/*'
9
11
  - 'lib/yoti/protobuf/sharepubapi/*'
@@ -26,7 +28,7 @@ Metrics/ClassLength:
26
28
  Enabled: false
27
29
  Max: 115
28
30
 
29
- Metrics/LineLength:
31
+ Layout/LineLength:
30
32
  Enabled: false
31
33
 
32
34
  Metrics/MethodLength:
@@ -55,3 +57,9 @@ Naming/MethodName:
55
57
  Naming/PredicateName:
56
58
  Exclude:
57
59
  - lib/yoti/util/age_processor.rb
60
+
61
+ Metrics/ParameterLists:
62
+ Exclude:
63
+ - lib/yoti/doc_scan/session/create/sdk_config.rb
64
+ - lib/yoti/doc_scan/session/create/session_specification.rb
65
+ - spec/yoti/doc_scan/client_spec.rb
@@ -26,12 +26,11 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency 'google-protobuf', '~> 3.7'
27
27
 
28
28
  spec.add_development_dependency 'bundler', '~> 2.0'
29
- spec.add_development_dependency 'coveralls', '~> 0.8'
30
29
  spec.add_development_dependency 'dotenv', '~> 2.2'
31
30
  spec.add_development_dependency 'generator_spec', '~> 0.9'
32
31
  spec.add_development_dependency 'rake', '~> 12.0'
33
32
  spec.add_development_dependency 'rspec', '~> 3.5'
34
- spec.add_development_dependency 'simplecov', '~> 0.13'
33
+ spec.add_development_dependency 'simplecov', '~> 0.17.1'
35
34
  spec.add_development_dependency 'webmock', '~> 3.3'
36
35
  spec.add_development_dependency 'yard', '~> 0.9'
37
36
  spec.add_development_dependency 'yardstick', '~> 0.9'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yoti
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.4
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Zaremba
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-01 00:00:00.000000000 Z
11
+ date: 2020-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-protobuf
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.0'
41
- - !ruby/object:Gem::Dependency
42
- name: coveralls
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.8'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0.8'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: dotenv
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -114,14 +100,14 @@ dependencies:
114
100
  requirements:
115
101
  - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: '0.13'
103
+ version: 0.17.1
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - "~>"
123
109
  - !ruby/object:Gem::Version
124
- version: '0.13'
110
+ version: 0.17.1
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: webmock
127
113
  requirement: !ruby/object:Gem::Requirement
@@ -197,9 +183,53 @@ files:
197
183
  - lib/yoti/data_type/image.rb
198
184
  - lib/yoti/data_type/image_jpeg.rb
199
185
  - lib/yoti/data_type/image_png.rb
186
+ - lib/yoti/data_type/media.rb
200
187
  - lib/yoti/data_type/multi_value.rb
201
188
  - lib/yoti/data_type/profile.rb
202
189
  - lib/yoti/data_type/signed_time_stamp.rb
190
+ - lib/yoti/doc_scan/client.rb
191
+ - lib/yoti/doc_scan/constants.rb
192
+ - lib/yoti/doc_scan/session/create/create_session_result.rb
193
+ - lib/yoti/doc_scan/session/create/document_filter.rb
194
+ - lib/yoti/doc_scan/session/create/document_restrictions_filter.rb
195
+ - lib/yoti/doc_scan/session/create/notification_config.rb
196
+ - lib/yoti/doc_scan/session/create/orthogonal_restrictions_filter.rb
197
+ - lib/yoti/doc_scan/session/create/requested_check.rb
198
+ - lib/yoti/doc_scan/session/create/requested_document_authenticity_check.rb
199
+ - lib/yoti/doc_scan/session/create/requested_face_match_check.rb
200
+ - lib/yoti/doc_scan/session/create/requested_liveness_check.rb
201
+ - lib/yoti/doc_scan/session/create/requested_task.rb
202
+ - lib/yoti/doc_scan/session/create/requested_text_extraction_task.rb
203
+ - lib/yoti/doc_scan/session/create/required_document.rb
204
+ - lib/yoti/doc_scan/session/create/required_id_document.rb
205
+ - lib/yoti/doc_scan/session/create/sdk_config.rb
206
+ - lib/yoti/doc_scan/session/create/session_specification.rb
207
+ - lib/yoti/doc_scan/session/retrieve/authenticity_check_response.rb
208
+ - lib/yoti/doc_scan/session/retrieve/breakdown_response.rb
209
+ - lib/yoti/doc_scan/session/retrieve/check_response.rb
210
+ - lib/yoti/doc_scan/session/retrieve/details_response.rb
211
+ - lib/yoti/doc_scan/session/retrieve/document_fields_response.rb
212
+ - lib/yoti/doc_scan/session/retrieve/face_map_response.rb
213
+ - lib/yoti/doc_scan/session/retrieve/face_match_check_response.rb
214
+ - lib/yoti/doc_scan/session/retrieve/frame_response.rb
215
+ - lib/yoti/doc_scan/session/retrieve/generated_check_response.rb
216
+ - lib/yoti/doc_scan/session/retrieve/generated_media.rb
217
+ - lib/yoti/doc_scan/session/retrieve/generated_text_data_check_response.rb
218
+ - lib/yoti/doc_scan/session/retrieve/get_session_result.rb
219
+ - lib/yoti/doc_scan/session/retrieve/id_document_resource_response.rb
220
+ - lib/yoti/doc_scan/session/retrieve/liveness_check_response.rb
221
+ - lib/yoti/doc_scan/session/retrieve/liveness_resource_response.rb
222
+ - lib/yoti/doc_scan/session/retrieve/media_response.rb
223
+ - lib/yoti/doc_scan/session/retrieve/page_response.rb
224
+ - lib/yoti/doc_scan/session/retrieve/recommendation_response.rb
225
+ - lib/yoti/doc_scan/session/retrieve/report_response.rb
226
+ - lib/yoti/doc_scan/session/retrieve/resource_container.rb
227
+ - lib/yoti/doc_scan/session/retrieve/resource_response.rb
228
+ - lib/yoti/doc_scan/session/retrieve/task_response.rb
229
+ - lib/yoti/doc_scan/session/retrieve/text_data_check_response.rb
230
+ - lib/yoti/doc_scan/session/retrieve/text_extraction_task_response.rb
231
+ - lib/yoti/doc_scan/session/retrieve/zoom_liveness_resource_response.rb
232
+ - lib/yoti/doc_scan/support/supported_documents.rb
203
233
  - lib/yoti/dynamic_share_service/dynamic_scenario.rb
204
234
  - lib/yoti/dynamic_share_service/extension/extension.rb
205
235
  - lib/yoti/dynamic_share_service/extension/location_constraint_extension.rb
@@ -234,6 +264,7 @@ files:
234
264
  - lib/yoti/util/age_processor.rb
235
265
  - lib/yoti/util/anchor_processor.rb
236
266
  - lib/yoti/util/log.rb
267
+ - lib/yoti/util/validation.rb
237
268
  - lib/yoti/version.rb
238
269
  - login_flow.png
239
270
  - rubocop.yml