yoti_sandbox 1.0.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.
- checksums.yaml +7 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.gitignore +56 -0
- data/CONTRIBUTING.md +30 -0
- data/Gemfile +8 -0
- data/Guardfile +11 -0
- data/LICENSE +21 -0
- data/README.md +45 -0
- data/Rakefile +41 -0
- data/lib/yoti_sandbox.rb +1 -0
- data/lib/yoti_sandbox/profile.rb +5 -0
- data/lib/yoti_sandbox/profile/age_verification.rb +112 -0
- data/lib/yoti_sandbox/profile/anchor.rb +72 -0
- data/lib/yoti_sandbox/profile/attribute.rb +49 -0
- data/lib/yoti_sandbox/profile/client.rb +54 -0
- data/lib/yoti_sandbox/profile/token_request.rb +319 -0
- data/rubocop.yml +44 -0
- data/yardstick.yml +9 -0
- data/yoti_sandbox.gemspec +33 -0
- metadata +175 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ee3b93e52cfe923f7311c9fb4e426c82f543d335d77986afce33a156020ebd49
|
4
|
+
data.tar.gz: c364243f9462bce1e2d115b4d538353b34c764412109e5fdbde6587e90e07ad3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 942ea35d3fb25a5d7b7cf9dc70c8bef7e61b15109295de0c56fabbb5ae15d8cf10fbb202a54b879cda88980ef940ceed2293fe0c0db3506a2318dce9c213f58d
|
7
|
+
data.tar.gz: 965241d45bb97c05cd45c3d2a88c5ac843655ce427787c76b5a4b84c57fd4d9d2501f8a8f7a8317e7a55e81c780a768dd172e167e38623346acfb2522d20990d
|
@@ -0,0 +1,17 @@
|
|
1
|
+
---
|
2
|
+
name: Custom issue template
|
3
|
+
about: " There's a better way to get help!"
|
4
|
+
title: ''
|
5
|
+
labels: ''
|
6
|
+
assignees: ''
|
7
|
+
|
8
|
+
---
|
9
|
+
|
10
|
+
#
|
11
|
+
# Wait ✋
|
12
|
+
#
|
13
|
+
# There's a better way to get help!
|
14
|
+
#
|
15
|
+
# Send your questions or issues to sdksupport@yoti.com
|
16
|
+
#
|
17
|
+
#
|
data/.gitignore
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/spec/examples.txt
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
# Used by dotenv library to load environment variables.
|
14
|
+
.env
|
15
|
+
|
16
|
+
# Ignore Byebug command history file.
|
17
|
+
.byebug_history
|
18
|
+
|
19
|
+
## Specific to RubyMotion:
|
20
|
+
.dat*
|
21
|
+
.repl_history
|
22
|
+
build/
|
23
|
+
*.bridgesupport
|
24
|
+
build-iPhoneOS/
|
25
|
+
build-iPhoneSimulator/
|
26
|
+
|
27
|
+
## Specific to RubyMotion (use of CocoaPods):
|
28
|
+
#
|
29
|
+
# We recommend against adding the Pods directory to your .gitignore. However
|
30
|
+
# you should judge for yourself, the pros and cons are mentioned at:
|
31
|
+
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
32
|
+
#
|
33
|
+
# vendor/Pods/
|
34
|
+
|
35
|
+
## Documentation cache and generated files:
|
36
|
+
/.yardoc/
|
37
|
+
/_yardoc/
|
38
|
+
/doc/
|
39
|
+
/rdoc/
|
40
|
+
|
41
|
+
## Environment normalization:
|
42
|
+
/.bundle/
|
43
|
+
/vendor/bundle
|
44
|
+
/lib/bundler/man/
|
45
|
+
|
46
|
+
# for a library or gem, you might want to ignore these files since the code is
|
47
|
+
# intended to run in multiple environments; otherwise, check them in:
|
48
|
+
Gemfile.lock
|
49
|
+
.ruby-version
|
50
|
+
.ruby-gemset
|
51
|
+
|
52
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
53
|
+
.rvmrc
|
54
|
+
|
55
|
+
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
|
56
|
+
# .rubocop-https?--*
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
After checking out the repo, run `bundle install` to install dependencies. Then, run `bundle exec rake spec` to run the tests. To install this gem onto your local machine, run `bundle exec rake install`.
|
4
|
+
|
5
|
+
You can use [Guard][] to automatically run the tests every time a file in the `lib` or `spec` folder changes.
|
6
|
+
|
7
|
+
Run Guard through Bundler with:
|
8
|
+
|
9
|
+
```shell
|
10
|
+
bundle exec guard
|
11
|
+
```
|
12
|
+
|
13
|
+
[Guard]: https://github.com/guard/guard
|
14
|
+
|
15
|
+
## Code coverage
|
16
|
+
|
17
|
+
The 100% code coverage requirement must be met before submitting new code.
|
18
|
+
This can be checked by opening the generated [SimpleCov][] files:
|
19
|
+
|
20
|
+
```shell
|
21
|
+
open coverage/index.html
|
22
|
+
```
|
23
|
+
|
24
|
+
## Style guide
|
25
|
+
|
26
|
+
The Ruby style guide is configured in the [rubocop.yml](rubocop.yml) file and can be checked by running:
|
27
|
+
|
28
|
+
```shell
|
29
|
+
bundle exec rake rubocop
|
30
|
+
```
|
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2020 Yoti Ltd
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Yoti Ruby Sandbox SDK
|
2
|
+
|
3
|
+
This repository contains the tools you need to test your Yoti integration.
|
4
|
+
|
5
|
+
## Installing the Sandbox
|
6
|
+
|
7
|
+
To import the Yoti Sandbox SDK inside your project, add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'yoti_sandbox'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
```shell
|
16
|
+
bundle install
|
17
|
+
```
|
18
|
+
|
19
|
+
Or simply run the following command from your terminal:
|
20
|
+
|
21
|
+
```shell
|
22
|
+
gem install yoti_sandbox
|
23
|
+
```
|
24
|
+
|
25
|
+
## Configuration
|
26
|
+
|
27
|
+
* `SANDBOX_CLIENT_SDK_ID` is the Sandbox SDK identifier generated by Yoti Hub from the Sandbox section. This is different to the Client SDK ID for your application.
|
28
|
+
|
29
|
+
* `/path/to/your-pem-file.pem` is the path to the application pem file. It can be downloaded only once from the Keys tab in your Yoti Hub.
|
30
|
+
|
31
|
+
Please do not open the pem file as this might corrupt the key and you will need to create a new application.
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
require 'yoti_sandbox'
|
35
|
+
|
36
|
+
Yoti.configure do |config|
|
37
|
+
config.client_sdk_id = 'SANDBOX_CLIENT_SDK_ID'
|
38
|
+
config.key_file_path = '/path/to/your-pem-file.pem'
|
39
|
+
config.api_endpoint = 'https://api.yoti.com/sandbox/v1'
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
## Examples
|
44
|
+
|
45
|
+
- See [examples/profile](examples/profile) for a general example of how to use the Profile Sandbox in your tests.
|
data/Rakefile
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
################################
|
6
|
+
# Tests #
|
7
|
+
################################
|
8
|
+
|
9
|
+
RSpec::Core::RakeTask.new
|
10
|
+
task test: :spec
|
11
|
+
|
12
|
+
################################
|
13
|
+
# Rubocop #
|
14
|
+
################################
|
15
|
+
|
16
|
+
require 'rubocop/rake_task'
|
17
|
+
RuboCop::RakeTask.new(:rubocop) do |t|
|
18
|
+
t.options = ['--config', 'rubocop.yml']
|
19
|
+
end
|
20
|
+
|
21
|
+
################################
|
22
|
+
# Documentation #
|
23
|
+
################################
|
24
|
+
|
25
|
+
require 'yard'
|
26
|
+
YARD::Rake::YardocTask.new do |t|
|
27
|
+
t.stats_options = ['--list-undoc']
|
28
|
+
end
|
29
|
+
|
30
|
+
yardstick_options = YAML.load_file('yardstick.yml')
|
31
|
+
|
32
|
+
require 'yardstick/rake/measurement'
|
33
|
+
Yardstick::Rake::Measurement.new(:measurement, yardstick_options) do |measurement|
|
34
|
+
measurement.output = 'measurement/report.txt'
|
35
|
+
end
|
36
|
+
|
37
|
+
################################
|
38
|
+
# Defaults #
|
39
|
+
################################
|
40
|
+
|
41
|
+
task default: %i[spec rubocop]
|
data/lib/yoti_sandbox.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'yoti_sandbox/profile'
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yoti
|
4
|
+
module Sandbox
|
5
|
+
module Profile
|
6
|
+
#
|
7
|
+
# Represents an Age Verification attribute that can be
|
8
|
+
# used by the profile sandbox service
|
9
|
+
#
|
10
|
+
class AgeVerification
|
11
|
+
#
|
12
|
+
# @param [DateTime|Time] date_of_birth
|
13
|
+
# @param [String] derivation
|
14
|
+
# @param [Array<Anchor>] anchors
|
15
|
+
#
|
16
|
+
# @return [self]
|
17
|
+
#
|
18
|
+
def initialize(
|
19
|
+
date_of_birth:,
|
20
|
+
derivation:,
|
21
|
+
anchors: []
|
22
|
+
)
|
23
|
+
@date_of_birth = date_of_birth
|
24
|
+
@derivation = derivation
|
25
|
+
@anchors = anchors
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# @return [Attribute]
|
30
|
+
#
|
31
|
+
def to_attribute
|
32
|
+
Attribute.new(
|
33
|
+
name: Yoti::Attribute::DATE_OF_BIRTH,
|
34
|
+
value: @date_of_birth.strftime('%F'),
|
35
|
+
derivation: @derivation,
|
36
|
+
anchors: @anchors
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# Builder for {AgeVerification}
|
43
|
+
#
|
44
|
+
class AgeVerificationBuilder
|
45
|
+
def initialize
|
46
|
+
@date_of_birth = nil
|
47
|
+
@derivation = nil
|
48
|
+
@anchors = []
|
49
|
+
end
|
50
|
+
|
51
|
+
#
|
52
|
+
# @param [DateTime|Time] date_of_birth
|
53
|
+
#
|
54
|
+
# @return [self]
|
55
|
+
#
|
56
|
+
def with_date_of_birth(date_of_birth)
|
57
|
+
@date_of_birth = date_of_birth
|
58
|
+
self
|
59
|
+
end
|
60
|
+
|
61
|
+
#
|
62
|
+
# @param [String] derivation
|
63
|
+
#
|
64
|
+
# @return [self]
|
65
|
+
#
|
66
|
+
def with_derivation(derivation)
|
67
|
+
@derivation = derivation
|
68
|
+
self
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
72
|
+
# @param [Integer] age
|
73
|
+
#
|
74
|
+
# @return [self]
|
75
|
+
#
|
76
|
+
def with_age_over(age)
|
77
|
+
with_derivation("#{Yoti::Attribute::AGE_OVER}#{age}")
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# @param [Integer] age
|
82
|
+
#
|
83
|
+
# @return [self]
|
84
|
+
#
|
85
|
+
def with_age_under(age)
|
86
|
+
with_derivation("#{Yoti::Attribute::AGE_UNDER}#{age}")
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# @param [Array<Anchor>] anchors
|
91
|
+
#
|
92
|
+
# @return [self]
|
93
|
+
#
|
94
|
+
def with_anchors(anchors)
|
95
|
+
@anchors = anchors
|
96
|
+
self
|
97
|
+
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# @return [AgeVerification]
|
101
|
+
#
|
102
|
+
def build
|
103
|
+
AgeVerification.new(
|
104
|
+
date_of_birth: @date_of_birth,
|
105
|
+
derivation: @derivation,
|
106
|
+
anchors: @anchors
|
107
|
+
)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yoti
|
4
|
+
module Sandbox
|
5
|
+
module Profile
|
6
|
+
#
|
7
|
+
# Represents an anchor that can be used by the profile sandbox service
|
8
|
+
#
|
9
|
+
class Anchor
|
10
|
+
#
|
11
|
+
# @param [String] type
|
12
|
+
# @param [String] value
|
13
|
+
# @param [String] sub_type
|
14
|
+
# @param [DateTime|Time] timestamp
|
15
|
+
#
|
16
|
+
def initialize(type:, value:, sub_type: '', timestamp: Time.now)
|
17
|
+
@type = type
|
18
|
+
@value = value
|
19
|
+
@sub_type = sub_type
|
20
|
+
@timestamp = timestamp
|
21
|
+
end
|
22
|
+
|
23
|
+
#
|
24
|
+
# @return [Hash]
|
25
|
+
#
|
26
|
+
def as_json(*_args)
|
27
|
+
{
|
28
|
+
type: @type,
|
29
|
+
value: @value,
|
30
|
+
sub_type: @sub_type,
|
31
|
+
timestamp: @timestamp.strftime('%s').to_i * 1_000_000
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# @return [String]
|
37
|
+
#
|
38
|
+
def to_json(*args)
|
39
|
+
as_json.to_json(*args)
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# @param [String] value
|
44
|
+
# @param [String] sub_type
|
45
|
+
# @param [DateTime|Time] timestamp
|
46
|
+
#
|
47
|
+
def self.source(value, sub_type: '', timestamp: Time.now)
|
48
|
+
Anchor.new(
|
49
|
+
type: 'SOURCE',
|
50
|
+
value: value,
|
51
|
+
sub_type: sub_type,
|
52
|
+
timestamp: timestamp
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# @param [String] value
|
58
|
+
# @param [String] sub_type
|
59
|
+
# @param [DateTime|Time] timestamp
|
60
|
+
#
|
61
|
+
def self.verifier(value, sub_type: '', timestamp: Time.now)
|
62
|
+
Anchor.new(
|
63
|
+
type: 'VERIFIER',
|
64
|
+
value: value,
|
65
|
+
sub_type: sub_type,
|
66
|
+
timestamp: timestamp
|
67
|
+
)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yoti
|
4
|
+
module Sandbox
|
5
|
+
module Profile
|
6
|
+
#
|
7
|
+
# Represents an attribute that can be used by the profile sandbox service
|
8
|
+
#
|
9
|
+
class Attribute
|
10
|
+
#
|
11
|
+
# @param [String] name
|
12
|
+
# @param [String] value
|
13
|
+
# @param [String] derivation
|
14
|
+
# @param [Array<Anchor>] anchors
|
15
|
+
#
|
16
|
+
def initialize(
|
17
|
+
name: '',
|
18
|
+
value: '',
|
19
|
+
derivation: '',
|
20
|
+
anchors: []
|
21
|
+
)
|
22
|
+
@name = name
|
23
|
+
@value = value
|
24
|
+
@derivation = derivation
|
25
|
+
@anchors = anchors
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# @return [Hash]
|
30
|
+
#
|
31
|
+
def as_json(*_args)
|
32
|
+
{
|
33
|
+
name: @name,
|
34
|
+
value: @value,
|
35
|
+
derivation: @derivation,
|
36
|
+
anchors: @anchors.map(&:as_json)
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
#
|
41
|
+
# @return [String]
|
42
|
+
#
|
43
|
+
def to_json(*args)
|
44
|
+
as_json(*args).to_json
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yoti'
|
4
|
+
require 'securerandom'
|
5
|
+
|
6
|
+
module Yoti
|
7
|
+
module Sandbox
|
8
|
+
module Profile
|
9
|
+
#
|
10
|
+
# Client for the profile sandbox service
|
11
|
+
#
|
12
|
+
class Client
|
13
|
+
#
|
14
|
+
# @param [String] base_url
|
15
|
+
#
|
16
|
+
def initialize(base_url: nil)
|
17
|
+
@base_url = base_url || "#{Yoti.configuration.api_url}/sandbox/v1"
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# @param [TokenRequest] token_request
|
22
|
+
#
|
23
|
+
# @return [String]
|
24
|
+
#
|
25
|
+
def setup_sharing_profile(token_request)
|
26
|
+
endpoint = "/apps/#{Yoti.configuration.client_sdk_id}/tokens?\
|
27
|
+
nonce=#{SecureRandom.uuid}×tamp=#{Time.now.to_i}"
|
28
|
+
uri = URI(
|
29
|
+
"#{@base_url}#{endpoint}"
|
30
|
+
)
|
31
|
+
|
32
|
+
response = Net::HTTP.start(
|
33
|
+
uri.hostname,
|
34
|
+
uri.port,
|
35
|
+
use_ssl: true
|
36
|
+
) do |http|
|
37
|
+
unsigned = Net::HTTP::Post.new uri
|
38
|
+
unsigned.body = token_request.to_json
|
39
|
+
signed_request = Yoti::SignedRequest.new(
|
40
|
+
unsigned,
|
41
|
+
endpoint,
|
42
|
+
token_request
|
43
|
+
).sign
|
44
|
+
http.request signed_request
|
45
|
+
end
|
46
|
+
|
47
|
+
raise "Failed to share profile #{response.code}: #{response.body}" unless response.code == '201'
|
48
|
+
|
49
|
+
JSON.parse(response.body)['token']
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,319 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yoti/data_type/attribute'
|
4
|
+
|
5
|
+
require 'base64'
|
6
|
+
|
7
|
+
require_relative 'attribute'
|
8
|
+
|
9
|
+
module Yoti
|
10
|
+
module Sandbox
|
11
|
+
module Profile
|
12
|
+
#
|
13
|
+
# TokenRequest used to retrieve a token from the profile sandbox service
|
14
|
+
#
|
15
|
+
class TokenRequest
|
16
|
+
#
|
17
|
+
# @param [String] remember_me_id
|
18
|
+
# @param [Array<Attribute>] attributes
|
19
|
+
#
|
20
|
+
def initialize(remember_me_id, attributes)
|
21
|
+
@remember_me_id = remember_me_id
|
22
|
+
@attributes = attributes
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# @return [Hash]
|
27
|
+
#
|
28
|
+
def as_json(*_args)
|
29
|
+
{
|
30
|
+
remember_me_id: @remember_me_id,
|
31
|
+
profile_attributes: @attributes.map(&:as_json)
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# @return [String]
|
37
|
+
#
|
38
|
+
def to_json(*_args)
|
39
|
+
as_json.to_json
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# Builder for {TokenRequest}
|
45
|
+
#
|
46
|
+
class TokenRequestBuilder
|
47
|
+
def initialize
|
48
|
+
@remember_me_id = ''
|
49
|
+
@attributes = []
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# @param [String] remember_me_id
|
54
|
+
#
|
55
|
+
# @return [self]
|
56
|
+
#
|
57
|
+
def with_remember_me_id(remember_me_id)
|
58
|
+
@remember_me_id = remember_me_id
|
59
|
+
self
|
60
|
+
end
|
61
|
+
|
62
|
+
#
|
63
|
+
# @param [Attribute] attribute
|
64
|
+
#
|
65
|
+
# @return [self]
|
66
|
+
#
|
67
|
+
def with_attribute(attribute)
|
68
|
+
@attributes.push attribute
|
69
|
+
self
|
70
|
+
end
|
71
|
+
|
72
|
+
#
|
73
|
+
# @param [String] value
|
74
|
+
# @param [Array<Anchor>] anchors
|
75
|
+
#
|
76
|
+
# @return [self]
|
77
|
+
#
|
78
|
+
def with_given_names(value, anchors: [])
|
79
|
+
with_attribute(
|
80
|
+
create_attribute(
|
81
|
+
name: Yoti::Attribute::GIVEN_NAMES,
|
82
|
+
value: value,
|
83
|
+
anchors: anchors
|
84
|
+
)
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
#
|
89
|
+
# @param [String] value
|
90
|
+
# @param [Array<Anchor>] anchors
|
91
|
+
#
|
92
|
+
# @return [self]
|
93
|
+
#
|
94
|
+
def with_family_name(value, anchors: [])
|
95
|
+
with_attribute(
|
96
|
+
create_attribute(
|
97
|
+
name: Yoti::Attribute::FAMILY_NAME,
|
98
|
+
value: value,
|
99
|
+
anchors: anchors
|
100
|
+
)
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
#
|
105
|
+
# @param [String] value
|
106
|
+
# @param [Array<Anchor>] anchors
|
107
|
+
#
|
108
|
+
# @return [self]
|
109
|
+
#
|
110
|
+
def with_full_name(value, anchors: [])
|
111
|
+
with_attribute(
|
112
|
+
create_attribute(
|
113
|
+
name: Yoti::Attribute::FULL_NAME,
|
114
|
+
value: value,
|
115
|
+
anchors: anchors
|
116
|
+
)
|
117
|
+
)
|
118
|
+
end
|
119
|
+
|
120
|
+
#
|
121
|
+
# @param [DateTime|Time] date
|
122
|
+
# @param [Array<Anchor>] anchors
|
123
|
+
#
|
124
|
+
# @return [self]
|
125
|
+
#
|
126
|
+
def with_date_of_birth(date, anchors: [])
|
127
|
+
with_attribute(
|
128
|
+
create_attribute(
|
129
|
+
name: Yoti::Attribute::DATE_OF_BIRTH,
|
130
|
+
value: date.strftime('%F'),
|
131
|
+
anchors: anchors
|
132
|
+
)
|
133
|
+
)
|
134
|
+
end
|
135
|
+
|
136
|
+
#
|
137
|
+
# @param [AgeVerification] age_verification
|
138
|
+
#
|
139
|
+
# @return [self]
|
140
|
+
#
|
141
|
+
def with_age_verification(age_verification)
|
142
|
+
with_attribute(age_verification.to_attribute)
|
143
|
+
end
|
144
|
+
|
145
|
+
#
|
146
|
+
# @param [String] value
|
147
|
+
# @param [Array<Anchor>] anchors
|
148
|
+
#
|
149
|
+
# @return [self]
|
150
|
+
#
|
151
|
+
def with_gender(value, anchors: [])
|
152
|
+
with_attribute(
|
153
|
+
create_attribute(
|
154
|
+
name: Yoti::Attribute::GENDER,
|
155
|
+
value: value,
|
156
|
+
anchors: anchors
|
157
|
+
)
|
158
|
+
)
|
159
|
+
end
|
160
|
+
|
161
|
+
#
|
162
|
+
# @param [String] value
|
163
|
+
# @param [Array<Anchor>] anchors
|
164
|
+
#
|
165
|
+
# @return [self]
|
166
|
+
#
|
167
|
+
def with_phone_number(value, anchors: [])
|
168
|
+
with_attribute(
|
169
|
+
create_attribute(
|
170
|
+
name: Yoti::Attribute::PHONE_NUMBER,
|
171
|
+
value: value,
|
172
|
+
anchors: anchors
|
173
|
+
)
|
174
|
+
)
|
175
|
+
end
|
176
|
+
|
177
|
+
#
|
178
|
+
# @param [String] value
|
179
|
+
# @param [Array<Anchor>] anchors
|
180
|
+
#
|
181
|
+
# @return [self]
|
182
|
+
#
|
183
|
+
def with_nationality(value, anchors: [])
|
184
|
+
with_attribute(
|
185
|
+
create_attribute(
|
186
|
+
name: Yoti::Attribute::NATIONALITY,
|
187
|
+
value: value,
|
188
|
+
anchors: anchors
|
189
|
+
)
|
190
|
+
)
|
191
|
+
end
|
192
|
+
|
193
|
+
#
|
194
|
+
# @param [String] value
|
195
|
+
# @param [Array<Anchor>] anchors
|
196
|
+
#
|
197
|
+
# @return [self]
|
198
|
+
#
|
199
|
+
def with_postal_address(value, anchors: [])
|
200
|
+
with_attribute(
|
201
|
+
create_attribute(
|
202
|
+
name: Yoti::Attribute::POSTAL_ADDRESS,
|
203
|
+
value: value,
|
204
|
+
anchors: anchors
|
205
|
+
)
|
206
|
+
)
|
207
|
+
end
|
208
|
+
|
209
|
+
#
|
210
|
+
# @param [Hash] data
|
211
|
+
# @param [Array<Anchor>] anchors
|
212
|
+
#
|
213
|
+
# @return [self]
|
214
|
+
#
|
215
|
+
def with_structured_postal_address(data, anchors: [])
|
216
|
+
with_attribute(
|
217
|
+
create_attribute(
|
218
|
+
name: Yoti::Attribute::STRUCTURED_POSTAL_ADDRESS,
|
219
|
+
value: data.to_json,
|
220
|
+
anchors: anchors
|
221
|
+
)
|
222
|
+
)
|
223
|
+
end
|
224
|
+
|
225
|
+
#
|
226
|
+
# @param [bin] data
|
227
|
+
# @param [Array<Anchor>] anchors
|
228
|
+
#
|
229
|
+
# @return [self]
|
230
|
+
#
|
231
|
+
def with_selfie(data, anchors: [])
|
232
|
+
with_base64_selfie(
|
233
|
+
Base64.strict_encode64(data),
|
234
|
+
anchors: anchors
|
235
|
+
)
|
236
|
+
end
|
237
|
+
|
238
|
+
#
|
239
|
+
# @param [String] base64_data
|
240
|
+
# @param [Array<Anchor>] anchors
|
241
|
+
#
|
242
|
+
# @return [self]
|
243
|
+
#
|
244
|
+
def with_base64_selfie(base64_data, anchors: [])
|
245
|
+
with_attribute(
|
246
|
+
create_attribute(
|
247
|
+
name: Yoti::Attribute::SELFIE,
|
248
|
+
value: base64_data,
|
249
|
+
anchors: anchors
|
250
|
+
)
|
251
|
+
)
|
252
|
+
end
|
253
|
+
|
254
|
+
#
|
255
|
+
# @param [String] value
|
256
|
+
# @param [Array<Anchor>] anchors
|
257
|
+
#
|
258
|
+
# @return [self]
|
259
|
+
#
|
260
|
+
def with_email_address(value, anchors: [])
|
261
|
+
with_attribute(
|
262
|
+
create_attribute(
|
263
|
+
name: Yoti::Attribute::EMAIL_ADDRESS,
|
264
|
+
value: value,
|
265
|
+
anchors: anchors
|
266
|
+
)
|
267
|
+
)
|
268
|
+
end
|
269
|
+
|
270
|
+
#
|
271
|
+
# @param [String] value
|
272
|
+
# @param [Array<Anchor>] anchors
|
273
|
+
#
|
274
|
+
# @return [self]
|
275
|
+
#
|
276
|
+
def with_document_details(value, anchors: [])
|
277
|
+
with_attribute(
|
278
|
+
create_attribute(
|
279
|
+
name: Yoti::Attribute::DOCUMENT_DETAILS,
|
280
|
+
value: value,
|
281
|
+
anchors: anchors
|
282
|
+
)
|
283
|
+
)
|
284
|
+
end
|
285
|
+
|
286
|
+
#
|
287
|
+
# @return [TokenRequest]
|
288
|
+
#
|
289
|
+
def build
|
290
|
+
TokenRequest.new(@remember_me_id, @attributes)
|
291
|
+
end
|
292
|
+
|
293
|
+
private
|
294
|
+
|
295
|
+
#
|
296
|
+
# @param [String] name
|
297
|
+
# @param [String] value
|
298
|
+
# @param [String] derivation
|
299
|
+
# @param [Array<Anchor>] anchors
|
300
|
+
#
|
301
|
+
# @return [Attribute]
|
302
|
+
#
|
303
|
+
def create_attribute(
|
304
|
+
name:,
|
305
|
+
value:,
|
306
|
+
derivation: '',
|
307
|
+
anchors: []
|
308
|
+
)
|
309
|
+
Yoti::Sandbox::Profile::Attribute.new(
|
310
|
+
name: name,
|
311
|
+
value: value,
|
312
|
+
derivation: derivation,
|
313
|
+
anchors: anchors
|
314
|
+
)
|
315
|
+
end
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
data/rubocop.yml
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
AllCops:
|
2
|
+
DisplayCopNames: true
|
3
|
+
DisplayStyleGuide: true
|
4
|
+
TargetRubyVersion: 2.4
|
5
|
+
|
6
|
+
Metrics/AbcSize:
|
7
|
+
Enabled: false
|
8
|
+
Max: 23
|
9
|
+
|
10
|
+
Metrics/BlockLength:
|
11
|
+
Exclude:
|
12
|
+
- spec/**/**/*.rb
|
13
|
+
- examples/**/*.rb
|
14
|
+
|
15
|
+
Metrics/ClassLength:
|
16
|
+
Enabled: false
|
17
|
+
Max: 115
|
18
|
+
|
19
|
+
Metrics/CyclomaticComplexity:
|
20
|
+
Max: 9
|
21
|
+
|
22
|
+
Metrics/LineLength:
|
23
|
+
Enabled: false
|
24
|
+
|
25
|
+
Metrics/MethodLength:
|
26
|
+
Enabled: false
|
27
|
+
CountComments: false
|
28
|
+
Max: 19
|
29
|
+
|
30
|
+
Style/Documentation:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
Style/FrozenStringLiteralComment:
|
34
|
+
Enabled: false
|
35
|
+
|
36
|
+
Style/NumericLiterals:
|
37
|
+
Enabled: false
|
38
|
+
|
39
|
+
Style/MutableConstant:
|
40
|
+
Enabled: false
|
41
|
+
|
42
|
+
Layout/MultilineMethodCallIndentation:
|
43
|
+
Exclude:
|
44
|
+
- examples/**/*.rb
|
data/yardstick.yml
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = 'yoti_sandbox'
|
6
|
+
spec.version = '1.0.0'
|
7
|
+
spec.authors = ['Yoti']
|
8
|
+
spec.email = ['websdk@yoti.com']
|
9
|
+
|
10
|
+
spec.summary = 'Yoti Ruby Sandbox SDK for back-end integration.'
|
11
|
+
spec.description = <<-DESC
|
12
|
+
This gem contains the tools you need to test your Ruby back-end
|
13
|
+
integration.
|
14
|
+
DESC
|
15
|
+
|
16
|
+
spec.homepage = 'https://github.com/getyoti/yoti-ruby-sdk-sandbox'
|
17
|
+
spec.license = 'MIT'
|
18
|
+
|
19
|
+
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$}) }
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.required_ruby_version = '>= 2.4'
|
23
|
+
|
24
|
+
spec.add_dependency 'yoti', '~> 1.6'
|
25
|
+
|
26
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
27
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
28
|
+
spec.add_development_dependency 'rspec', '~> 3.5'
|
29
|
+
spec.add_development_dependency 'simplecov', '~> 0.13'
|
30
|
+
spec.add_development_dependency 'webmock', '~> 3.3'
|
31
|
+
spec.add_development_dependency 'yard', '~> 0.9'
|
32
|
+
spec.add_development_dependency 'yardstick', '~> 0.9'
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yoti_sandbox
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Yoti
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-04-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: yoti
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '12.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '12.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.5'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.13'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.13'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.3'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.3'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: yard
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.9'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.9'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: yardstick
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.9'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.9'
|
125
|
+
description: |2
|
126
|
+
This gem contains the tools you need to test your Ruby back-end
|
127
|
+
integration.
|
128
|
+
email:
|
129
|
+
- websdk@yoti.com
|
130
|
+
executables: []
|
131
|
+
extensions: []
|
132
|
+
extra_rdoc_files: []
|
133
|
+
files:
|
134
|
+
- ".github/ISSUE_TEMPLATE.md"
|
135
|
+
- ".gitignore"
|
136
|
+
- CONTRIBUTING.md
|
137
|
+
- Gemfile
|
138
|
+
- Guardfile
|
139
|
+
- LICENSE
|
140
|
+
- README.md
|
141
|
+
- Rakefile
|
142
|
+
- lib/yoti_sandbox.rb
|
143
|
+
- lib/yoti_sandbox/profile.rb
|
144
|
+
- lib/yoti_sandbox/profile/age_verification.rb
|
145
|
+
- lib/yoti_sandbox/profile/anchor.rb
|
146
|
+
- lib/yoti_sandbox/profile/attribute.rb
|
147
|
+
- lib/yoti_sandbox/profile/client.rb
|
148
|
+
- lib/yoti_sandbox/profile/token_request.rb
|
149
|
+
- rubocop.yml
|
150
|
+
- yardstick.yml
|
151
|
+
- yoti_sandbox.gemspec
|
152
|
+
homepage: https://github.com/getyoti/yoti-ruby-sdk-sandbox
|
153
|
+
licenses:
|
154
|
+
- MIT
|
155
|
+
metadata: {}
|
156
|
+
post_install_message:
|
157
|
+
rdoc_options: []
|
158
|
+
require_paths:
|
159
|
+
- lib
|
160
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '2.4'
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
requirements: []
|
171
|
+
rubygems_version: 3.0.6
|
172
|
+
signing_key:
|
173
|
+
specification_version: 4
|
174
|
+
summary: Yoti Ruby Sandbox SDK for back-end integration.
|
175
|
+
test_files: []
|