yoti 1.7.0 → 1.7.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02fe8b8e97eb660a8f100add12f7a07591fd78c39a0b476ce386b01af9d8c18e
4
- data.tar.gz: b37386c172ecf56164d5e8b18129c41698444459e4611b35e8aeda4da9176287
3
+ metadata.gz: f78d9caae30514cbb608f4156a54d6c8c2f7d82a3df8afbdf6295b8239e983a7
4
+ data.tar.gz: 59b9aad24b60db06445300441abfdf20203b52de713976d3a6815aca159b6579
5
5
  SHA512:
6
- metadata.gz: 36f47a7c8728ccdde726c67d7ecde1282051f128e63ffd685c6981634d660bba98ff7de9c0aed53dee950112a392978c5ffce44d3a130d16d7487eb5fd22431c
7
- data.tar.gz: bbbee64ecc44ce41a204c8109fb673339972886d5818db20d3952009b76fedf12222e705b7eb090c4da0fb0f9c8375fc4402e0ed9c595a8a72974e3f37ea5397
6
+ metadata.gz: f656f156b49a6b96ed09271fcbb1fa312ef918195c184631481a9dee5e427c1c1866c58d43d97f09f7f38c7072b1bb9adb2de9acafa99d9c9f783845090d2eab
7
+ data.tar.gz: 601d9374b0320b4c59bf6c5378e50dbba524337ef28b2b6d74ba7eebbef4f30c029f187ce75f52a631343178e9281cd5d28c8b25e1c96c3531d1816bc67c0de8
data/.gitignore CHANGED
@@ -18,6 +18,7 @@
18
18
  /_yardoc/
19
19
  /doc/
20
20
  /rdoc/
21
+ /yardoc/
21
22
 
22
23
  ## Environment normalization:
23
24
  /.bundle/
@@ -51,7 +51,7 @@ Verifies the documentation with [Yardstick][] and generates the `measurement/rep
51
51
  bundle exec rake yard
52
52
  ```
53
53
 
54
- Generates [YARD][] documentation in the doc folder.
54
+ Generates [YARD][] documentation in the `./yardoc` folder.
55
55
 
56
56
  ### Git
57
57
 
data/README.md CHANGED
@@ -10,39 +10,16 @@ Welcome to the Yoti Ruby SDK. This repository contains the tools you need to qui
10
10
 
11
11
  ## Table of Contents
12
12
 
