|
|
|
@ -440,25 +440,35 @@ pub(crate) async fn claim_keys_helper(
|
|
|
|
|
|
|
|
|
|
let mut failures = BTreeMap::new();
|
|
|
|
|
|
|
|
|
|
for (server, vec) in get_over_federation {
|
|
|
|
|
let mut futures: FuturesUnordered<_> = get_over_federation
|
|
|
|
|
.into_iter()
|
|
|
|
|
.map(|(server, vec)| async move {
|
|
|
|
|
let mut one_time_keys_input_fed = BTreeMap::new();
|
|
|
|
|
for (user_id, keys) in vec {
|
|
|
|
|
one_time_keys_input_fed.insert(user_id.clone(), keys.clone());
|
|
|
|
|
}
|
|
|
|
|
// Ignore failures
|
|
|
|
|
if let Ok(keys) = services()
|
|
|
|
|
.sending
|
|
|
|
|
.send_federation_request(
|
|
|
|
|
for (user_id, keys) in vec {
|
|
|
|
|
one_time_keys_input_fed.insert(user_id.clone(), keys.clone());
|
|
|
|
|
}
|
|
|
|
|
(
|
|
|
|
|
server,
|
|
|
|
|
federation::keys::claim_keys::v1::Request {
|
|
|
|
|
one_time_keys: one_time_keys_input_fed,
|
|
|
|
|
},
|
|
|
|
|
services()
|
|
|
|
|
.sending
|
|
|
|
|
.send_federation_request(
|
|
|
|
|
server,
|
|
|
|
|
federation::keys::claim_keys::v1::Request {
|
|
|
|
|
one_time_keys: one_time_keys_input_fed,
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
.await,
|
|
|
|
|
)
|
|
|
|
|
.await
|
|
|
|
|
{
|
|
|
|
|
one_time_keys.extend(keys.one_time_keys);
|
|
|
|
|
} else {
|
|
|
|
|
failures.insert(server.to_string(), json!({}));
|
|
|
|
|
}).collect();
|
|
|
|
|
|
|
|
|
|
while let Some((server, response)) = futures.next().await {
|
|
|
|
|
match response {
|
|
|
|
|
Ok(keys) => {
|
|
|
|
|
one_time_keys.extend(keys.one_time_keys);
|
|
|
|
|
}
|
|
|
|
|
Err(_e) => {
|
|
|
|
|
failures.insert(server.to_string(), json!({}));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|