selfsdk 0.0.185 → 0.0.188
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/chat/file_object.rb +1 -1
- data/lib/crypto.rb +10 -5
- data/lib/messages/attestation.rb +1 -1
- data/lib/messages/fact_request.rb +2 -0
- data/lib/messages/fact_response.rb +5 -3
- data/lib/services/auth.rb +3 -3
- data/lib/services/facts.rb +28 -5
- data/lib/sources.rb +12 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 585d5ba75fa375a31bcb5b48716d3b6c90ac040c75e5eec77dde03e7a3d4149d
|
4
|
+
data.tar.gz: 553e3b48e37449298f2ba166e9d56d5c9804f9dcbbc9848aa1e62aa4947c0a69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da714cbed5d4df337a13ab3ee6fc15d364ca097bee186d0885d9d543fef195df911309d01f371a2aaf99ca2b97faf0913e754668e750eacdc7a3df7b3fe9ad64
|
7
|
+
data.tar.gz: e6228891c0026d831dc306237f3a977585d4279086d040d13e7491ad7f6e601c9459efb9cdc5a84b6e60fe001cbbf8e56593584e8bb6ac1752eba0ba4ac64c55
|
data/lib/chat/file_object.rb
CHANGED
@@ -75,7 +75,7 @@ module SelfSDK
|
|
75
75
|
def upload(ciphertext)
|
76
76
|
uri = URI.parse("#{@url}/v1/objects")
|
77
77
|
https = Net::HTTP.new(uri.host, uri.port)
|
78
|
-
https.use_ssl = true
|
78
|
+
https.use_ssl = true if uri.scheme == "https"
|
79
79
|
req = Net::HTTP::Post.new(uri.path)
|
80
80
|
req["Authorization"] = "Bearer #{@token}"
|
81
81
|
req.body = ciphertext.force_encoding("UTF-8")
|
data/lib/crypto.rb
CHANGED
@@ -141,12 +141,17 @@ module SelfSDK
|
|
141
141
|
if File.exist?(session_file_name)
|
142
142
|
# 7a) if carol's session file exists load the pickle from the file
|
143
143
|
session_with_bob = SelfCrypto::Session.from_pickle(File.read(session_file_name), @storage_key)
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
144
|
+
end
|
145
|
+
|
146
|
+
# 7b-i) if you have not previously sent or received a message to/from bob,
|
147
|
+
# you should extract the initial message from the group message intended
|
148
|
+
# for your account id.
|
149
|
+
m = SelfCrypto::GroupMessage.new(message.to_s).get_message("#{@client.jwt.id}:#{@device}")
|
149
150
|
|
151
|
+
# if there is no session, create one
|
152
|
+
# if there is an existing session and we are sent a one time key message, check
|
153
|
+
# if it belongs to this current session and create a new inbound session if it doesn't
|
154
|
+
if session_with_bob.nil? || m.instance_of?(SelfCrypto::PreKeyMessage) and !session_with_bob.will_receive?(m)
|
150
155
|
# 7b-ii) use the initial message to create a session for bob or carol
|
151
156
|
session_with_bob = @account.inbound_session(m)
|
152
157
|
|
data/lib/messages/attestation.rb
CHANGED
@@ -35,6 +35,7 @@ module SelfSDK
|
|
35
35
|
@description = opts.include?(:description) ? opts[:description] : nil
|
36
36
|
@exp_timeout = opts.fetch(:exp_timeout, DEFAULT_EXP_TIMEOUT)
|
37
37
|
@allowed_for = opts.fetch(:allowed_for, nil)
|
38
|
+
@auth = opts.fetch(:auth, false)
|
38
39
|
|
39
40
|
@intermediary = if opts.include?(:intermediary)
|
40
41
|
opts[:intermediary]
|
@@ -91,6 +92,7 @@ module SelfSDK
|
|
91
92
|
b[:options] = @options unless (@options.nil? || @options == false)
|
92
93
|
b[:description] = @description unless (@description.nil? || @description.empty?)
|
93
94
|
b[:allowed_until] = (SelfSDK::Time.now + @allowed_for).strftime('%FT%TZ') unless @allowed_for.nil?
|
95
|
+
b[:auth] = @auth unless @auth.nil?
|
94
96
|
b
|
95
97
|
end
|
96
98
|
|
@@ -11,7 +11,7 @@ module SelfSDK
|
|
11
11
|
class FactResponse < Base
|
12
12
|
MSG_TYPE = "identities.facts.query.resp"
|
13
13
|
|
14
|
-
attr_accessor :facts, :audience
|
14
|
+
attr_accessor :facts, :audience, :auth
|
15
15
|
|
16
16
|
def parse(input, envelope=nil)
|
17
17
|
@input = input
|
@@ -24,6 +24,7 @@ module SelfSDK
|
|
24
24
|
@issued = ::Time.parse(payload[:iat])
|
25
25
|
@audience = payload[:aud]
|
26
26
|
@status = payload[:status]
|
27
|
+
@auth = payload[:auth]
|
27
28
|
@facts = []
|
28
29
|
payload[:facts] = [] if payload[:facts].nil?
|
29
30
|
payload[:facts].each do |f|
|
@@ -69,7 +70,7 @@ module SelfSDK
|
|
69
70
|
@facts.each do |fact|
|
70
71
|
encoded_facts.push(fact.to_hash)
|
71
72
|
end
|
72
|
-
|
73
|
+
|
73
74
|
{ typ: MSG_TYPE,
|
74
75
|
iss: @jwt.id,
|
75
76
|
sub: @sub || @to,
|
@@ -79,7 +80,8 @@ module SelfSDK
|
|
79
80
|
cid: @id,
|
80
81
|
jti: SecureRandom.uuid,
|
81
82
|
status: @status,
|
82
|
-
facts: encoded_facts
|
83
|
+
facts: encoded_facts,
|
84
|
+
auth: @auth }
|
83
85
|
end
|
84
86
|
|
85
87
|
protected
|
data/lib/services/auth.rb
CHANGED
@@ -89,11 +89,11 @@ module SelfSDK
|
|
89
89
|
body = @client.jwt.encode(request(selfid, opts))
|
90
90
|
|
91
91
|
if @client.env.empty?
|
92
|
-
return "https://joinself.
|
92
|
+
return "https://links.joinself.com/?link=#{callback}%3Fqr=#{body}&apn=com.joinself.app"
|
93
93
|
elsif @client.env == 'development'
|
94
|
-
return "https://joinself.
|
94
|
+
return "https://links.joinself.com/?link=#{callback}%3Fqr=#{body}&apn=com.joinself.app.dev"
|
95
95
|
end
|
96
|
-
"https
|
96
|
+
"https://#{@client.env}.links.joinself.com/?link=#{callback}%3Fqr=#{body}&apn=com.joinself.app.#{@client.env}"
|
97
97
|
end
|
98
98
|
|
99
99
|
# Adds an observer for an authentication response
|
data/lib/services/facts.rb
CHANGED
@@ -41,6 +41,7 @@ module SelfSDK
|
|
41
41
|
# @option opts [String] :cid The unique identifier of the authentication request.
|
42
42
|
# @option opts [Integer] :exp_timeout timeout in seconds to expire the request.
|
43
43
|
# @option opts [Integer] :allowed_for number of seconds for enabling recurrent requests.
|
44
|
+
# @option opts [Boolean] :auth allows displaying the request as anuthentication request with facts.
|
44
45
|
# @return [Object] SelfSDK:::Messages::FactRequest
|
45
46
|
def request(selfid, facts, opts = {}, &block)
|
46
47
|
SelfSDK.logger.info "authenticating #{selfid}"
|
@@ -116,11 +117,11 @@ module SelfSDK
|
|
116
117
|
body = @client.jwt.encode(request(selfid, facts, opts))
|
117
118
|
|
118
119
|
if @client.env.empty?
|
119
|
-
return "https://joinself.
|
120
|
+
return "https://links.joinself.com/?link=#{callback}%3Fqr=#{body}&apn=com.joinself.app"
|
120
121
|
elsif @client.env == 'development'
|
121
|
-
return "https://joinself.
|
122
|
+
return "https://links.joinself.com/?link=#{callback}%3Fqr=#{body}&apn=com.joinself.app.dev"
|
122
123
|
end
|
123
|
-
"https
|
124
|
+
"https://#{@client.env}.links.joinself.com/?link=#{callback}%3Fqr=#{body}&apn=com.joinself.app.#{@client.env}"
|
124
125
|
end
|
125
126
|
|
126
127
|
private
|
@@ -151,7 +152,13 @@ module SelfSDK
|
|
151
152
|
raise 'provided fact does not specify a name' if f[:fact].empty?
|
152
153
|
return unless f.has_key? :sources
|
153
154
|
|
154
|
-
valid_sources = [SOURCE_USER_SPECIFIED,
|
155
|
+
valid_sources = [ SOURCE_USER_SPECIFIED,
|
156
|
+
SOURCE_PASSPORT,
|
157
|
+
SOURCE_DRIVING_LICENSE,
|
158
|
+
SOURCE_IDENTITY_CARD,
|
159
|
+
SOURCE_TWITTER,
|
160
|
+
SOURCE_LINKEDIN,
|
161
|
+
SOURCE_FACEBOK ]
|
155
162
|
factsForPassport = [ FACT_DOCUMENT_NUMBER,
|
156
163
|
FACT_SURNAME,
|
157
164
|
FACT_GIVEN_NAMES,
|
@@ -176,7 +183,11 @@ module SelfSDK
|
|
176
183
|
FACT_DISPLAY_NAME,
|
177
184
|
FACT_EMAIL,
|
178
185
|
FACT_PHONE ]
|
179
|
-
|
186
|
+
|
187
|
+
factsForTwitter = [ FACT_ACCOUNT_ID, FACT_NICKNAME ]
|
188
|
+
factsForLinkedin = [ FACT_ACCOUNT_ID, FACT_NICKNAME ]
|
189
|
+
factsForFacebook = [ FACT_ACCOUNT_ID, FACT_NICKNAME ]
|
190
|
+
|
180
191
|
f[:sources].each do |s|
|
181
192
|
raise errInvalidSource unless valid_sources.include? s.to_s
|
182
193
|
|
@@ -191,6 +202,18 @@ module SelfSDK
|
|
191
202
|
if s.to_s == SOURCE_USER_SPECIFIED
|
192
203
|
raise errInvalidFactToSource unless factsForUser.include? f[:fact].to_s
|
193
204
|
end
|
205
|
+
|
206
|
+
if s.to_s == SOURCE_TWITTER
|
207
|
+
raise errInvalidFactToSource unless factsForTwitter.include? f[:fact].to_s
|
208
|
+
end
|
209
|
+
|
210
|
+
if s.to_s == SOURCE_LINKEDIN
|
211
|
+
raise errInvalidFactToSource unless factsForLinkedin.include? f[:fact].to_s
|
212
|
+
end
|
213
|
+
|
214
|
+
if s.to_s == SOURCE_FACEBOOK
|
215
|
+
raise errInvalidFactToSource unless factsForFacebok.include? f[:fact].to_s
|
216
|
+
end
|
194
217
|
end
|
195
218
|
end
|
196
219
|
end
|
data/lib/sources.rb
CHANGED
@@ -22,11 +22,16 @@ module SelfSDK
|
|
22
22
|
FACT_CATEGORIES = "categories"
|
23
23
|
FACT_SORT_CODE = "sort_code"
|
24
24
|
FACT_COUNTRY_OF_ISSUANCE = "country_of_issuance"
|
25
|
+
FACT_ACCOUNT_ID = "account_id"
|
26
|
+
FACT_NICKNAME = "nickname"
|
25
27
|
|
26
28
|
SOURCE_USER_SPECIFIED = "user_specified"
|
27
29
|
SOURCE_PASSPORT = "passport"
|
28
30
|
SOURCE_DRIVING_LICENSE = "driving_license"
|
29
31
|
SOURCE_IDENTITY_CARD = "identity_card"
|
32
|
+
SOURCE_TWITTER = "twitter"
|
33
|
+
SOURCE_LINKEDIN = "linkedin"
|
34
|
+
SOURCE_FACEBOOK = "facebook"
|
30
35
|
|
31
36
|
class << self
|
32
37
|
def message_type(s)
|
@@ -75,7 +80,9 @@ module SelfSDK
|
|
75
80
|
valid_to: FACT_VALID_TO,
|
76
81
|
categories: FACT_CATEGORIES,
|
77
82
|
sort_code: FACT_SORT_CODE,
|
78
|
-
country_of_issuance: FACT_COUNTRY_OF_ISSUANCE
|
83
|
+
country_of_issuance: FACT_COUNTRY_OF_ISSUANCE,
|
84
|
+
account_id: FACT_ACCOUNT_ID,
|
85
|
+
nickname: FACT_NICKNAME }
|
79
86
|
get(facts, input, "fact")
|
80
87
|
end
|
81
88
|
|
@@ -83,7 +90,10 @@ module SelfSDK
|
|
83
90
|
sources = { user_specified: SOURCE_USER_SPECIFIED,
|
84
91
|
passport: SOURCE_PASSPORT,
|
85
92
|
driving_license: SOURCE_DRIVING_LICENSE,
|
86
|
-
identity_card: SOURCE_IDENTITY_CARD
|
93
|
+
identity_card: SOURCE_IDENTITY_CARD,
|
94
|
+
twitter: SOURCE_TWITTER,
|
95
|
+
linkedin: SOURCE_LINKEDIN,
|
96
|
+
facebook: SOURCE_FACEBOOK }
|
87
97
|
get(sources, input, "source")
|
88
98
|
end
|
89
99
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: selfsdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.188
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aldgate Ventures
|
@@ -98,16 +98,16 @@ dependencies:
|
|
98
98
|
name: google-protobuf
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - "
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '3.19'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - "
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '3.19'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: httparty
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|