13
- 1. [An Architectural view](#an-architectural-view) - High level overview of integration
14
13
  1. [Requirements](#requirements) - Everything you need to get started
15
- 1. [Installing the SDK](#installing-the-sdk) - How to install our SDK
16
- 1. [Configuration](#configuration) - Configuring the SDK
17
- 1. [Profile Retrieval](#profile-retrieval) - How to retrieve a Yoti profile using the one time use token
18
- 1. [AML Integration](#aml-integration) - How to integrate with Yoti's AML (Anti Money Laundering) service
19
- 1. [Running the Examples](#running-the-examples) - How to run the example projects provided
20
- 1. [API Coverage](#api-coverage) - Attributes defined
21
- 1. [Support](#support) - Please feel free to reach out
22
-
23
- ## An Architectural view
24
-
25
- To integrate your application with Yoti, your back-end must expose a GET endpoint that Yoti will use to forward tokens.
26
- The endpoint is configured in the [Yoti Hub](https://hub.yoti.com) where you create/update your application. To see an example of how this is configured, see the [Running the Examples](#running-the-examples) section.
27
14
 
28
- The image below shows how your application back-end and Yoti integrate into the context of a Login flow.
29
- Yoti SDK carries out for you steps 6, 7, 8 and the profile decryption in step 9.
30
-
31
- ![alt text](login_flow.png "Login flow")
32
-
33
- Yoti also allows you to enable user details verification from your mobile app by means of the Android (TBA) and iOS (TBA) SDKs. In that scenario, your Yoti-enabled mobile app is playing both the role of the browser and the Yoti app. Your back-end doesn't need to handle these cases in a significantly different way, but you might decide to handle the `User-Agent` header in order to provide different responses for desktop and mobile clients.
15
+ 1. [Installing the SDK](#installing-the-sdk) - How to install our SDK
34
16
 
35
- ## References
17
+ 1. [Setup](#setup) - Setup required before using the Yoti services
36
18
 
37
- * [AES-256 symmetric encryption][]
38
- * [RSA pkcs asymmetric encryption][]
39
- * [Protocol buffers][]
40
- * [Base64 data][]
19
+ 1. [Products](#products) -
20
+ Links to more information about the products offered by the Yoti SDK
41
21
 
42
- [AES-256 symmetric encryption]: https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
43
- [RSA pkcs asymmetric encryption]: https://en.wikipedia.org/wiki/RSA_(cryptosystem)
44
- [Protocol buffers]: https://en.wikipedia.org/wiki/Protocol_Buffers
45
- [Base64 data]: https://en.wikipedia.org/wiki/Base64
22
+ 1. [Support](#support) - Please feel free to reach out
46
23
 
47
24
  ## Requirements
48
25
 
@@ -76,7 +53,7 @@ bundle install
76
53
  Or simply run the following command from your terminal:
77
54
 
78
55
  ```shell
79
- [sudo] gem install yoti
56
+ gem install yoti
80
57
  ```
81
58
 
82
59
  ## SDK Project Import
@@ -89,7 +66,12 @@ rails generate yoti:install
89
66
 
90
67
  The generated initialisation file can be found in `config/initializers/yoti.rb`.
91
68
 
92
- ## Configuration
69
+ ## Setup
70
+
71
+ For each service you will need:
72
+
73
+ * Your Client SDK ID, generated by [Yoti Hub](https://hub.yoti.com) when you create (and then publish) your app.
74
+ * Your .pem file. This is your own unique private key which your browser generates from the [Yoti Hub](https://hub.yoti.com) when you create an application.
93
75
 
94
76
  A minimal Yoti client initialisation looks like this:
95
77
 
@@ -101,10 +83,8 @@ end
101
83
  ```
102
84
 
103
85
  Make sure the following environment variables can be accessed by your app:
104
-
105
- `YOTI_CLIENT_SDK_ID` - found on the Key settings page on your Yoti Hub
106
-
107
- `YOTI_KEY_FILE_PATH` - the full path to your security key downloaded from the *Keys* settings page (e.g. /Users/developer/access-security.pem)
86
+ - `YOTI_CLIENT_SDK_ID`
87
+ - `YOTI_KEY_FILE_PATH`
108
88
 
109
89
  The following options are available:
110
90
 
@@ -144,197 +124,12 @@ heroku config:add YOTI_KEY ="$(cat your-access-security.pem)"
144
124
 
145
125
  [Heroku Command Line]: https://devcenter.heroku.com/articles/heroku-command-line
146
126
 
147
- ## Profile Retrieval
148
-
149
- When your application receives a one time use token via the exposed endpoint (it will be assigned to a query string parameter named `token`), you can easily retrieve the user profile:
150
-
151
- ```ruby
152
- one_time_use_token = params[:token]
153
- yoti_activity_details = Yoti::Client.get_activity_details(one_time_use_token)
154
- ```
155
-
156
- Before you inspect the user profile, you might want to check whether the user validation was successful. This is done as follows:
157
-
158
- ```ruby
159
- if yoti_activity_details.outcome == 'SUCCESS'
160
- profile = yoti_activity_details.profile
161
- given_names = profile.given_names.value
162
- family_name = profile.family_name.value
163
- else
164
- # handle unhappy path
165
- end
166
- ```
167
-
168
- The `profile` object provides a set of attributes corresponding to user attributes. Whether the attributes are present or not depends on the settings you have applied to your app on Yoti Hub.
169
-
170
- ### Handling Users
171
-
172
- When you retrieve the user profile, you receive a user ID generated by Yoti exclusively for your application.
173
- This means that if the same individual logs into another app, Yoti will assign her/him a different ID.
174
- You can use this ID to verify whether (for your application) the retrieved profile identifies a new or an existing user.
175
- Here is an example of how this works:
176
-
177
- ```ruby
178
- if yoti_activity_details.outcome == 'SUCCESS'
179
- user = your_user_search_function(yoti_activity_details.user_id)
180
- profile = yoti_activity_details.profile
181
-
182
- if user
183
- # handle login
184
- email = profile.email_address.value
185
- else
186
- # handle registration
187
- given_names = profile.given_names.value
188
- family_name = profile.family_name.value
189
- email = profile.email_address.value
190
- end
191
- else
192
- # handle unhappy path
193
- end
194
- ```
195
-
196
- Where `your_user_search_function` is a piece of logic in your app that is supposed to find a user, given a user_id. Regardless of whether the user is a new or an existing one, Yoti will always provide their profile, so you don't necessarily need to store it.
197
-
198
- You can retrieve the sources and verifiers for each attribute as follows:
199
-
200
- ```ruby
201
- given_names_sources = profile.given_names.sources # list of anchors
202
- given_names_verifiers = profile.given_names.verifiers # list of anchors
203
- given_names_anchors = profile.given_names.anchors # list of anchors
204
- ```
205
- You can also retrieve further properties from these respective anchors in the following way:
206
-
207
- ```ruby
208
- # Retrieving properties of the first anchor
209
- type = given_names_sources[0].type # string
210
- value = given_names_sources[0].value # string
211
- sub_type = given_names_sources[0].sub_type # string
212
- time_stamp = given_names_sources[0].signed_time_stamp.time_stamp # DateTime object
213
- origin_server_certs = given_names_sources[0].origin_server_certs # list of X509 certificates
214
- ```
215
-
216
- In case you want to prove the sources and verifiers of the helper`ActivityDetails.age_verified` on `Age Over 18` set as age derivation, please retrieve it's original attribute from the profile as follow:
217
-
218
- ```ruby
219
- age_attribute = profile.get_attribute('age_over:18')
220
- sources = age_attribute.sources
221
- verifiers = age_attribute.verifiers
222
- anchors = age_attribute.anchors
223
- ```
224
-
225
- ## AML Integration
226
-
227
- Yoti provides an AML (Anti Money Laundering) check service to allow a deeper KYC process to prevent fraud. This is a chargeable service, so please contact [sdksupport@yoti.com](mailto:sdksupport@yoti.com) for more information.
228
-
229
- Yoti will provide a boolean result on the following checks:
230
-
231
- * PEP list - Verify against Politically Exposed Persons list
232
- * Fraud list - Verify against US Social Security Administration Fraud (SSN Fraud) list
233
- * Watch list - Verify against watch lists from the Office of Foreign Assets Control
234
-
235
- To use this functionality you must ensure your application is assigned to your organisation in the Yoti Hub - please see [here](https://developers.yoti.com/yoti-app-integration/yoti-app-integration#step-1-creating-an-organisation) for further information.
236
-
237
- For the AML check you will need to provide the following:
238
-
239
- * Data provided by Yoti (please ensure you have selected the Given name(s) and Family name attributes for your scenario on the Yoti Hub)
240
- * Given name(s)
241
- * Family name
242
- * Data that must be collected from the user:
243
- * Country of residence (must be an ISO 3166 3-letter code)
244
- * Social Security Number (US citizens only)
245
- * Postcode/Zip code (US citizens only)
246
-
247
- ### Consent
248
-
249
- Performing an AML check on a person *requires* their consent.
250
- **You must ensure you have user consent *before* using this service.**
251
-
252
- ### Code Example
253
-
254
- Given a YotiClient initialised with your SDK ID and KeyPair (see [Client Initialisation](#client-initialisation)) performing an AML check is a straightforward case of providing basic profile data.
255
-
256
- ```ruby
257
- require 'yoti'
258
-
259
- Yoti.configure do |config|
260
- config.client_sdk_id = ENV['YOTI_CLIENT_SDK_ID']
261
- config.key_file_path = ENV['YOTI_KEY_FILE_PATH']
262
- end
263
-
264
- aml_address = Yoti::AmlAddress.new('GBR')
265
- aml_profile = Yoti::AmlProfile.new('Edward Richard George', 'Heath', aml_address)
266
-
267
- puts Yoti::Client.aml_check(aml_profile)
268
- ```
127
+ ## Products
269
128
 
270
- ## Running the Examples
271
-
272
- The examples can be found in the [examples folder](examples).
273
-
274
- ### Ruby on Rails
275
-
276
- 1. Create your application in the [Yoti Hub](https://hub.yoti.com)
277
- 1. Set the application domain of your app to `localhost:3001`
278
- 1. Set the scenario callback URL to `/profile`
279
- 1. Rename the [.env.example](examples/rails/.env.example) file to `.env`
280
- 1. Fill in the environment variables in this file with the ones specific to your application (mentioned in the [Configuration](#configuration) section)
281
- 1. Install the dependencies by running the following commands
282
- ```ruby
283
- $ bundle install
284
- $ gem install foreman # We are doing this as it's not recommended to include foreman in your Gemfile
285
- ```
286
- 1. Start the server `foreman start`
287
-
288
- Visiting `https://localhost:3001/` should show a Yoti Connect button
289
-
290
- ### Sinatra
291
-
292
- 1. Create your application in the [Yoti Hub](https://hub.yoti.com)
293
- 1. Set the application domain of your app to `localhost:4567`
294
- 1. Set the scenario callback URL to `/profile`
295
- 1. Rename the [.env.example](examples/sinatra/.env.example) file to `.env`
296
- 1. Fill in the environment variables in this file with the ones specific to your application (mentioned in the [Configuration](#configuration) section)
297
- 1. Install the dependencies by running the following commands
298
- ```ruby
299
- $ bundle install
300
- $ gem install foreman # We are doing this as it's not recommended to include foreman in your Gemfile
301
- ```
302
- 1. Start the server `foreman start`
303
-
304
- Visiting `https://localhost:4567/` should show a Yoti Connect button
305
-
306
- ### AML Check
307
-
308
- * rename the [.env.example](examples/aml_check/.env.example) file to `.env` and fill in the required configuration values
309
- * install the dependencies with `bundle install`
310
- * run the script with `ruby ./app.rb`
311
-
312
- ## API Coverage
313
-
314
- * Activity Details
315
- * [X] Remember Me ID `remember_me_id`
316
- * [X] Parent Remember Me ID `parent_remember_me_id`
317
- * [X] Receipt ID `receipt_id`
318
- * [X] Timestamp `timestamp`
319
- * [X] Base64 Selfie URI `base64_selfie_uri`
320
- * [X] Age verified `age_verified`
321
- * [X] Profile `profile`
322
- * [X] Selfie `selfie`
323
- * [X] Full Name `full_name`
324
- * [X] Given Names `given_names`
325
- * [X] Family Name `family_name`
326
- * [X] Mobile Number `phone_number`
327
- * [X] Email Address `email_address`
328
- * [X] Age / Date of Birth `date_of_birth`
329
- * [X] Address `postal_address`
330
- * [X] Structured Postal Address `structured_postal_address`
331
- * [X] Gender `gender`
332
- * [X] Nationality `nationality`
333
- * [X] Application Profile `application_profile`
334
- * [X] Name `name`
335
- * [X] URL `url`
336
- * [X] Logo `logo`
337
- * [X] Receipt Background Color `receipt_bgcolor`
129
+ The Yoti SDK can be used for the following products, follow the links for more information about each:
130
+ 1) [Yoti app integration](/docs/PROFILE.md) - Connect with already-verified customers.
131
+ 1) [Yoti Doc Scan](/docs/DOCSCAN.md) - Identity verification embedded in your website or app.
132
+ 1) [Yoti AML](/docs/AML.md) - Anti-Money Laundering check service to allow a deeper KYC process, preventing fraud
338
133
 
339
134
  ## Support
340
135
 
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ require 'yaml'
6
6
  # Tests #
7
7
  ################################
8
8
 
9
- RSpec::Core::RakeTask.new(:spec) do |t|
9
+ RSpec::Core::RakeTask.new(:test_yoti) do |t|
10
10
  t.pattern = ['spec/yoti']
11
11
  end
12
12
 
@@ -14,6 +14,8 @@ RSpec::Core::RakeTask.new(:test_generators) do |t|
14
14
  t.pattern = ['spec/generators']
15
15
  end
16
16
 
17
+ RSpec::Core::RakeTask.new(:spec)
18
+
17
19
  ################################
18
20
  # Rubocop #
19
21
  ################################
@@ -29,6 +31,7 @@ end
29
31
 
30
32
  require 'yard'
31
33
  YARD::Rake::YardocTask.new do |t|
34
+ t.options = ['--output-dir', './yardoc']
32
35
  t.stats_options = ['--list-undoc']
33
36
  end
34
37
 
@@ -43,4 +46,5 @@ end
43
46
  # Defaults #
44
47
  ################################
45
48
 
46
- task default: %i[spec test_generators rubocop]
49
+ task default: %i[spec rubocop]
50
+ task test: %i[test_yoti test_generators rubocop]
@@ -1,4 +1,5 @@
1
1
  require 'securerandom'
2
+ require 'cgi'
2
3
 
3
4
  module Yoti
4
5
  # Manage the API's HTTPS requests
@@ -1,4 +1,4 @@
1
1
  module Yoti
2
2
  # @return [String] the gem's current version
3
- VERSION = '1.7.0'.freeze
3
+ VERSION = '1.7.1'.freeze
4
4
  end
@@ -5,8 +5,8 @@ require 'yoti/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'yoti'
7
7
  spec.version = Yoti::VERSION
8
- spec.authors = ['Sebastian Zaremba']
9
- spec.email = ['tech@yoti.com']
8
+ spec.authors = ['Yoti']
9
+ spec.email = ['websdk@yoti.com']
10
10
 
11
11
  spec.summary = 'Yoti Ruby SDK for back-end integration.'
12
12
  spec.description = <<-DESC
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.homepage = 'https://github.com/getyoti/yoti-ruby-sdk'
19
19
  spec.license = 'MIT'
20
20
 
21
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|examples)/|^sonar-project.properties$|^.dependabot/config.yml$|^.travis.yml$}) }
21
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|examples|docs)/|^sonar-project.properties$|^.dependabot/config.yml$|^.travis.yml$}) }
22
22
  spec.require_paths = ['lib']
23
23
 
24
24
  spec.required_ruby_version = '>= 2.4'
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.7.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
- - Sebastian Zaremba
7
+ - Yoti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-12 00:00:00.000000000 Z
11
+ date: 2020-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-protobuf
@@ -155,7 +155,7 @@ description: |2
155
155
  with Yoti, so that your users can share their identity details with your
156
156
  application in a secure and trusted way.
157
157
  email:
158
- - tech@yoti.com
158
+ - websdk@yoti.com
159
159
  executables: []
160
160
  extensions: []
161
161
  extra_rdoc_files: []
@@ -266,7 +266,6 @@ files:
266
266
  - lib/yoti/util/log.rb
267
267
  - lib/yoti/util/validation.rb
268
268
  - lib/yoti/version.rb
269
- - login_flow.png
270
269
  - rubocop.yml
271
270
  - yardstick.yml
272
271
  - yoti.gemspec
Binary file