Add roles as argument to request_data
This commit is contained in:
parent
8d2c34b13b
commit
544e8989c6
32
src/api.rs
32
src/api.rs
@ -1396,35 +1396,27 @@ pub fn update_process(
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn request_data(process_id: String, state_ids: Vec<String>) -> ApiResult<ApiReturn> {
|
||||
pub fn request_data(process_id: String, state_ids: Vec<String>, roles: JsValue) -> ApiResult<ApiReturn> {
|
||||
let process_id = OutPoint::from_str(&process_id)?;
|
||||
let local_device = lock_local_device()?;
|
||||
let sender = local_device.to_member();
|
||||
let sp_wallet = local_device.get_wallet();
|
||||
let local_address = sp_wallet.get_client().get_receiving_address();
|
||||
let roles: Vec<BTreeMap<String, RoleDefinition>> = serde_wasm_bindgen::from_value(roles)?;
|
||||
|
||||
let mut send_to: HashSet<SilentPaymentAddress> = HashSet::new();
|
||||
let processes = lock_processes()?;
|
||||
let process = processes.get(&process_id).ok_or(ApiError::new("Unknown process".to_owned()))?;
|
||||
for state_id in &state_ids {
|
||||
if let Ok(state) = process.get_state_for_id(&state_id) {
|
||||
let roles = &state.roles;
|
||||
for (_, role_def) in roles {
|
||||
let members = &role_def.members;
|
||||
if !members.contains(&sender) {
|
||||
continue;
|
||||
}
|
||||
for member in members {
|
||||
for address in member.get_addresses() {
|
||||
if address == local_address { continue };
|
||||
send_to.insert(SilentPaymentAddress::try_from(address).unwrap());
|
||||
}
|
||||
for role in roles {
|
||||
for (_, role_def) in role {
|
||||
let members = &role_def.members;
|
||||
if !members.contains(&sender) {
|
||||
continue;
|
||||
}
|
||||
for member in members {
|
||||
for address in member.get_addresses() {
|
||||
if address == local_address { continue };
|
||||
send_to.insert(SilentPaymentAddress::try_from(address).unwrap());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Ignoring unknown state
|
||||
log::error!("Unknown state");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user