matrix_sdk::encryption::backups

Struct Backups

Source
pub struct Backups { /* private fields */ }
Expand description

The backups manager for the Client.

Implementations§

Source§

impl Backups

Source

pub async fn create(&self) -> Result<(), Error>

Create a new backup version, encrypted with a new backup recovery key.

The backup recovery key will be persisted locally and shared with trusted devices as m.secret.send to-device messages.

After the backup has been created, all room keys will be uploaded to the homeserver.

Warning: This will overwrite any existing backup.

§Examples
let backups = client.encryption().backups();
backups.create().await?;

assert_eq!(backups.state(), BackupState::Enabled);
Source

pub async fn disable(&self) -> Result<(), Error>

Disable and delete the currently active backup only if previously enabled before, otherwise an error will be returned.

For a more aggressive variant see Backups::disable_and_delete which will delete the remote backup without checking the local state.

§Examples
let backups = client.encryption().backups();
backups.disable().await?;

assert_eq!(backups.state(), BackupState::Unknown);
Source

pub async fn disable_and_delete(&self) -> Result<(), Error>

Completely disable and delete the active backup both locally and from the backend no matter if previously setup locally or not.

⚠️ This method is mainly used when resetting the crypto identity and for most other use cases its safer Backups::disable counterpart should be used.

It will fetch the current backup version from the backend and delete it before proceeding to disabling local backups as well

§Examples
let backups = client.encryption().backups();
backups.disable_and_delete().await?;

assert_eq!(backups.state(), BackupState::Unknown);
Source

pub fn wait_for_steady_state(&self) -> WaitForSteadyState<'_>

Returns a future to wait for room keys to be uploaded.

Awaiting the future will wake up a task to upload room keys which have not yet been uploaded to the homeserver. It will then wait for the task to finish uploading.

§Examples
use futures_util::StreamExt;

let backups = client.encryption().backups();
let wait_for_steady_state = backups.wait_for_steady_state();

let mut progress_stream = wait_for_steady_state.subscribe_to_progress();

tokio::spawn(async move {
    while let Some(update) = progress_stream.next().await {
        let Ok(update) = update else { break };

        match update {
            UploadState::Uploading(counts) => {
                println!(
                    "Uploaded {} out of {} room keys.",
                    counts.backed_up, counts.total
                );
            }
            UploadState::Error => break,
            UploadState::Done => break,
            _ => (),
        }
    }
});

wait_for_steady_state.await?;
Source

pub fn state_stream( &self, ) -> impl Stream<Item = Result<BackupState, BroadcastStreamRecvError>>

Get a stream of updates to the BackupState.

This method will send out the current state as the first update.

§Examples
use futures_util::StreamExt;

let backups = client.encryption().backups();

let mut state_stream = backups.state_stream();

while let Some(update) = state_stream.next().await {
    let Ok(update) = update else { break };

    match update {
        BackupState::Enabled => {
            println!("Backups have been enabled");
        }
        _ => (),
    }
}
Source

pub fn state(&self) -> BackupState

Get the current BackupState for this Client.

Source

pub async fn are_enabled(&self) -> bool

Are backups enabled for the current Client?

This method will check if we locally have an active backup key and backup version and are ready to upload room keys to a backup.

Source

pub async fn fetch_exists_on_server(&self) -> Result<bool, Error>

Does a backup exist on the server?

This method will request info about the current backup from the homeserver and if a backup exists return true, otherwise false.

Source

pub async fn exists_on_server(&self) -> Result<bool, Error>

Does a backup exist on the server?

This method is identical to Self::fetch_exists_on_server except that we cache the latest answer in memory and only empty the cache if the local device adds or deletes a backup itself.

Do not use this method if you need an accurate answer about whether a backup exists - instead use Self::fetch_exists_on_server. This method is useful when performance is more important than guaranteed accuracy, such as when classifying UTDs.

Source

pub fn room_keys_for_room_stream( &self, room_id: &RoomId, ) -> impl Stream<Item = Result<BTreeMap<String, BTreeSet<String>>, BroadcastStreamRecvError>>

Subscribe to a stream that notifies when a room key for the specified room is downloaded from the key backup.

Source

pub async fn download_room_keys_for_room( &self, room_id: &RoomId, ) -> Result<(), Error>

Download all room keys for a certain room from the server-side key backup.

Source

pub async fn download_room_key( &self, room_id: &RoomId, session_id: &str, ) -> Result<bool, Error>

Download a single room key from the server-side key backup.

Returns true if we managed to download a room key, false or an error if we failed to download it. false indicates that there was no error, we just don’t have backups enabled so we can’t download a room key.

Trait Implementations§

Source§

impl Clone for Backups

Source§

fn clone(&self) -> Backups

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Backups

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

impl<T> Identity for T
where T: ?Sized,

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> Any for T
where T: Any,

Source§

impl<T> AsyncTraitDeps for T

Source§

impl<T> CloneAny for T
where T: Any + Clone,

Source§

impl<T> CloneAnySend for T
where T: Any + Send + Clone,

Source§

impl<T> CloneAnySendSync for T
where T: Any + Send + Sync + Clone,

Source§

impl<T> CloneAnySync for T
where T: Any + Sync + Clone,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T

Source§

impl<T> SendOutsideWasm for T
where T: Send,

Source§

impl<T> SyncOutsideWasm for T
where T: Sync,