virgil-sdk 4.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +15 -0
  4. data/Gemfile +4 -0
  5. data/README.md +134 -0
  6. data/Rakefile +9 -0
  7. data/bin/console +16 -0
  8. data/bin/setup +8 -0
  9. data/dockefiles/Dockerfile-200 +25 -0
  10. data/dockefiles/Dockerfile-2110 +36 -0
  11. data/dockefiles/Dockerfile-220 +26 -0
  12. data/dockefiles/Dockerfile-226 +25 -0
  13. data/dockefiles/Dockerfile-233 +25 -0
  14. data/dockefiles/Dockerfile-240 +26 -0
  15. data/docker-compose.yml +107 -0
  16. data/lib/virgil/sdk.rb +10 -0
  17. data/lib/virgil/sdk/client.rb +47 -0
  18. data/lib/virgil/sdk/client/card.rb +142 -0
  19. data/lib/virgil/sdk/client/card_validator.rb +104 -0
  20. data/lib/virgil/sdk/client/http.rb +45 -0
  21. data/lib/virgil/sdk/client/http/base_connection.rb +112 -0
  22. data/lib/virgil/sdk/client/http/cards_service_connection.rb +113 -0
  23. data/lib/virgil/sdk/client/http/request.rb +63 -0
  24. data/lib/virgil/sdk/client/request_signer.rb +90 -0
  25. data/lib/virgil/sdk/client/requests.rb +50 -0
  26. data/lib/virgil/sdk/client/requests/confirm_identity_request.rb +67 -0
  27. data/lib/virgil/sdk/client/requests/create_card_request.rb +105 -0
  28. data/lib/virgil/sdk/client/requests/revoke_card_request.rb +85 -0
  29. data/lib/virgil/sdk/client/requests/signable_request.rb +142 -0
  30. data/lib/virgil/sdk/client/requests/verify_identity_request.rb +60 -0
  31. data/lib/virgil/sdk/client/search_criteria.rb +79 -0
  32. data/lib/virgil/sdk/client/signatures_base64.rb +25 -0
  33. data/lib/virgil/sdk/client/virgil_client.rb +425 -0
  34. data/lib/virgil/sdk/cryptography.rb +42 -0
  35. data/lib/virgil/sdk/cryptography/hashes.rb +44 -0
  36. data/lib/virgil/sdk/cryptography/hashes/fingerprint.rb +79 -0
  37. data/lib/virgil/sdk/cryptography/hashes/hash_algorithm.rb +91 -0
  38. data/lib/virgil/sdk/cryptography/keys.rb +48 -0
  39. data/lib/virgil/sdk/cryptography/keys/key_pair.rb +46 -0
  40. data/lib/virgil/sdk/cryptography/keys/key_pair_type.rb +108 -0
  41. data/lib/virgil/sdk/cryptography/keys/key_storage.rb +177 -0
  42. data/lib/virgil/sdk/cryptography/keys/private_key.rb +44 -0
  43. data/lib/virgil/sdk/cryptography/keys/public_key.rb +44 -0
  44. data/lib/virgil/sdk/cryptography/keys/storage_item.rb +63 -0
  45. data/lib/virgil/sdk/cryptography/virgil_crypto.rb +411 -0
  46. data/lib/virgil/sdk/high_level.rb +21 -0
  47. data/lib/virgil/sdk/high_level/virgil_api.rb +71 -0
  48. data/lib/virgil/sdk/high_level/virgil_app_credentials.rb +54 -0
  49. data/lib/virgil/sdk/high_level/virgil_buffer.rb +161 -0
  50. data/lib/virgil/sdk/high_level/virgil_card.rb +204 -0
  51. data/lib/virgil/sdk/high_level/virgil_card_manager.rb +294 -0
  52. data/lib/virgil/sdk/high_level/virgil_card_verifier_info.rb +49 -0
  53. data/lib/virgil/sdk/high_level/virgil_context.rb +69 -0
  54. data/lib/virgil/sdk/high_level/virgil_identity.rb +17 -0
  55. data/lib/virgil/sdk/high_level/virgil_identity/email_confirmation.rb +60 -0
  56. data/lib/virgil/sdk/high_level/virgil_identity/validation_token.rb +49 -0
  57. data/lib/virgil/sdk/high_level/virgil_identity/verification_attempt.rb +69 -0
  58. data/lib/virgil/sdk/high_level/virgil_identity/verification_options.rb +56 -0
  59. data/lib/virgil/sdk/high_level/virgil_key.rb +168 -0
  60. data/lib/virgil/sdk/high_level/virgil_key_manager.rb +97 -0
  61. data/lib/virgil/sdk/version.rb +5 -0
  62. data/virgil-sdk.gemspec +31 -0
  63. metadata +203 -0
