crypto: Return an Option instead of an empty result for the key uploads.

master
Damir Jelić 2020-08-21 09:50:01 +02:00
parent 202c20feda
commit ce93869915
3 changed files with 20 additions and 25 deletions

View File

@ -1337,12 +1337,12 @@ impl BaseClient {
/// Returns an empty error if no keys need to be uploaded. /// Returns an empty error if no keys need to be uploaded.
#[cfg(feature = "encryption")] #[cfg(feature = "encryption")]
#[cfg_attr(feature = "docs", doc(cfg(encryption)))] #[cfg_attr(feature = "docs", doc(cfg(encryption)))]
pub async fn keys_for_upload(&self) -> StdResult<KeysUploadRequest, ()> { pub async fn keys_for_upload(&self) -> Option<KeysUploadRequest> {
let olm = self.olm.lock().await; let olm = self.olm.lock().await;
match &*olm { match &*olm {
Some(o) => o.keys_for_upload().await, Some(o) => o.keys_for_upload().await,
None => Err(()), None => None,
} }
} }

View File

@ -18,7 +18,6 @@ use std::{
collections::{BTreeMap, HashSet}, collections::{BTreeMap, HashSet},
convert::{TryFrom, TryInto}, convert::{TryFrom, TryInto},
mem, mem,
result::Result as StdResult,
sync::Arc, sync::Arc,
}; };
@ -26,15 +25,14 @@ use dashmap::DashMap;
use serde_json::Value; use serde_json::Value;
use tracing::{debug, error, info, instrument, trace, warn}; use tracing::{debug, error, info, instrument, trace, warn};
use api::r0::{
keys::{claim_keys, get_keys, upload_keys, OneTimeKey},
sync::sync_events::Response as SyncResponse,
to_device::{
send_event_to_device::IncomingRequest as OwnedToDeviceRequest, DeviceIdOrAllDevices,
},
};
use matrix_sdk_common::{ use matrix_sdk_common::{
api, api::r0::{
keys::{claim_keys, get_keys, upload_keys, OneTimeKey},
sync::sync_events::Response as SyncResponse,
to_device::{
send_event_to_device::IncomingRequest as OwnedToDeviceRequest, DeviceIdOrAllDevices,
},
},
encryption::DeviceKeys, encryption::DeviceKeys,
events::{ events::{
forwarded_room_key::ForwardedRoomKeyEventContent, forwarded_room_key::ForwardedRoomKeyEventContent,
@ -631,17 +629,17 @@ impl OlmMachine {
/// Get a request to upload E2EE keys to the server. /// Get a request to upload E2EE keys to the server.
/// ///
/// Returns an empty error if no keys need to be uploaded. /// Returns None if no keys need to be uploaded.
/// ///
/// The response of a successful key upload requests needs to be passed to /// The response of a successful key upload requests needs to be passed to
/// the [`OlmMachine`] with the [`receive_keys_upload_response`]. /// the [`OlmMachine`] with the [`receive_keys_upload_response`].
/// ///
/// [`receive_keys_upload_response`]: #method.receive_keys_upload_response /// [`receive_keys_upload_response`]: #method.receive_keys_upload_response
/// [`OlmMachine`]: struct.OlmMachine.html /// [`OlmMachine`]: struct.OlmMachine.html
pub async fn keys_for_upload(&self) -> StdResult<upload_keys::Request, ()> { pub async fn keys_for_upload(&self) -> Option<upload_keys::Request> {
let (device_keys, one_time_keys) = self.account.keys_for_upload().await?; let (device_keys, one_time_keys) = self.account.keys_for_upload().await?;
Ok(upload_keys::Request { Some(upload_keys::Request {
device_keys, device_keys,
one_time_keys, one_time_keys,
}) })
@ -1813,7 +1811,7 @@ pub(crate) mod test {
.unwrap(); .unwrap();
let ret = machine.keys_for_upload().await; let ret = machine.keys_for_upload().await;
assert!(ret.is_err()); assert!(ret.is_none());
} }
#[tokio::test] #[tokio::test]

View File

@ -200,18 +200,15 @@ impl Account {
/// Get a tuple of device and one-time keys that need to be uploaded. /// Get a tuple of device and one-time keys that need to be uploaded.
/// ///
/// Returns an empty error if no keys need to be uploaded. /// Returns None if no keys need to be uploaded.
pub(crate) async fn keys_for_upload( pub(crate) async fn keys_for_upload(
&self, &self,
) -> Result< ) -> Option<(
( Option<DeviceKeys>,
Option<DeviceKeys>, Option<BTreeMap<DeviceKeyId, OneTimeKey>>,
Option<BTreeMap<DeviceKeyId, OneTimeKey>>, )> {
),
(),
> {
if !self.should_upload_keys().await { if !self.should_upload_keys().await {
return Err(()); return None;
} }
let device_keys = if !self.shared() { let device_keys = if !self.shared() {
@ -222,7 +219,7 @@ impl Account {
let one_time_keys = self.signed_one_time_keys().await.ok(); let one_time_keys = self.signed_one_time_keys().await.ok();
Ok((device_keys, one_time_keys)) Some((device_keys, one_time_keys))
} }
/// Mark the current set of one-time keys as being published. /// Mark the current set of one-time keys as being published.