selfsdk 0.0.165 → 0.0.170

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: c98f4bd8df938f9c11acb72ffef83f231ddd0c1466c2b507975c5c3f1e4a8b58
4
- data.tar.gz: 15109c43f84455b30215b905fdfa556a286a97e04da9c18e0ea7ae24bc69eecc
3
+ metadata.gz: 2ef1e4f98e83e8c056812dc7fe331a6e409f9e930f3764c2e1a5920f55f646fe
4
+ data.tar.gz: 1eb25590ddbad6f74edf8dac58f1374582905fc3bafe48fa732d3c2ef60dbb34
5
5
  SHA512:
6
- metadata.gz: 747b1019940113d76d2b2bf6e5b0fe39a7178f12dedabaa5b555b71aefdfe8e60d0dbe2658b467151a4df8985c48d695dcc622f2a4583ac28491190159c0a183
7
- data.tar.gz: c8755a17be9aeed3d189b9116ad189c4e2bb24de1f9af594c1fe1196abad63ba24a1295958e2183e0845fcaf7a29592b62608440415198fa334efa36f8752534
6
+ metadata.gz: 304a87b8b1b9a01571befe77ff2acadcea0a5254cd7972c9072ea96fe60e21356160e82f98255f17c3df00ebe62c28dc032e7ee711c0d8fe488dc28d9010f48f
7
+ data.tar.gz: c8c8bca065193c65aa091aacfc727966c5921f502bb80f0d34f0d4716b1a733cb5caaccf6dee5d3d00b496df24bc7d3bb6ee3dd30c7f290cf07160664024c6aa
data/lib/crypto.rb CHANGED
@@ -24,7 +24,8 @@ module SelfSDK
24
24
  keys = @account.otk['curve25519'].map{|k,v| {id: k, key: v}}.to_json
25
25
 
26
26
  # 1b-iv) post those keys to POST /v1/identities/<selfid>/devices/1/pre_keys/
27
- @client.post("/v1/apps/#{@client.jwt.id}/devices/#{@device}/pre_keys", keys)
27
+ res = @client.post("/v1/apps/#{@client.jwt.id}/devices/#{@device}/pre_keys", keys)
28
+ raise 'unable to push prekeys, please try in a few minutes' if res.code != 200
28
29
 
29
30
  # 1b-v) store the account to a file
30
31
  File.write(account_path, @account.to_pickle(storage_key))
@@ -89,6 +90,27 @@ module SelfSDK
89
90
 
90
91
  # 7b-ii) use the initial message to create a session for bob or carol
91
92
  session_with_bob = @account.inbound_session(m)
93
+
94
+ # 7b-iii) remove the session's prekey from the account
95
+ @account.remove_one_time_keys(session_with_bob)
96
+
97
+ current_one_time_keys = @account.otk['curve25519']
98
+
99
+ # 7b-iv) if the number of remaining prekeys is below a certain threshold, publish new keys
100
+ if current_one_time_keys.length < 10
101
+ @account.gen_otk(100)
102
+
103
+ keys = Array.new
104
+
105
+ @account.otk['curve25519'].each do |k,v|
106
+ keys.push({id: k, key: v}) if current_one_time_keys[k].nil?
107
+ end
108
+
109
+ res = @client.post("/v1/apps/#{@client.jwt.id}/devices/#{@device}/pre_keys", keys.to_json)
110
+ raise 'unable to push prekeys, please try in a few minutes' if res.code != 200
111
+ end
112
+
113
+ File.write(account_path, @account.to_pickle(@storage_key))
92
114
  end
93
115
 
94
116
  # 8) create a group session and set the identity of the account you're using
data/lib/messaging.rb CHANGED
@@ -43,6 +43,7 @@ module SelfSDK
43
43
  @client = client
44
44
  @ack_timeout = 60 # seconds
45
45
  @timeout = 120 # seconds
46
+ @auth_id = SecureRandom.uuid
46
47
  @device_id = options.fetch(:device_id, DEFAULT_DEVICE)
47
48
  @auto_reconnect = options.fetch(:auto_reconnect, DEFAULT_AUTO_RECONNECT)
48
49
  @raw_storage_dir = options.fetch(:storage_dir, DEFAULT_STORAGE_DIR)
@@ -264,8 +265,10 @@ module SelfSDK
264
265
  # Start sthe websocket listener
265
266
  def start
266
267
  SelfSDK.logger.info "starting"
268
+ auth_id = @auth_id.dup
269
+
267
270
  @mon.synchronize do
268
- @acks["authentication"] = { waiting_cond: @mon.new_cond,
271
+ @acks[auth_id] = { waiting_cond: @mon.new_cond,
269
272
  waiting: true,
270
273
  timeout: SelfSDK::Time.now + @ack_timeout }
271
274
  end
@@ -283,8 +286,16 @@ module SelfSDK
283
286
  end
284
287
 
285
288
  @mon.synchronize do
286
- @acks["authentication"][:waiting_cond].wait_while { @acks["authentication"][:waiting] }
287
- @acks.delete("authentication")
289
+ @acks[auth_id][:waiting_cond].wait_while { @acks[auth_id][:waiting] }
290
+ @acks.delete(auth_id)
291
+ end
292
+ # In case this does not succeed start the process again.
293
+ if @acks.include? auth_id
294
+ if @acks[auth_id][:waiting]
295
+ close
296
+ start_connection
297
+ end
298
+ @acks.delete(auth_id)
288
299
  end
289
300
  end
290
301
 
@@ -404,22 +415,18 @@ module SelfSDK
404
415
 
405
416
  # Authenticates current client on the websocket server.
406
417
  def authenticate
407
- res = wait_for 'authentication' do
408
- SelfSDK.logger.info "authenticating"
409
- send_raw Msgproto::Auth.new(
410
- type: Msgproto::MsgType::AUTH,
411
- id: "authentication",
412
- token: @jwt.auth_token,
413
- device: @device_id,
414
- offset: @offset,
415
- )
416
- end
417
-
418
- return res unless res.nil?
419
-
420
- SelfSDK.logger.info "authentication timed out, retrying ..."
421
- close
422
- start_connection
418
+ @auth_id = SecureRandom.uuid if @auth_id.nil?
419
+
420
+ SelfSDK.logger.info "authenticating"
421
+ send_raw Msgproto::Auth.new(
422
+ type: Msgproto::MsgType::AUTH,
423
+ id: @auth_id,
424
+ token: @jwt.auth_token,
425
+ device: @device_id,
426
+ offset: @offset,
427
+ )
428
+
429
+ @auth_id = nil
423
430
  end
424
431
 
425
432
  def send_raw(msg)
@@ -261,7 +261,7 @@ module SelfSDK
261
261
 
262
262
  sk = @keys[operation.signing_key]
263
263
 
264
- raise "operation specifies a signing key that does not exist" if k.nil?
264
+ raise "operation specifies a signing key that does not exist" if sk.nil?
265
265
 
266
266
  # if this is an account recovery, nuke all existing keys
267
267
  if sk.type == KEY_TYPE_RECOVERY
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.165
4
+ version: 0.0.170
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aldgate Ventures