diff --git a/src/api.rs b/src/api.rs index a550b53..d710b4c 100644 --- a/src/api.rs +++ b/src/api.rs @@ -247,6 +247,7 @@ impl Into for ApiError { #[wasm_bindgen] pub fn setup() { wasm_logger::init(wasm_logger::Config::default()); + log::debug!("Logging in wasm working"); } #[wasm_bindgen] @@ -690,7 +691,7 @@ fn confirm_prd(prd: &Prd, shared_secret: &AnkSharedSecretHash) -> AnyhowResult { // We are being requested encrypted data for one or more states, to be uploaded on storage let states: Vec<[u8; 32]> = serde_json::from_str(&prd.payload)?; - let requester = if let Some((requester_process_id, _)) = members_list.0.iter() - .find(|(outpoint, member)| { - **member == prd.sender - }) - { - requester_process_id - } else { - return Err(AnyhowError::msg("Unknown requester")); - }; + + let requester = prd.sender.ok_or(anyhow::Error::msg("Missing sender"))?; // diffs will trigger upload of the encrypted data on storage let mut diffs = vec![]; @@ -965,8 +959,7 @@ fn handle_prd( relevant_fields.extend(fields); } - let sender: Member = local_device - .to_member(); + let sender = local_device.get_pairing_commitment().ok_or(AnyhowError::msg("Device not paired"))?; let mut full_prd = Prd::new_update( outpoint, @@ -980,7 +973,7 @@ fn handle_prd( full_prd.filter_keys(&relevant_fields); let prd_msg = full_prd.to_network_msg(sp_wallet)?; - let addresses = prd.sender.get_addresses(); + let addresses = members_list.0.get(&sender).ok_or(AnyhowError::msg("Unknown requester"))?.get_addresses(); for sp_address in addresses.into_iter() { // We skip our own device address, no point sending ourself a cipher if sp_address == local_address { @@ -1038,7 +1031,7 @@ fn handle_decrypted_message( processes: &OutPointProcessMap ) -> anyhow::Result { let local_address: SilentPaymentAddress = lock_local_device()?.get_address(); - if let Ok(prd) = Prd::extract_from_message(&plain, local_address) { + if let Ok(prd) = Prd::extract_from_message(&plain, local_address, members_list) { handle_prd(prd, secret, members_list, processes) } else { Err(anyhow::Error::msg("Failed to handle decrypted message")) @@ -1388,13 +1381,11 @@ pub fn request_data(process_id: String, state_ids_str: Vec, roles: JsVal return Err(ApiError::new("No valid state ids provided".to_owned())); } + // TODO actually sort members that have data in common with us (even in different roles) let mut send_to: HashSet = HashSet::new(); for role in roles { for (_, role_def) in role { let pairing_ids = &role_def.members; - if !pairing_ids.contains(&sender_pairing_id) { - continue; - } for pairing_id in pairing_ids { if let Some(member) = members_list.0.get(pairing_id) { for address in member.get_addresses() { @@ -1408,7 +1399,7 @@ pub fn request_data(process_id: String, state_ids_str: Vec, roles: JsVal let prd_request = Prd::new_request( process_id, - members_list.0.get(&sender_pairing_id).unwrap().clone(), + sender_pairing_id, state_ids ); @@ -1478,8 +1469,7 @@ pub fn create_update_message( } } - let sender: Member = local_device - .to_member(); + let sender: OutPoint = local_device.get_pairing_commitment().ok_or(AnyhowError::msg("Device not paired"))?; let full_prd = Prd::new_update( process_id, @@ -1649,8 +1639,9 @@ fn new_response_prd(process_id: OutPoint, update_state: &ProcessState, members_l let proof = update_state.validation_tokens.iter().find(|t| t.get_key() == our_key) .ok_or(AnyhowError::msg("We haven't added our validation token yet".to_owned()))?; - let sender: Member = local_device - .to_member(); + let sender: OutPoint = local_device + .get_pairing_commitment() + .ok_or(AnyhowError::msg("Device not paired"))?; let response_prd = Prd::new_response( process_id,