selfsdk 0.0.181 → 0.0.185
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/crypto.rb +2 -2
- data/lib/messages/document_sign_resp.rb +44 -0
- data/lib/messages/fact_request.rb +2 -0
- data/lib/messages/message.rb +4 -0
- data/lib/messaging.rb +5 -0
- data/lib/selfsdk.rb +7 -1
- data/lib/services/chat.rb +37 -5
- data/lib/services/docs.rb +71 -0
- data/lib/services/facts.rb +3 -2
- data/lib/sources.rb +1 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46b877bce1cf941473947fe1980fcc28dd2998a4bf19781a8eb7563b50e5576d
|
4
|
+
data.tar.gz: bcaa5355a79c64e88e846fed291f83f23034258817611e3bf23810fd9e6f57e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6365053015bbf9aff47e00eb1d40fd9a2609e1353404abab7389ce37747a3792de36c5d30e1dc3e85f3d57a2c2fe1f5de2219bf549b8008e94908974fd8f0dee
|
7
|
+
data.tar.gz: ff241c95f89d25f006d1ed74cf890b7cb9c6db7580fb1e9695b082fca8200f14282b2023b7aa3b0388201c190f905e8f9e5cfa4c4ba251d693f26e1e92df3372
|
data/lib/crypto.rb
CHANGED
@@ -47,9 +47,9 @@ module SelfSDK
|
|
47
47
|
|
48
48
|
begin
|
49
49
|
session_with_bob = get_outbound_session_with_bob(r[:id], r[:device_id], session_file_name)
|
50
|
-
rescue
|
50
|
+
rescue => e
|
51
51
|
::SelfSDK.logger.warn(" there is a problem adding group participant #{r[:id]}:#{r[:device_id]}, skipping...")
|
52
|
-
::SelfSDK.logger.warn(
|
52
|
+
::SelfSDK.logger.warn(e)
|
53
53
|
next
|
54
54
|
end
|
55
55
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Copyright 2020 Self Group Ltd. All Rights Reserved.
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require 'self_msgproto'
|
6
|
+
require_relative 'base'
|
7
|
+
require_relative '../ntptime'
|
8
|
+
|
9
|
+
module SelfSDK
|
10
|
+
module Messages
|
11
|
+
class DocumentSignResponse < Base
|
12
|
+
MSG_TYPE = "document.sign.resp"
|
13
|
+
DEFAULT_EXP_TIMEOUT = 900
|
14
|
+
|
15
|
+
attr_accessor :objects, :signed_objects
|
16
|
+
|
17
|
+
def initialize(messaging)
|
18
|
+
@typ = MSG_TYPE
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
22
|
+
def parse(input, envelope)
|
23
|
+
@input = input
|
24
|
+
@typ = SelfSDK::Messages::DocumentSignResponse::MSG_TYPE
|
25
|
+
@payload = get_payload(input)
|
26
|
+
@id = payload[:cid]
|
27
|
+
@from = payload[:iss]
|
28
|
+
@to = payload[:sub]
|
29
|
+
@expires = ::Time.parse(payload[:exp])
|
30
|
+
@issued = ::Time.parse(payload[:iat])
|
31
|
+
@audience = payload[:aud]
|
32
|
+
@status = payload[:status]
|
33
|
+
@objects = payload[:objects]
|
34
|
+
@signed_objects = payload[:signed_objects]
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
|
39
|
+
def proto(to_device)
|
40
|
+
nil
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -34,6 +34,7 @@ module SelfSDK
|
|
34
34
|
@options = opts.fetch(:options, false)
|
35
35
|
@description = opts.include?(:description) ? opts[:description] : nil
|
36
36
|
@exp_timeout = opts.fetch(:exp_timeout, DEFAULT_EXP_TIMEOUT)
|
37
|
+
@allowed_for = opts.fetch(:allowed_for, nil)
|
37
38
|
|
38
39
|
@intermediary = if opts.include?(:intermediary)
|
39
40
|
opts[:intermediary]
|
@@ -89,6 +90,7 @@ module SelfSDK
|
|
89
90
|
}
|
90
91
|
b[:options] = @options unless (@options.nil? || @options == false)
|
91
92
|
b[:description] = @description unless (@description.nil? || @description.empty?)
|
93
|
+
b[:allowed_until] = (SelfSDK::Time.now + @allowed_for).strftime('%FT%TZ') unless @allowed_for.nil?
|
92
94
|
b
|
93
95
|
end
|
94
96
|
|
data/lib/messages/message.rb
CHANGED
@@ -12,6 +12,7 @@ require_relative "chat_message_delivered"
|
|
12
12
|
require_relative "chat_invite"
|
13
13
|
require_relative "chat_join"
|
14
14
|
require_relative "chat_remove"
|
15
|
+
require_relative "document_sign_resp"
|
15
16
|
|
16
17
|
module SelfSDK
|
17
18
|
module Messages
|
@@ -59,6 +60,9 @@ module SelfSDK
|
|
59
60
|
when SelfSDK::Messages::ChatJoin::MSG_TYPE
|
60
61
|
m = ChatJoin.new(messaging)
|
61
62
|
m.parse(body, envelope)
|
63
|
+
when SelfSDK::Messages::DocumentSignResponse::MSG_TYPE
|
64
|
+
m = DocumentSignResponse.new(messaging)
|
65
|
+
m.parse(body, envelope)
|
62
66
|
else
|
63
67
|
raise StandardError.new("Invalid message type #{payload[:typ]}.")
|
64
68
|
end
|
data/lib/messaging.rb
CHANGED
@@ -92,6 +92,11 @@ module SelfSDK
|
|
92
92
|
send_message m
|
93
93
|
end
|
94
94
|
|
95
|
+
def session?(identifier, device)
|
96
|
+
path = @encryption_client.session_path(identifier, device)
|
97
|
+
File.file?(path)
|
98
|
+
end
|
99
|
+
|
95
100
|
# Send custom mmessage
|
96
101
|
#
|
97
102
|
# @param recipient [string] selfID to be requested
|
data/lib/selfsdk.rb
CHANGED
@@ -21,6 +21,7 @@ require_relative 'services/facts'
|
|
21
21
|
require_relative 'services/identity'
|
22
22
|
require_relative 'services/messaging'
|
23
23
|
require_relative 'services/chat'
|
24
|
+
require_relative 'services/docs'
|
24
25
|
|
25
26
|
# Namespace for classes and modules that handle Self interactions.
|
26
27
|
module SelfSDK
|
@@ -85,7 +86,12 @@ module SelfSDK
|
|
85
86
|
|
86
87
|
# Provides access to SelfSDK::Services::Chat service
|
87
88
|
def chat
|
88
|
-
@chat ||= SelfSDK::Services::Chat.new(messaging,
|
89
|
+
@chat ||= SelfSDK::Services::Chat.new(messaging, identity)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Provides access to SelfSDK::Services::Docs service
|
93
|
+
def docs
|
94
|
+
@docs ||= SelfSDK::Services::Docs.new(messaging, @client.self_url)
|
89
95
|
end
|
90
96
|
|
91
97
|
def app_id
|
data/lib/services/chat.rb
CHANGED
@@ -14,7 +14,9 @@ module SelfSDK
|
|
14
14
|
def initialize(messaging, client)
|
15
15
|
@messaging = messaging
|
16
16
|
@client = client
|
17
|
-
@app_id = @client.jwt.id
|
17
|
+
@app_id = @messaging.client.client.jwt.id
|
18
|
+
@auth_token = @messaging.client.client.jwt.auth_token
|
19
|
+
@self_url = @messaging.client.client.self_url
|
18
20
|
end
|
19
21
|
|
20
22
|
# Sends a message to a list of recipients.
|
@@ -32,7 +34,7 @@ module SelfSDK
|
|
32
34
|
payload[:rid] = opts[:rid] if opts.key? :rid
|
33
35
|
payload[:objects] = opts[:objects] if opts.key? :objects
|
34
36
|
|
35
|
-
m = SelfSDK::Chat::Message.new(self, recipients, payload, @
|
37
|
+
m = SelfSDK::Chat::Message.new(self, recipients, payload, @auth_token, @self_url)
|
36
38
|
_req = send(m.recipients, m.payload)
|
37
39
|
|
38
40
|
m
|
@@ -41,8 +43,7 @@ module SelfSDK
|
|
41
43
|
# Subscribes to an incoming chat message
|
42
44
|
def on_message(opts = {}, &block)
|
43
45
|
@messaging.subscribe :chat_message do |msg|
|
44
|
-
|
45
|
-
cm = SelfSDK::Chat::Message.new(self, msg.payload[:aud], msg.payload, @messaging.client.jwt.auth_token, @client.self_url)
|
46
|
+
cm = SelfSDK::Chat::Message.new(self, msg.payload[:aud], msg.payload, @auth_token, @self_url)
|
46
47
|
|
47
48
|
cm.mark_as_delivered unless opts[:mark_as_delivered] == false
|
48
49
|
cm.mark_as_read if opts[:mark_as_read] == true
|
@@ -127,7 +128,7 @@ module SelfSDK
|
|
127
128
|
members: members }
|
128
129
|
|
129
130
|
if opts.key? :data
|
130
|
-
obj = SelfSDK::Chat::FileObject.new(@
|
131
|
+
obj = SelfSDK::Chat::FileObject.new(@auth_token, @self_url)
|
131
132
|
obj_payload = obj.build_from_data("", opts[:data], opts[:mime]).to_payload
|
132
133
|
obj_payload.delete(:name)
|
133
134
|
payload.merge! obj_payload
|
@@ -142,6 +143,12 @@ module SelfSDK
|
|
142
143
|
# @param gid [string] group id.
|
143
144
|
# @param members [array] list of group members.
|
144
145
|
def join(gid, members)
|
146
|
+
# Allow incoming connections from the given members
|
147
|
+
|
148
|
+
# Create missing sessions with group members.
|
149
|
+
create_missing_sessions(members)
|
150
|
+
|
151
|
+
# Send joining confirmation.
|
145
152
|
send(members, typ: 'chat.join', gid: gid, aud: gid)
|
146
153
|
end
|
147
154
|
|
@@ -173,6 +180,31 @@ module SelfSDK
|
|
173
180
|
end
|
174
181
|
m
|
175
182
|
end
|
183
|
+
|
184
|
+
# Group invites may come with members of the group we haven't set up a session
|
185
|
+
# previously, for those identitiese need to establish a session, but only if
|
186
|
+
# our identity appears before the others in the list members.
|
187
|
+
def create_missing_sessions(members)
|
188
|
+
return if members.empty?
|
189
|
+
|
190
|
+
posterior_members = false
|
191
|
+
requests = []
|
192
|
+
|
193
|
+
members.each do |m|
|
194
|
+
if posterior_members
|
195
|
+
@client.devices(m).each do |d|
|
196
|
+
continue unless @messaging.client.session?(m, d)
|
197
|
+
|
198
|
+
requests << @messaging.send("#{m}:#{d}", {
|
199
|
+
typ: 'sessions.create',
|
200
|
+
aud: m
|
201
|
+
})
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
posterior_members = true if m == @app_id
|
206
|
+
end
|
207
|
+
end
|
176
208
|
end
|
177
209
|
end
|
178
210
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# Copyright 2020 Self Group Ltd. All Rights Reserved.
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
# Namespace for classes and modules that handle SelfSDK gem
|
6
|
+
module SelfSDK
|
7
|
+
# Namespace for classes and modules that handle selfsdk-gem public ui
|
8
|
+
module Services
|
9
|
+
# Input class to handle document requests on self network.
|
10
|
+
class Docs
|
11
|
+
attr_accessor :app_id
|
12
|
+
|
13
|
+
# Creates a new docs service.
|
14
|
+
# Docs service mainly allows you to send document signature requests.
|
15
|
+
#
|
16
|
+
# @param messaging [SelfSDK::Messaging] messaging object.
|
17
|
+
#
|
18
|
+
# @return [SelfSDK::Services::Docs] docs service.
|
19
|
+
def initialize(messaging, url)
|
20
|
+
@messaging = messaging
|
21
|
+
@self_url = url
|
22
|
+
end
|
23
|
+
|
24
|
+
# Sends a signature request to the specified user.
|
25
|
+
#
|
26
|
+
# @param recipient [string] the recipient of the request.
|
27
|
+
# @param body [string] the message to be displayed to the user.
|
28
|
+
# @param objects [Array] array of objects to be signed. provide an empty array if
|
29
|
+
# you just want the body to be signed.
|
30
|
+
# @yield [request] Invokes the given block when a response is received.
|
31
|
+
def request_signature(recipient, body, objects, &block)
|
32
|
+
jti = SecureRandom.uuid
|
33
|
+
req = {
|
34
|
+
jti: jti,
|
35
|
+
typ: "document.sign.req",
|
36
|
+
aud: recipient,
|
37
|
+
msg: body,
|
38
|
+
objects: [],
|
39
|
+
}
|
40
|
+
|
41
|
+
auth_token = @messaging.client.jwt.auth_token
|
42
|
+
objects.each do |o|
|
43
|
+
req[:objects] << SelfSDK::Chat::FileObject.new(auth_token, @self_url).build_from_data(
|
44
|
+
o[:name],
|
45
|
+
o[:data],
|
46
|
+
o[:mime]
|
47
|
+
).to_payload
|
48
|
+
end
|
49
|
+
|
50
|
+
if block_given?
|
51
|
+
@messaging.client.set_observer(OpenStruct.new({
|
52
|
+
id: jti,
|
53
|
+
to: recipient,
|
54
|
+
from: @messaging.client.jwt.id
|
55
|
+
}), timeout: 60 * 60 * 10, &block)
|
56
|
+
|
57
|
+
return @messaging.send(recipient, req)
|
58
|
+
end
|
59
|
+
|
60
|
+
@messaging.send(recipient, req)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Subscribes to all document sign responses.
|
64
|
+
#
|
65
|
+
# @yield [request] Invokes the given block when a response is received.
|
66
|
+
def subscribe(&block)
|
67
|
+
@messaging.subscribe(:document_sign_response, &block)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/services/facts.rb
CHANGED
@@ -8,7 +8,7 @@ module SelfSDK
|
|
8
8
|
module Services
|
9
9
|
# Self provides this self-hosted verified intermediary.
|
10
10
|
DEFAULT_INTERMEDIARY = "self_intermediary"
|
11
|
-
# Input class to handle
|
11
|
+
# Input class to handle fact requests on self network.
|
12
12
|
class Facts
|
13
13
|
# Creates a new facts service.
|
14
14
|
# Facts service mainly manages fact requests against self users wanting
|
@@ -32,7 +32,7 @@ module SelfSDK
|
|
32
32
|
# @param selfid [string] the receiver of the authentication request.
|
33
33
|
# @param [Hash] opts the options to authenticate.
|
34
34
|
# @option opts [String] :cid The unique identifier of the authentication request.
|
35
|
-
#
|
35
|
+
# @yield [request] Invokes the given block when a response is received.
|
36
36
|
# @return [Object] SelfSDK:::Messages::FactRequest
|
37
37
|
#
|
38
38
|
# @overload request(selfid, facts, opts = {})
|
@@ -40,6 +40,7 @@ module SelfSDK
|
|
40
40
|
# @param [Hash] opts the options to authenticate.
|
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
|
+
# @option opts [Integer] :allowed_for number of seconds for enabling recurrent requests.
|
43
44
|
# @return [Object] SelfSDK:::Messages::FactRequest
|
44
45
|
def request(selfid, facts, opts = {}, &block)
|
45
46
|
SelfSDK.logger.info "authenticating #{selfid}"
|
data/lib/sources.rb
CHANGED
@@ -40,6 +40,7 @@ module SelfSDK
|
|
40
40
|
chat_invite: SelfSDK::Messages::ChatInvite::MSG_TYPE,
|
41
41
|
chat_join: SelfSDK::Messages::ChatJoin::MSG_TYPE,
|
42
42
|
chat_remove: SelfSDK::Messages::ChatRemove::MSG_TYPE,
|
43
|
+
document_sign_response: SelfSDK::Messages::DocumentSignResponse::MSG_TYPE,
|
43
44
|
}
|
44
45
|
raise "invalid message type '#{s}'" unless types.key? s
|
45
46
|
return types[s]
|
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.185
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aldgate Ventures
|
@@ -345,6 +345,7 @@ files:
|
|
345
345
|
- lib/messages/chat_message_delivered.rb
|
346
346
|
- lib/messages/chat_message_read.rb
|
347
347
|
- lib/messages/chat_remove.rb
|
348
|
+
- lib/messages/document_sign_resp.rb
|
348
349
|
- lib/messages/fact.rb
|
349
350
|
- lib/messages/fact_request.rb
|
350
351
|
- lib/messages/fact_response.rb
|
@@ -354,6 +355,7 @@ files:
|
|
354
355
|
- lib/selfsdk.rb
|
355
356
|
- lib/services/auth.rb
|
356
357
|
- lib/services/chat.rb
|
358
|
+
- lib/services/docs.rb
|
357
359
|
- lib/services/facts.rb
|
358
360
|
- lib/services/identity.rb
|
359
361
|
- lib/services/messaging.rb
|