selfsdk 0.0.140 → 0.0.145

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 031a8f44592664c22d59c7c1105822ab9111dde46ffda50ba34b6116d70d4a3f
4
- data.tar.gz: e2096831cb8f8d5bcba45fabf93a5173fac96f06ec933b6f6d446d1ed55f015a
3
+ metadata.gz: 0c59c2a25ba8f895e9a1820e6cf8072c219680ccfc763582f9b8761903ae0f3f
4
+ data.tar.gz: 9ca32b859e6f0feeddf5c5e87b38309e691f7459e60d3a9b281f1396dc4bc998
5
5
  SHA512:
6
- metadata.gz: 368a7cdacf1df7204473e6488e299e06e40b6caacc332c366ca039fea96930186e4888e007a333e99a6693d9b6ae18d13b4ae339f7d2cd988a1c412826bfce47
7
- data.tar.gz: bc484da9425cc8e9f3b4d7e7af132f15395b1966109636e941ff3b5592ace7d914b65f338de4287de96e8d1d92dac03d5555667f1e146311a4965975b3154888
6
+ metadata.gz: 65b73466d77d25bfa80dfa9c191f19bb6d525c739754753e653652ebbb59eecb3b3c8936d3205c8b41dd7a71376bef6aa18367fb8f275fe60ef18888633e0a8d
7
+ data.tar.gz: c39e65926ddb0923673b5e1109ae54dcc01adfa2408a560182acd8cc3160adb8f7085e9a0f22545078108f2efc1f9d432363255086400833ad5bdd5947091867
@@ -8,9 +8,9 @@ module SelfSDK
8
8
  @storage_key = storage_key
9
9
  @storage_folder = storage_folder
10
10
 
11
- if File.exist?('account.pickle')
11
+ if File.exist?(account_path)
12
12
  # 1a) if alice's account file exists load the pickle from the file
13
- @account = SelfCrypto::Account.from_pickle(File.read('account.pickle'), @storage_key)
13
+ @account = SelfCrypto::Account.from_pickle(File.read(account_path), @storage_key)
14
14
  else
15
15
  # 1b-i) if create a new account for alice if one doesn't exist already
16
16
  @account = SelfCrypto::Account.from_seed(@client.jwt.key)
@@ -25,12 +25,12 @@ module SelfSDK
25
25
  @client.post("/v1/apps/#{@client.jwt.id}/devices/#{@device}/pre_keys", keys)
26
26
 
27
27
  # 1b-v) store the account to a file
28
- File.write('account.pickle', @account.to_pickle(storage_key))
28
+ File.write(account_path, @account.to_pickle(storage_key))
29
29
  end
30
30
  end
31
31
 
32
32
  def encrypt(message, recipient, recipient_device)
33
- session_file_name = "#{recipient}:#{recipient_device}-session.pickle"
33
+ session_file_name = session_path(recipient, recipient_device)
34
34
 
35
35
  if File.exist?(session_file_name)
36
36
  # 2a) if bob's session file exists load the pickle from the file
@@ -55,9 +55,6 @@ module SelfSDK
55
55
 
56
56
  # 2b-iv) create the session with bob
57
57
  session_with_bob = @account.outbound_session(curve25519_identity_key, one_time_key)
58
-
59
- # 2b-v) store the session to a file
60
- File.write(session_file_name, session_with_bob.to_pickle(@storage_key))
61
58
  end
62
59
 
63
60
  # 3) create a group session and set the identity of the account youre using
@@ -67,11 +64,16 @@ module SelfSDK
67
64
  gs.add_participant("#{recipient}:#{recipient_device}", session_with_bob)
68
65
 
69
66
  # 5) encrypt a message
70
- gs.encrypt(message).to_s
67
+ ct = gs.encrypt(message).to_s
68
+
69
+ # 6) store the session to a file
70
+ File.write(session_file_name, session_with_bob.to_pickle(@storage_key))
71
+
72
+ ct
71
73
  end
72
74
 
73
75
  def decrypt(message, sender, sender_device)
74
- session_file_name = "#{sender}:#{sender_device}-session.pickle"
76
+ session_file_name = session_path(sender, sender_device)
75
77
 
76
78
  if File.exist?(session_file_name)
77
79
  # 7a) if carol's session file exists load the pickle from the file
@@ -84,9 +86,6 @@ module SelfSDK
84
86
 
85
87
  # 7b-ii) use the initial message to create a session for bob or carol
86
88
  session_with_bob = @account.inbound_session(m)
87
-
88
- # 7b-iii) store the session to a file
89
- File.write(session_file_name, session_with_bob.to_pickle(@storage_key))
90
89
  end
91
90
 
92
91
  # 8) create a group session and set the identity of the account you're using
@@ -96,7 +95,22 @@ module SelfSDK
96
95
  gs.add_participant("#{sender}:#{sender_device}", session_with_bob)
97
96
 
98
97
  # 10) decrypt the message ciphertext
99
- gs.decrypt("#{sender}:#{sender_device}", message).to_s
98
+ pt = gs.decrypt("#{sender}:#{sender_device}", message).to_s
99
+
100
+ # 11) store the session to a file
101
+ File.write(session_file_name, session_with_bob.to_pickle(@storage_key))
102
+
103
+ pt
104
+ end
105
+
106
+ private
107
+
108
+ def account_path
109
+ "#{@storage_folder}/account.pickle"
110
+ end
111
+
112
+ def session_path(selfid, device)
113
+ "#{@storage_folder}/#{selfid}:#{device}-session.pickle"
100
114
  end
