|
@@ -8,7 +8,7 @@ pub use contract::{
|
8
|
8
|
view_moderator_account,
|
9
|
9
|
};
|
10
|
10
|
|
11
|
|
-use common_api::api::{Data, ExchangeMessage};
|
|
11
|
+use common_api::api::{ApiResponse, Data, ExchangeMessage};
|
12
|
12
|
use crypto::{decrypt, encrypt, secret};
|
13
|
13
|
use error::ApiError;
|
14
|
14
|
use exchange_client::{exchange, public_keys, receive};
|
|
@@ -202,11 +202,17 @@ impl KeyProvisioner {
|
202
|
202
|
while !participants.is_empty() {
|
203
|
203
|
let infos =
|
204
|
204
|
match public_keys(&handler, &signer, meet_id, participants.clone()).await {
|
205
|
|
- Ok(infos) => infos,
|
206
|
|
- Err(err) => {
|
207
|
|
- warn!("Failed to fetch a public keys, cause {err:?}");
|
|
205
|
+ Ok(ApiResponse::Success(infos)) => infos,
|
|
206
|
+ Ok(ApiResponse::Timeout) => {
|
|
207
|
+ warn!("Timeout happens on a server-side, subscribed one more time");
|
208
|
208
|
continue;
|
209
|
209
|
}
|
|
210
|
+ Err(err) => {
|
|
211
|
+ return Err(ApiError::KeyExchange(format!(
|
|
212
|
+ "The send keys operation has been failed, cause {err:?}"
|
|
213
|
+ ))
|
|
214
|
+ .into());
|
|
215
|
+ }
|
210
|
216
|
};
|
211
|
217
|
|
212
|
218
|
// remove infos that is already processed
|
|
@@ -258,9 +264,14 @@ impl KeyProvisioner {
|
258
|
264
|
|
259
|
265
|
let get_key = async move {
|
260
|
266
|
let meet_id = Uuid::from_str(&meeting_id).map_err(ApiError::from)?;
|
261
|
|
- let data = receive(&handler, &signer, meet_id).await?;
|
262
|
|
- let secret = decrypt(signer.secret_key(), data.moderator_pk, meet_id, data.data)?;
|
263
|
|
- Ok(JsValue::from_str(&base64::encode(secret)))
|
|
267
|
+
|
|
268
|
+ loop {
|
|
269
|
+ if let ApiResponse::Success(data) = receive(&handler, &signer, meet_id).await? {
|
|
270
|
+ let secret =
|
|
271
|
+ decrypt(signer.secret_key(), data.moderator_pk, meet_id, data.data)?;
|
|
272
|
+ return Ok(JsValue::from_str(&base64::encode(secret)));
|
|
273
|
+ }
|
|
274
|
+ }
|
264
|
275
|
};
|
265
|
276
|
|
266
|
277
|
wasm_bindgen_futures::future_to_promise(async move {
|