matrix-sdk: Add methods to request verification for devices
parent
5566886f20
commit
24377a45ff
|
@ -18,9 +18,13 @@ use matrix_sdk_base::crypto::{
|
||||||
store::CryptoStoreError, Device as BaseDevice, LocalTrust, ReadOnlyDevice,
|
store::CryptoStoreError, Device as BaseDevice, LocalTrust, ReadOnlyDevice,
|
||||||
UserDevices as BaseUserDevices,
|
UserDevices as BaseUserDevices,
|
||||||
};
|
};
|
||||||
use ruma::{DeviceId, DeviceIdBox};
|
use ruma::{events::key::verification::VerificationMethod, DeviceId, DeviceIdBox};
|
||||||
|
|
||||||
use crate::{error::Result, verification::SasVerification, Client};
|
use crate::{
|
||||||
|
error::Result,
|
||||||
|
verification::{SasVerification, VerificationRequest},
|
||||||
|
Client,
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
/// A device represents a E2EE capable client of an user.
|
/// A device represents a E2EE capable client of an user.
|
||||||
|
@ -43,7 +47,10 @@ impl Device {
|
||||||
/// Returns a `Sas` object that represents the interactive verification
|
/// Returns a `Sas` object that represents the interactive verification
|
||||||
/// flow.
|
/// flow.
|
||||||
///
|
///
|
||||||
/// # Example
|
/// This method has been deprecated in the spec and the
|
||||||
|
/// [`request_verification()`] method should be used instead.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```no_run
|
/// ```no_run
|
||||||
/// # use std::convert::TryFrom;
|
/// # use std::convert::TryFrom;
|
||||||
|
@ -62,6 +69,8 @@ impl Device {
|
||||||
/// let verification = device.start_verification().await.unwrap();
|
/// let verification = device.start_verification().await.unwrap();
|
||||||
/// # });
|
/// # });
|
||||||
/// ```
|
/// ```
|
||||||
|
///
|
||||||
|
/// [`request_verification()`]: #method.request_verification
|
||||||
pub async fn start_verification(&self) -> Result<SasVerification> {
|
pub async fn start_verification(&self) -> Result<SasVerification> {
|
||||||
let (sas, request) = self.inner.start_verification().await?;
|
let (sas, request) = self.inner.start_verification().await?;
|
||||||
self.client.send_to_device(&request).await?;
|
self.client.send_to_device(&request).await?;
|
||||||
|
@ -69,6 +78,93 @@ impl Device {
|
||||||
Ok(SasVerification { inner: sas, client: self.client.clone() })
|
Ok(SasVerification { inner: sas, client: self.client.clone() })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Request an interacitve verification with this `Device`
|
||||||
|
///
|
||||||
|
/// Returns a `VerificationRequest` object and a to-device request that
|
||||||
|
/// needs to be sent out.
|
||||||
|
///
|
||||||
|
/// The default methods that are supported are `m.sas.v1` and
|
||||||
|
/// `m.qr_code.show.v1`, if this isn't desireable the
|
||||||
|
/// [`request_verification_with_methods()`] method can be used to override
|
||||||
|
/// this.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```no_run
|
||||||
|
/// # use std::convert::TryFrom;
|
||||||
|
/// # use matrix_sdk::{Client, ruma::UserId};
|
||||||
|
/// # use url::Url;
|
||||||
|
/// # use futures::executor::block_on;
|
||||||
|
/// # let alice = UserId::try_from("@alice:example.org").unwrap();
|
||||||
|
/// # let homeserver = Url::parse("http://example.com").unwrap();
|
||||||
|
/// # let client = Client::new(homeserver).unwrap();
|
||||||
|
/// # block_on(async {
|
||||||
|
/// let device = client.get_device(&alice, "DEVICEID".into())
|
||||||
|
/// .await
|
||||||
|
/// .unwrap()
|
||||||
|
/// .unwrap();
|
||||||
|
///
|
||||||
|
/// let verification = device.request_verification().await.unwrap();
|
||||||
|
/// # });
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// [`request_verification_with_methods()`]:
|
||||||
|
/// #method.request_verification_with_methods
|
||||||
|
pub async fn request_verification(&self) -> Result<VerificationRequest> {
|
||||||
|
let (verification, request) = self.inner.request_verification().await;
|
||||||
|
self.client.send_verification_request(request).await?;
|
||||||
|
|
||||||
|
Ok(VerificationRequest { inner: verification, client: self.client.clone() })
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Request an interacitve verification with this `Device`
|
||||||
|
///
|
||||||
|
/// Returns a `VerificationRequest` object and a to-device request that
|
||||||
|
/// needs to be sent out.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `methods` - The verification methods that we want to support.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```no_run
|
||||||
|
/// # use std::convert::TryFrom;
|
||||||
|
/// # use matrix_sdk::{
|
||||||
|
/// # Client,
|
||||||
|
/// # ruma::{
|
||||||
|
/// # UserId,
|
||||||
|
/// # events::key::verification::VerificationMethod,
|
||||||
|
/// # }
|
||||||
|
/// # };
|
||||||
|
/// # use url::Url;
|
||||||
|
/// # use futures::executor::block_on;
|
||||||
|
/// # let alice = UserId::try_from("@alice:example.org").unwrap();
|
||||||
|
/// # let homeserver = Url::parse("http://example.com").unwrap();
|
||||||
|
/// # let client = Client::new(homeserver).unwrap();
|
||||||
|
/// # block_on(async {
|
||||||
|
/// let device = client.get_device(&alice, "DEVICEID".into())
|
||||||
|
/// .await
|
||||||
|
/// .unwrap()
|
||||||
|
/// .unwrap();
|
||||||
|
///
|
||||||
|
/// // We don't want to support showing a QR code, we only support SAS
|
||||||
|
/// // verification
|
||||||
|
/// let methods = vec![VerificationMethod::SasV1];
|
||||||
|
///
|
||||||
|
/// let verification = device.request_verification_with_methods(methods).await.unwrap();
|
||||||
|
/// # });
|
||||||
|
/// ```
|
||||||
|
pub async fn request_verification_with_methods(
|
||||||
|
&self,
|
||||||
|
methods: Vec<VerificationMethod>,
|
||||||
|
) -> Result<VerificationRequest> {
|
||||||
|
let (verification, request) = self.inner.request_verification_with_methods(methods).await;
|
||||||
|
self.client.send_verification_request(request).await?;
|
||||||
|
|
||||||
|
Ok(VerificationRequest { inner: verification, client: self.client.clone() })
|
||||||
|
}
|
||||||
|
|
||||||
/// Is the device considered to be verified, either by locally trusting it
|
/// Is the device considered to be verified, either by locally trusting it
|
||||||
/// or using cross signing.
|
/// or using cross signing.
|
||||||
pub fn verified(&self) -> bool {
|
pub fn verified(&self) -> bool {
|
||||||
|
|
Loading…
Reference in New Issue