selfsdk 0.0.144 → 0.0.149
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 +4 -4
- data/lib/acl.rb +2 -0
- data/lib/authenticated.rb +2 -0
- data/lib/client.rb +2 -0
- data/lib/crypto.rb +4 -1
- data/lib/jwt_service.rb +2 -0
- data/lib/log.rb +7 -3
- data/lib/messages/attestation.rb +2 -0
- data/lib/messages/authentication_message.rb +2 -0
- data/lib/messages/authentication_req.rb +5 -7
- data/lib/messages/authentication_resp.rb +2 -0
- data/lib/messages/base.rb +27 -5
- data/lib/messages/fact.rb +2 -0
- data/lib/messages/fact_request.rb +4 -11
- data/lib/messages/fact_response.rb +2 -0
- data/lib/messages/message.rb +2 -0
- data/lib/messaging.rb +8 -3
- data/lib/ntptime.rb +2 -0
- data/lib/proto/acl_pb.rb +2 -0
- data/lib/proto/aclcommand_pb.rb +2 -0
- data/lib/proto/auth_pb.rb +2 -0
- data/lib/proto/errtype_pb.rb +2 -0
- data/lib/proto/header_pb.rb +2 -0
- data/lib/proto/message_pb.rb +2 -0
- data/lib/proto/msgtype_pb.rb +2 -0
- data/lib/proto/notification_pb.rb +2 -0
- data/lib/selfsdk.rb +2 -0
- data/lib/services/auth.rb +2 -0
- data/lib/services/facts.rb +56 -2
- data/lib/services/identity.rb +2 -0
- data/lib/services/messaging.rb +2 -0
- data/lib/signature_graph.rb +2 -0
- data/lib/sources.rb +10 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d487478c6ceb2f7fb8608d962166ff216881c4103a27f58e5af4f251546965d
|
4
|
+
data.tar.gz: a6acca2829e1be56e53f254d8bee1ffb3292b8583e50bf73a1a0f2eba829cc99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb153ee5559cac115d6d2a71d8502d82e07b8fb50207e0746c10c267be3d9accdd90a0a09e60546690315e91904bc7399e34abcb151fdcdc8415f7ada534b283
|
7
|
+
data.tar.gz: f72d24cef7b29a17e2ab4dde6e636925a3163f3b8379a7ae5701d4013c448bfdb67727eba8bde49279625ea1da72e1166d9e90435898995bfdac206701331739
|
data/lib/acl.rb
CHANGED
data/lib/authenticated.rb
CHANGED
data/lib/client.rb
CHANGED
data/lib/crypto.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright 2020 Self Group Ltd. All Rights Reserved.
|
2
|
+
|
1
3
|
require 'self_crypto'
|
2
4
|
|
3
5
|
module SelfSDK
|
@@ -44,7 +46,8 @@ module SelfSDK
|
|
44
46
|
res = @client.get("/v1/identities/#{recipient}/devices/#{recipient_device}/pre_keys")
|
45
47
|
|
46
48
|
if res.code != 200
|
47
|
-
|
49
|
+
b = JSON.parse(res.body)
|
50
|
+
::SelfSDK.logger.error "identity response : #{b['message']}"
|
48
51
|
raise "could not get identity pre_keys"
|
49
52
|
end
|
50
53
|
|
data/lib/jwt_service.rb
CHANGED
data/lib/log.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright 2020 Self Group Ltd. All Rights Reserved.
|
2
|
+
|
1
3
|
# frozen_string_literal: true
|
2
4
|
|
3
5
|
require 'logger'
|
@@ -7,9 +9,11 @@ module SelfSDK
|
|
7
9
|
attr_writer :logger
|
8
10
|
|
9
11
|
def logger
|
10
|
-
@logger ||=
|
11
|
-
|
12
|
-
|
12
|
+
@logger ||= Logger.new('/dev/null')
|
13
|
+
|
14
|
+
#@logger ||= ::Logger.new($stdout).tap do |log|
|
15
|
+
# log.progname = name
|
16
|
+
#end
|
13
17
|
end
|
14
18
|
end
|
15
19
|
end
|
data/lib/messages/attestation.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright 2020 Self Group Ltd. All Rights Reserved.
|
2
|
+
|
1
3
|
# frozen_string_literal: true
|
2
4
|
|
3
5
|
require_relative 'base'
|
@@ -38,16 +40,12 @@ module SelfSDK
|
|
38
40
|
|
39
41
|
protected
|
40
42
|
|
41
|
-
def proto
|
42
|
-
app = @client.app(@jwt.id)
|
43
|
-
raise "Your credits have expired, please log in to the developer portal and top up your account." if app[:paid_actions] == false
|
44
|
-
|
45
|
-
@to_device = @client.devices(@to).first
|
43
|
+
def proto(to_device)
|
46
44
|
Msgproto::Message.new(type: Msgproto::MsgType::MSG,
|
47
45
|
sender: "#{@jwt.id}:#{@messaging.device_id}",
|
48
46
|
id: @id,
|
49
|
-
recipient: "#{@to}:#{
|
50
|
-
ciphertext: encrypt_message(@jwt.prepare(body), @to,
|
47
|
+
recipient: "#{@to}:#{to_device}",
|
48
|
+
ciphertext: encrypt_message(@jwt.prepare(body), @to, to_device))
|
51
49
|
end
|
52
50
|
|
53
51
|
end
|
data/lib/messages/base.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright 2020 Self Group Ltd. All Rights Reserved.
|
2
|
+
|
1
3
|
# frozen_string_literal: true
|
2
4
|
|
3
5
|
module SelfSDK
|
@@ -15,15 +17,24 @@ module SelfSDK
|
|
15
17
|
end
|
16
18
|
|
17
19
|
def request
|
18
|
-
|
19
|
-
|
20
|
+
check_credits!
|
21
|
+
msgs = []
|
22
|
+
devices.each do |d|
|
23
|
+
msgs << proto(d)
|
24
|
+
end
|
25
|
+
res = @messaging.send_and_wait_for_response(msgs, self)
|
26
|
+
SelfSDK.logger.info "synchronously messaging to #{@to}:#{@d}"
|
20
27
|
res
|
21
28
|
end
|
22
29
|
|
23
30
|
def send_message
|
24
|
-
|
25
|
-
|
26
|
-
|
31
|
+
check_credits!
|
32
|
+
res = []
|
33
|
+
devices.each do |d|
|
34
|
+
res << @messaging.send_message(proto(d))
|
35
|
+
SelfSDK.logger.info "asynchronously requested information to #{@to}:#{@d}"
|
36
|
+
end
|
37
|
+
res.first
|
27
38
|
end
|
28
39
|
|
29
40
|
def encrypt_message(message, recipient, recipient_device)
|
@@ -65,6 +76,17 @@ module SelfSDK
|
|
65
76
|
raise ::StandardError.new("must define this method")
|
66
77
|
end
|
67
78
|
|
79
|
+
def devices
|
80
|
+
return @client.devices(@to) if @intermediary.nil?
|
81
|
+
|
82
|
+
@client.devices(@intermediary)
|
83
|
+
end
|
84
|
+
|
85
|
+
def check_credits!
|
86
|
+
app = @client.app(@jwt.id)
|
87
|
+
raise "Your credits have expired, please log in to the developer portal and top up your account." if app[:paid_actions] == false
|
88
|
+
end
|
89
|
+
|
68
90
|
private
|
69
91
|
|
70
92
|
def get_payload(input)
|
data/lib/messages/fact.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright 2020 Self Group Ltd. All Rights Reserved.
|
2
|
+
|
1
3
|
# frozen_string_literal: true
|
2
4
|
|
3
5
|
require_relative 'base'
|
@@ -85,17 +87,8 @@ module SelfSDK
|
|
85
87
|
|
86
88
|
protected
|
87
89
|
|
88
|
-
def proto
|
89
|
-
|
90
|
-
raise "Your credits have expired, please log in to the developer portal and top up your account." if app[:paid_actions] == false
|
91
|
-
|
92
|
-
devices = if @intermediary.nil?
|
93
|
-
@client.devices(@to)
|
94
|
-
else
|
95
|
-
@client.devices(@intermediary)
|
96
|
-
end
|
97
|
-
@to_device = devices.first
|
98
|
-
|
90
|
+
def proto(to_device)
|
91
|
+
@to_device = to_device
|
99
92
|
if @intermediary.nil?
|
100
93
|
recipient = "#{@to}:#{@to_device}"
|
101
94
|
ciphertext = encrypt_message(@jwt.prepare(body), @to, @to_device)
|
data/lib/messages/message.rb
CHANGED
data/lib/messaging.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright 2020 Self Group Ltd. All Rights Reserved.
|
2
|
+
|
1
3
|
# frozen_string_literal: true
|
2
4
|
|
3
5
|
require 'json'
|
@@ -94,6 +96,7 @@ module SelfSDK
|
|
94
96
|
# @param type [string] message type
|
95
97
|
# @param request [hash] original message requesing information
|
96
98
|
def send_custom(recipient, request_body)
|
99
|
+
# TODO (adriacidre) this is sending the message to the first device only
|
97
100
|
@to_device = @client.devices(recipient).first
|
98
101
|
send_message msg = Msgproto::Message.new(
|
99
102
|
type: Msgproto::MsgType::MSG,
|
@@ -142,9 +145,11 @@ module SelfSDK
|
|
142
145
|
# Sends a message and waits for the response
|
143
146
|
#
|
144
147
|
# @params msg [Msgproto::Message] message object to be sent
|
145
|
-
def send_and_wait_for_response(
|
146
|
-
wait_for
|
147
|
-
|
148
|
+
def send_and_wait_for_response(msgs, original)
|
149
|
+
wait_for msgs.first.id, original do
|
150
|
+
msgs.each do |msg|
|
151
|
+
send_message msg
|
152
|
+
end
|
148
153
|
end
|
149
154
|
end
|
150
155
|
|
data/lib/ntptime.rb
CHANGED
data/lib/proto/acl_pb.rb
CHANGED
data/lib/proto/aclcommand_pb.rb
CHANGED
data/lib/proto/auth_pb.rb
CHANGED
data/lib/proto/errtype_pb.rb
CHANGED
data/lib/proto/header_pb.rb
CHANGED
data/lib/proto/message_pb.rb
CHANGED
data/lib/proto/msgtype_pb.rb
CHANGED
data/lib/selfsdk.rb
CHANGED
data/lib/services/auth.rb
CHANGED
data/lib/services/facts.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright 2020 Self Group Ltd. All Rights Reserved.
|
2
|
+
|
1
3
|
# frozen_string_literal: true
|
2
4
|
|
3
5
|
# Namespace for classes and modules that handle SelfSDK gem
|
@@ -130,14 +132,66 @@ module SelfSDK
|
|
130
132
|
def prepare_facts(facts)
|
131
133
|
fs = []
|
132
134
|
facts.each do |f|
|
133
|
-
|
135
|
+
fact = if f.is_a?(Hash)
|
134
136
|
f
|
135
137
|
else
|
136
138
|
{ fact: f }
|
137
139
|
end
|
138
|
-
|
140
|
+
validate_fact!(fact)
|
141
|
+
fs << fact
|
142
|
+
end
|
139
143
|
fs
|
140
144
|
end
|
145
|
+
|
146
|
+
def validate_fact!(f)
|
147
|
+
errInvalidFactToSource = 'provided source does not support given fact'
|
148
|
+
errInvalidSource = 'provided fact does not specify a valid source'
|
149
|
+
|
150
|
+
raise 'provided fact does not specify a name' if f[:fact].empty?
|
151
|
+
return unless f.has_key? :sources
|
152
|
+
|
153
|
+
valid_sources = [SOURCE_USER_SPECIFIED, SOURCE_PASSPORT, SOURCE_DRIVING_LICENSE, SOURCE_ID_CARD]
|
154
|
+
factsForPassport = [ FACT_DOCUMENT_NUMBER,
|
155
|
+
FACT_SURNAME,
|
156
|
+
FACT_GIVEN_NAMES,
|
157
|
+
FACT_DATE_OF_BIRTH,
|
158
|
+
FACT_DATE_OF_EXPIRATION,
|
159
|
+
FACT_SEX,
|
160
|
+
FACT_NATIONALITY,
|
161
|
+
FACT_COUNTRY_OF_ISSUANCE ]
|
162
|
+
|
163
|
+
factsForDL = [ FACT_DOCUMENT_NUMBER,
|
164
|
+
FACT_SURNAME,
|
165
|
+
FACT_GIVEN_NAMES,
|
166
|
+
FACT_DATE_OF_BIRTH,
|
167
|
+
FACT_DATE_OF_ISSUANCE,
|
168
|
+
FACT_DATE_OF_EXPIRATION,
|
169
|
+
FACT_ADDRESS,
|
170
|
+
FACT_ISSUING_AUTHORITY,
|
171
|
+
FACT_PLACE_OF_BIRTH,
|
172
|
+
FACT_COUNTRY_OF_ISSUANCE ]
|
173
|
+
|
174
|
+
factsForUser = [ FACT_DOCUMENT_NUMBER,
|
175
|
+
FACT_DISPLAY_NAME,
|
176
|
+
FACT_EMAIL,
|
177
|
+
FACT_PHONE ]
|
178
|
+
|
179
|
+
f[:sources].each do |s|
|
180
|
+
raise errInvalidSource unless valid_sources.include? s
|
181
|
+
|
182
|
+
if s == SOURCE_PASSPORT || s == SOURCE_ID_CARD
|
183
|
+
raise errInvalidFactToSource unless factsForPassport.include? f[:fact]
|
184
|
+
end
|
185
|
+
|
186
|
+
if s == SOURCE_DRIVING_LICENSE
|
187
|
+
raise errInvalidFactToSource unless factsForDL.include? f[:fact]
|
188
|
+
end
|
189
|
+
|
190
|
+
if s == SOURCE_USER_SPECIFIED
|
191
|
+
raise errInvalidFactToSource unless factsForUser.include? f[:fact]
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
141
195
|
end
|
142
196
|
end
|
143
197
|
end
|
data/lib/services/identity.rb
CHANGED
data/lib/services/messaging.rb
CHANGED
data/lib/signature_graph.rb
CHANGED
data/lib/sources.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright 2020 Self Group Ltd. All Rights Reserved.
|
2
|
+
|
1
3
|
# frozen_string_literal: true
|
2
4
|
|
3
5
|
module SelfSDK
|
@@ -15,10 +17,16 @@ module SelfSDK
|
|
15
17
|
FACT_DATE_OF_BIRTH = "date_of_birth"
|
16
18
|
FACT_DATE_OF_ISSUANCE = "date_of_issuance"
|
17
19
|
FACT_DATE_OF_EXPIRATION = "date_of_expiration"
|
20
|
+
FACT_VALID_FROM = "valid_from"
|
21
|
+
FACT_VALID_TO = "valid_to"
|
22
|
+
FACT_CATEGORIES = "categories"
|
23
|
+
FACT_SORT_CODE = "sort_code"
|
24
|
+
FACT_COUNTRY_OF_ISSUANCE = "country_of_issuance"
|
18
25
|
|
19
26
|
SOURCE_USER_SPECIFIED = "user_specified"
|
20
27
|
SOURCE_PASSPORT = "passport"
|
21
28
|
SOURCE_DRIVING_LICENSE = "driving_license"
|
29
|
+
SOURCE_ID_CARD = "identity_card"
|
22
30
|
|
23
31
|
class << self
|
24
32
|
def message_type(s)
|
@@ -61,7 +69,8 @@ module SelfSDK
|
|
61
69
|
def source(input)
|
62
70
|
sources = { user_specified: SOURCE_USER_SPECIFIED,
|
63
71
|
passport: SOURCE_PASSPORT,
|
64
|
-
driving_license: SOURCE_DRIVING_LICENSE
|
72
|
+
driving_license: SOURCE_DRIVING_LICENSE,
|
73
|
+
id_card: SOURCE_ID_CARD }
|
65
74
|
get(sources, input, "source")
|
66
75
|
end
|
67
76
|
|