101
115
  end
102
116
  end
@@ -38,13 +38,12 @@ module SelfSDK
38
38
 
39
39
  protected
40
40
 
41
- def proto
42
- @to_device = @client.devices(@to).first
41
+ def proto(to_device)
43
42
  Msgproto::Message.new(type: Msgproto::MsgType::MSG,
44
43
  sender: "#{@jwt.id}:#{@messaging.device_id}",
45
44
  id: @id,
46
- recipient: "#{@to}:#{@to_device}",
47
- ciphertext: encrypt_message(@jwt.prepare(body), @to, @to_device))
45
+ recipient: "#{@to}:#{to_device}",
46
+ ciphertext: encrypt_message(@jwt.prepare(body), @to, to_device))
48
47
  end
49
48
 
50
49
  end
@@ -15,15 +15,24 @@ module SelfSDK
15
15
  end
16
16
 
17
17
  def request
18
- res = @messaging.send_and_wait_for_response(proto, self)
19
- SelfSDK.logger.info "synchronously messaging to #{@to}:#{@to_device}"
18
+ check_credits!
19
+ msgs = []
20
+ devices.each do |d|
21
+ msgs << proto(d)
22
+ end
23
+ res = @messaging.send_and_wait_for_response(msgs, self)
24
+ SelfSDK.logger.info "synchronously messaging to #{@to}:#{@d}"
20
25
  res
21
26
  end
22
27
 
23
28
  def send_message
24
- res = @messaging.send_message proto
25
- SelfSDK.logger.info "asynchronously requested information to #{@to}:#{@to_device}"
26
- res
29
+ check_credits!
30
+ res = []
31
+ devices.each do |d|
32
+ res << @messaging.send_message(proto(d))
33
+ SelfSDK.logger.info "asynchronously requested information to #{@to}:#{@d}"
34
+ end
35
+ res.first
27
36
  end
28
37
 
29
38
  def encrypt_message(message, recipient, recipient_device)
@@ -65,6 +74,17 @@ module SelfSDK
65
74
  raise ::StandardError.new("must define this method")
66
75
  end
67
76
 
77
+ def devices
78
+ return @client.devices(@to) if @intermediary.nil?
79
+
80
+ @client.devices(@intermediary)
81
+ end
82
+
83
+ def check_credits!
84
+ app = @client.app(@jwt.id)
85
+ raise "Your credits have expired, please log in to the developer portal and top up your account." if app[:paid_actions] == false
86
+ end
87
+
68
88
  private
69
89
 
70
90
  def get_payload(input)
@@ -85,14 +85,8 @@ module SelfSDK
85
85
 
86
86
  protected
87
87
 
88
- def proto
89
- devices = if @intermediary.nil?
90
- @client.devices(@to)
91
- else
92
- @client.devices(@intermediary)
93
- end
94
- @to_device = devices.first
95
-
88
+ def proto(to_device)
89
+ @to_device = to_device
96
90
  if @intermediary.nil?
97
91
  recipient = "#{@to}:#{@to_device}"
98
92
  ciphertext = encrypt_message(@jwt.prepare(body), @to, @to_device)
@@ -11,7 +11,7 @@ module SelfSDK
11
11
  body = if input.is_a? String
12
12
  input
13
13
  else
14
- issuer = input.recipient.split(":")
14
+ issuer = input.sender.split(":")
15
15
  messaging.encryption_client.decrypt(input.ciphertext, issuer.first, issuer.last)
16
16
  end
17
17
 
@@ -30,7 +30,7 @@ module SelfSDK
30
30
  # @params storage_folder [String] folder to perist messaging encryption
31
31
  # @option opts [Bool] :auto_reconnect Automatically reconnects to websocket if connection is lost (defaults to true).
32
32
  # @option opts [String] :device_id The device id to be used by the app defaults to "1".
33
- def initialize(url, client, storage_key, storage_folder, options = {})
33
+ def initialize(url, client, storage_key, options = {})
34
34
  @mon = Monitor.new
35
35
  @url = url
36
36
  @messages = {}
@@ -49,7 +49,7 @@ module SelfSDK
49
49
 
50
50
  FileUtils.mkdir_p @storage_dir unless File.exist? @storage_dir
51
51
  unless options.include? :no_crypto
52
- @encryption_client = Crypto.new(@client, @device_id, storage_folder, storage_key)
52
+ @encryption_client = Crypto.new(@client, @device_id, @storage_dir, storage_key)
53
53
  end
54
54
 
55
55
  if options.include? :ws
@@ -94,6 +94,7 @@ module SelfSDK
94
94
  # @param type [string] message type
95
95
  # @param request [hash] original message requesing information
96
96
  def send_custom(recipient, request_body)
97
+ # TODO (adriacidre) this is sending the message to the first device only
97
98
  @to_device = @client.devices(recipient).first
98
99
  send_message msg = Msgproto::Message.new(
99
100
  type: Msgproto::MsgType::MSG,
@@ -142,9 +143,11 @@ module SelfSDK
142
143
  # Sends a message and waits for the response
143
144
  #
144
145
  # @params msg [Msgproto::Message] message object to be sent
145
- def send_and_wait_for_response(msg, original)
146
- wait_for msg.id, original do
147
- send_message msg
146
+ def send_and_wait_for_response(msgs, original)
147
+ wait_for msg.first.id, original do
148
+ msgs.each do |msg|
149
+ send_message msg
150
+ end
148
151
  end
149
152
  end
150
153
 
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.140
4
+ version: 0.0.145
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aldgate Ventures