sender is pairing id not member addresses

This commit is contained in:
Sosthene 2025-09-04 04:52:48 +02:00
parent d2842831cb
commit cf31bad168

View File

@ -247,6 +247,7 @@ impl Into<JsValue> for ApiError {
#[wasm_bindgen] #[wasm_bindgen]
pub fn setup() { pub fn setup() {
wasm_logger::init(wasm_logger::Config::default()); wasm_logger::init(wasm_logger::Config::default());
log::debug!("Logging in wasm working");
} }
#[wasm_bindgen] #[wasm_bindgen]
@ -690,7 +691,7 @@ fn confirm_prd(prd: &Prd, shared_secret: &AnkSharedSecretHash) -> AnyhowResult<S
let outpoint = prd.process_id; let outpoint = prd.process_id;
let local_device = lock_local_device()?; let local_device = lock_local_device()?;
let sender = local_device.to_member(); let sender = local_device.get_pairing_commitment().ok_or(anyhow::Error::msg("Device not paired"))?;
let prd_confirm = Prd::new_confirm(outpoint, sender, prd.pcd_commitments.clone()); let prd_confirm = Prd::new_confirm(outpoint, sender, prd.pcd_commitments.clone());
@ -921,15 +922,8 @@ fn handle_prd(
PrdType::Request => { PrdType::Request => {
// We are being requested encrypted data for one or more states, to be uploaded on storage // 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 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)| { let requester = prd.sender.ok_or(anyhow::Error::msg("Missing sender"))?;
**member == prd.sender
})
{
requester_process_id
} else {
return Err(AnyhowError::msg("Unknown requester"));
};
// diffs will trigger upload of the encrypted data on storage // diffs will trigger upload of the encrypted data on storage
let mut diffs = vec![]; let mut diffs = vec![];
@ -965,8 +959,7 @@ fn handle_prd(
relevant_fields.extend(fields); relevant_fields.extend(fields);
} }
let sender: Member = local_device let sender = local_device.get_pairing_commitment().ok_or(AnyhowError::msg("Device not paired"))?;
.to_member();
let mut full_prd = Prd::new_update( let mut full_prd = Prd::new_update(
outpoint, outpoint,
@ -980,7 +973,7 @@ fn handle_prd(
full_prd.filter_keys(&relevant_fields); full_prd.filter_keys(&relevant_fields);
let prd_msg = full_prd.to_network_msg(sp_wallet)?; 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() { for sp_address in addresses.into_iter() {
// We skip our own device address, no point sending ourself a cipher // We skip our own device address, no point sending ourself a cipher
if sp_address == local_address { if sp_address == local_address {
@ -1038,7 +1031,7 @@ fn handle_decrypted_message(
processes: &OutPointProcessMap processes: &OutPointProcessMap
) -> anyhow::Result<ApiReturn> { ) -> anyhow::Result<ApiReturn> {
let local_address: SilentPaymentAddress = lock_local_device()?.get_address(); 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) handle_prd(prd, secret, members_list, processes)
} else { } else {
Err(anyhow::Error::msg("Failed to handle decrypted message")) Err(anyhow::Error::msg("Failed to handle decrypted message"))
@ -1388,13 +1381,11 @@ pub fn request_data(process_id: String, state_ids_str: Vec<String>, roles: JsVal
return Err(ApiError::new("No valid state ids provided".to_owned())); 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<SilentPaymentAddress> = HashSet::new(); let mut send_to: HashSet<SilentPaymentAddress> = HashSet::new();
for role in roles { for role in roles {
for (_, role_def) in role { for (_, role_def) in role {
let pairing_ids = &role_def.members; let pairing_ids = &role_def.members;
if !pairing_ids.contains(&sender_pairing_id) {
continue;
}
for pairing_id in pairing_ids { for pairing_id in pairing_ids {
if let Some(member) = members_list.0.get(pairing_id) { if let Some(member) = members_list.0.get(pairing_id) {
for address in member.get_addresses() { for address in member.get_addresses() {
@ -1408,7 +1399,7 @@ pub fn request_data(process_id: String, state_ids_str: Vec<String>, roles: JsVal
let prd_request = Prd::new_request( let prd_request = Prd::new_request(
process_id, process_id,
members_list.0.get(&sender_pairing_id).unwrap().clone(), sender_pairing_id,
state_ids state_ids
); );
@ -1478,8 +1469,7 @@ pub fn create_update_message(
} }
} }
let sender: Member = local_device let sender: OutPoint = local_device.get_pairing_commitment().ok_or(AnyhowError::msg("Device not paired"))?;
.to_member();
let full_prd = Prd::new_update( let full_prd = Prd::new_update(
process_id, 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) 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()))?; .ok_or(AnyhowError::msg("We haven't added our validation token yet".to_owned()))?;
let sender: Member = local_device let sender: OutPoint = local_device
.to_member(); .get_pairing_commitment()
.ok_or(AnyhowError::msg("Device not paired"))?;
let response_prd = Prd::new_response( let response_prd = Prd::new_response(
process_id, process_id,