@@ -0,0 +1,113 @@
1
+ # Copyright (C) 2016 Virgil Security Inc.
2
+ #
3
+ # Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
4
+ #
5
+ # All rights reserved.
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without
8
+ # modification, are permitted provided that the following conditions are
9
+ # met:
10
+ #
11
+ # (1) Redistributions of source code must retain the above copyright
12
+ # notice, this list of conditions and the following disclaimer.
13
+ #
14
+ # (2) Redistributions in binary form must reproduce the above copyright
15
+ # notice, this list of conditions and the following disclaimer in
16
+ # the documentation and/or other materials provided with the
17
+ # distribution.
18
+ #
19
+ # (3) Neither the name of the copyright holder nor the names of its
20
+ # contributors may be used to endorse or promote products derived from
21
+ # this software without specific prior written permission.
22
+ #
23
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
24
+ # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26
+ # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
27
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32
+ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ # POSSIBILITY OF SUCH DAMAGE.
34
+
35
+ module Virgil
36
+ module SDK
37
+ module Client
38
+ module HTTP
39
+ # Cards service connection class.
40
+ #
41
+ # Contains cards service specific errors dictionary.
42
+ class CardsServiceConnection < BaseConnection
43
+ ERRORS = {
44
+ 10000 => "Internal application error. You know, shit happens, so do internal server errors.Just take a deep breath and try harder.",
45
+ 20300 => "The Virgil access token was not specified or is invalid",
46
+ 20301 => "The Virgil authenticator service responded with an error",
47
+ 20302 => "The Virgil access token validation has failed on the Virgil Authenticator service",
48
+ 20303 => "The application was not found for the acsses token",
49
+ 20400 => "Request sign is invalid",
50
+ 20401 => "Request sign header is missing",
51
+ 20500 => "The Virgil Card is not available in this application",
52
+ 30000 => "JSON specified as a request is invalid",
53
+ 30010 => "A data inconsistency error",
54
+ 30100 => "Global Virgil Card identity type is invalid, because it can be only an 'email'",
55
+ 30101 => "Virgil Card scope must be either 'global' or 'application'",
56
+ 30102 => "Virgil Card id validation failed",
57
+ 30103 => "Virgil Card data parameter cannot contain more than 16 entries",
58
+ 30104 => "Virgil Card info parameter cannot be empty if specified and must contain 'device' and/or 'device_name' key",
59
+ 30105 => "Virgil Card info parameters length validation failed.The length cannot exceed 256 characters",
60
+ 30106 => "Virgil Card data parameter must be an associative array(https://en.wikipedia.org/wiki/Associative_array)",
61
+ 30107 => "A CSR parameter (content_snapshot) parameter is missing or is incorrect",
62
+ 30111 => "Virgil Card identities passed to search endpoint must be a list of non-empty strings",
63
+ 30113 => "Virgil Card identity type is invalid",
64
+ 30116 => "Virgil Card identity application is invalid",
65
+ 30117 => "Public key length is invalid.It goes from 16 to 2048 bytes",
66
+ 30118 => "Public key must be base64-encoded string",
67
+ 30119 => "Virgil Card data parameter must be a key/value list of strings",
68
+ 30120 => "Virgil Card data parameters must be strings",
69
+ 30121 => "Virgil Card custom data entry value length validation failed.It mustn't exceed 256 characters",
70
+ 30122 => "VirgilIdentity validation token is invalid",
71
+ 30123 => "SCR signs list parameter is missing or is invalid",
72
+ # 30126 => "SCR sign item signer card id is irrelevant and doesn't match Virgil Card id or Application Id",
73
+ # 30127 => "SCR sign item signed digest is invalid for the Virgil Card public key",
74
+ 30128 => "SCR sign item signed digest is invalid for the application",
75
+ 30131 => "Virgil Card id specified in the request body must match with the one passed in the URL",
76
+ 30134 => "Virgil Card data parameters key must be aplphanumerical",
77
+ # 30135 => "Virgil Card validation token must be an object with value parameter",
78
+ # 30136 => "SCR sign item signed digest is invalid for the virgil identity service",
79
+ 30137 => "Global Virigl Card cannot be created unconfirmed(which means that Virgil VirgilIdentity service sign is mandatory)",
80
+ 30138 => "Virigl Card with the same fingerprint exists already",
81
+ 30139 => "Virigl Card revocation reason isn't specified or is invalid",
82
+ 30140 => "SCR sign validation failed",
83
+ 30141 => "SCR one of signers Virgil Cards is not found",
84
+ 30142 => "SCR sign item is invalid or missing for the Client",
85
+ 30143 => "SCR sign item is invalid or missing for the Virgil Registration Authority service",
86
+ 30300 => "Development Portal sign was not found inside the meta.signs property",
87
+ 30301 => "Development Portal sign is invalid",
88
+ 30302 => "VirgilIdentity Validation Token is invalid or has expired",
89
+ 30303 => "Provided Virgil Card was not found or invalid",
90
+ 40000 => "JSON specified as a request body is invalid",
91
+ 40100 => "VirgilIdentity type is invalid",
92
+ 40110 => "VirgilIdentity's ttl is invalid",
93
+ 40120 => "VirgilIdentity's ctl is invalid",
94
+ 40130 => "VirgilIdentity's token parameter is missing",
95
+ 40140 => "VirgilIdentity's token doesn't match parameters",
96
+ 40150 => "VirgilIdentity's token has expired",
97
+ 40160 => "VirgilIdentity's token cannot be decrypted",
98
+ 40170 => "VirgilIdentity's token parameter is invalid",
99
+ 40180 => "VirgilIdentity is not unconfirmed",
100
+ 40190 => "Hash to be signed parameter is invalid",
101
+ 40200 => "Email identity value validation failed",
102
+ 40210 => "VirgilIdentity's confirmation code is invalid",
103
+ 40300 => "Application value is invalid",
104
+ 40310 => "Application's signed message is invalid",
105
+ 41000 => "VirgilIdentity entity was not found",
106
+ 41010 => "VirgilIdentity's confirmation period has expired",
107
+ 50010 => "Requested route was not found"
108
+ }
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,63 @@
1
+ # Copyright (C) 2016 Virgil Security Inc.
2
+ #
3
+ # Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
4
+ #
5
+ # All rights reserved.
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without
8
+ # modification, are permitted provided that the following conditions are
9
+ # met:
10
+ #
11
+ # (1) Redistributions of source code must retain the above copyright
12
+ # notice, this list of conditions and the following disclaimer.
13
+ #
14
+ # (2) Redistributions in binary form must reproduce the above copyright
15
+ # notice, this list of conditions and the following disclaimer in
16
+ # the documentation and/or other materials provided with the
17
+ # distribution.
18
+ #
19
+ # (3) Neither the name of the copyright holder nor the names of its
20
+ # contributors may be used to endorse or promote products derived from
21
+ # this software without specific prior written permission.
22
+ #
23
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
24
+ # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26
+ # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
27
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32
+ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ # POSSIBILITY OF SUCH DAMAGE.
34
+
35
+ module Virgil
36
+ module SDK
37
+ module Client
38
+ module HTTP
39
+ # Http request wrapper.
40
+ #
41
+ # Attributes:
42
+ # endpoint: request endpoint
43
+ # body: request body
44
+ # headers: dict of request additional headers
45
+ # method: http request method
46
+ Request = Struct.new(:endpoint, :body, :headers, :method) do
47
+ # Constructs new Request object.
48
+ def initialize(attributes)
49
+ self.endpoint = attributes[:endpoint]
50
+ self.body = attributes[:body]
51
+ self.headers = attributes[:headers]
52
+ self.method = attributes[:method]
53
+ end
54
+ end
55
+
56
+ Request::GET = :get
57
+ Request::POST = :post
58
+ Request::PUT = :put
59
+ Request::DELETE = :delete
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,90 @@
1
+ # Copyright (C) 2016 Virgil Security Inc.
2
+ #
3
+ # Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
4
+ #
5
+ # All rights reserved.
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without
8
+ # modification, are permitted provided that the following conditions are
9
+ # met:
10
+ #
11
+ # (1) Redistributions of source code must retain the above copyright
12
+ # notice, this list of conditions and the following disclaimer.
13
+ #
14
+ # (2) Redistributions in binary form must reproduce the above copyright
15
+ # notice, this list of conditions and the following disclaimer in
16
+ # the documentation and/or other materials provided with the
17
+ # distribution.
18
+ #
19
+ # (3) Neither the name of the copyright holder nor the names of its
20
+ # contributors may be used to endorse or promote products derived from
21
+ # this software without specific prior written permission.
22
+ #
23
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
24
+ # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26
+ # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
27
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32
+ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ # POSSIBILITY OF SUCH DAMAGE.
34
+
35
+ module Virgil
36
+ module SDK
37
+ module Client
38
+ # Class used for signing high_level requests.
39
+ class RequestSigner
40
+ attr_reader :crypto
41
+
42
+ # Constructs new RequestSigner object
43
+ def initialize(crypto)
44
+ @crypto = crypto
45
+ end
46
+
47
+ # Sign passed request with private key.
48
+ #
49
+ # Args:
50
+ # signable_request: request for signing.
51
+ # private_key: private key to sign with.
52
+ def self_sign(signable_request, private_key)
53
+ fingerprint = self.crypto.calculate_fingerprint(
54
+ signable_request.snapshot
55
+ )
56
+ signature = self.crypto.sign(
57
+ fingerprint.value,
58
+ private_key
59
+ )
60
+
61
+ signable_request.sign_with(
62
+ fingerprint.to_hex,
63
+ signature
64
+ )
65
+ end
66
+
67
+ # Sign passed request with authority private key.
68
+ #
69
+ # Args:
70
+ # signable_request: request for signing.
71
+ # signer_id: authority id.
72
+ # private_key: authority private key to sign with.
73
+ def authority_sign(signable_request, signer_id, private_key)
74
+ fingerprint = self.crypto.calculate_fingerprint(
75
+ signable_request.snapshot
76
+ )
77
+ signature = self.crypto.sign(
78
+ fingerprint.value,
79
+ private_key
80
+ )
81
+
82
+ signable_request.sign_with(
83
+ signer_id,
84
+ signature
85
+ )
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,50 @@
1
+ # Copyright (C) 2016 Virgil Security Inc.
2
+ #
3
+ # Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
4
+ #
5
+ # All rights reserved.
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without
8
+ # modification, are permitted provided that the following conditions are
9
+ # met:
10
+ #
11
+ # (1) Redistributions of source code must retain the above copyright
12
+ # notice, this list of conditions and the following disclaimer.
13
+ #
14
+ # (2) Redistributions in binary form must reproduce the above copyright
15
+ # notice, this list of conditions and the following disclaimer in
16
+ # the documentation and/or other materials provided with the
17
+ # distribution.
18
+ #
19
+ # (3) Neither the name of the copyright holder nor the names of its
20
+ # contributors may be used to endorse or promote products derived from
21
+ # this software without specific prior written permission.
22
+ #
23
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
24
+ # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26
+ # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
27
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29
+ # SERVICES; LOSS OF USE, bytes, OR PROFITS; OR BUSINESS INTERRUPTION)
30
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32
+ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ # POSSIBILITY OF SUCH DAMAGE.
34
+ module Virgil
35
+ module SDK
36
+ module Client
37
+ module Requests
38
+ autoload :SignableRequest, 'virgil/sdk/client/requests/signable_request'
39
+ autoload :RevokeCardRequest,
40
+ 'virgil/sdk/client/requests/revoke_card_request'
41
+ autoload :CreateCardRequest,
42
+ 'virgil/sdk/client/requests/create_card_request'
43
+ autoload :VerifyIdentityRequest,
44
+ 'virgil/sdk/client/requests/verify_identity_request'
45
+ autoload :ConfirmIdentityRequest,
46
+ 'virgil/sdk/client/requests/confirm_identity_request'
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,67 @@
1
+ # Copyright (C) 2016 Virgil Security Inc.
2
+ #
3
+ # Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
4
+ #
5
+ # All rights reserved.
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without
8
+ # modification, are permitted provided that the following conditions are
9
+ # met:
10
+ #
11
+ # (1) Redistributions of source code must retain the above copyright
12
+ # notice, this list of conditions and the following disclaimer.
13
+ #
14
+ # (2) Redistributions in binary form must reproduce the above copyright
15
+ # notice, this list of conditions and the following disclaimer in
16
+ # the documentation and/or other materials provided with the
17
+ # distribution.
18
+ #
19
+ # (3) Neither the name of the copyright holder nor the names of its
20
+ # contributors may be used to endorse or promote products derived from
21
+ # this software without specific prior written permission.
22
+ #
23
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
24
+ # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26
+ # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
27
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32
+ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ # POSSIBILITY OF SUCH DAMAGE.
34
+
35
+
36
+ module Virgil
37
+ module SDK
38
+ module Client
39
+ module Requests
40
+ class ConfirmIdentityRequest
41
+ attr_reader :confirmation_code, :action_id, :time_to_live, :count_to_live
42
+ #
43
+ def initialize(confirmation_code, action_id, time_to_live, count_to_live)
44
+ @confirmation_code = confirmation_code
45
+ @action_id = action_id
46
+ @time_to_live = time_to_live
47
+ @count_to_live = count_to_live
48
+ end
49
+
50
+
51
+ # # Request model used for json representation.
52
+ def request_model
53
+ return {
54
+ 'confirmation_code': confirmation_code,
55
+ 'action_id': action_id,
56
+ 'token': {
57
+ 'time_to_live': time_to_live,
58
+ 'count_to_live': count_to_live
59
+ }
60
+ }
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+
@@ -0,0 +1,105 @@
1
+ # Copyright (C) 2016 Virgil Security Inc.
2
+ #
3
+ # Lead Maintainer: Virgil Security Inc. <support@virgilsecurity.com>
4
+ #
5
+ # All rights reserved.
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without
8
+ # modification, are permitted provided that the following conditions are
9
+ # met:
10
+ #
11
+ # (1) Redistributions of source code must retain the above copyright
12
+ # notice, this list of conditions and the following disclaimer.
13
+ #
14
+ # (2) Redistributions in binary form must reproduce the above copyright
15
+ # notice, this list of conditions and the following disclaimer in
16
+ # the documentation and/or other materials provided with the
17
+ # distribution.
18
+ #
19
+ # (3) Neither the name of the copyright holder nor the names of its
20
+ # contributors may be used to endorse or promote products derived from
21
+ # this software without specific prior written permission.
22
+ #
23
+ # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
24
+ # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26
+ # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
27
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32
+ # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ # POSSIBILITY OF SUCH DAMAGE.
34
+
35
+ module Virgil
36
+ module SDK
37
+ module Client
38
+ module Requests
39
+ # Create card signable API request.
40
+ class CreateCardRequest < SignableRequest
41
+ attr_accessor :identity, :identity_type, :public_key, :data, :info, :scope
42
+
43
+ # Constructs new CreateCardRequest object
44
+ def initialize(attributes)
45
+ super()
46
+ self.identity = attributes[:identity]
47
+ self.identity_type = attributes[:identity_type]
48
+ self.public_key = attributes[:raw_public_key]
49
+ self.scope = attributes[:scope] || Card::APPLICATION
50
+ self.data = attributes[:data]
51
+ self.info = attributes[:info]
52
+ end
53
+
54
+ # Restores request from snapshot model.
55
+ #
56
+ # Args:
57
+ # snapshot_model: snapshot model dict
58
+ def restore_from_snapshot_model(snapshot_model)
59
+ self.identity = snapshot_model['identity']
60
+ self.identity_type = snapshot_model['identity_type']
61
+ self.public_key = snapshot_model['public_key']
62
+ self.scope = snapshot_model['scope']
63
+ self.data = snapshot_model.fetch('data', {})
64
+ self.info = snapshot_model['info']
65
+ end
66
+
67
+
68
+ def self.import(data_base64)
69
+ request = new({})
70
+ begin
71
+ request_model = JSON.parse(Base64.decode64(data_base64))
72
+ rescue JSON::ParserError => e
73
+ raise ArgumentError.new("data_base64 is not valid")
74
+ end
75
+ validation_token = nil
76
+ if request_model['meta']['validation'] && request_model['meta']['validation']['token']
77
+ validation_token = Virgil::Crypto::Bytes.from_base64(request_model['meta']['validation']['token'])
78
+ end
79
+ request.restore(Virgil::Crypto::Bytes.from_base64(request_model['content_snapshot']),
80
+ request_model['meta']['signs'],
81
+ validation_token
82
+ )
83
+ request
84
+ end
85
+
86
+ # Constructs snapshot model for exporting and signing.
87
+ #
88
+ # Returns:
89
+ # Dict containing snapshot data model used for card creation request.
90
+ def snapshot_model
91
+ model = {
92
+ 'identity': identity,
93
+ 'identity_type': identity_type,
94
+ 'public_key': Virgil::Crypto::Bytes.new(public_key).to_base64,
95
+ 'scope': scope,
96
+ 'data': data
97
+ }
98
+ model['info'] = info if (info && info.any?)
99
+ model
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end