pub struct QrVerification { /* private fields */ }
qrcode
and e2e-encryption
only.Expand description
An object controlling QR code style key verification flows.
Implementations§
Source§impl QrVerification
impl QrVerification
Sourcepub fn own_user_id(&self) -> &UserId
pub fn own_user_id(&self) -> &UserId
Get our own user id.
Sourcepub fn is_self_verification(&self) -> bool
pub fn is_self_verification(&self) -> bool
Is this a verification that is verifying one of our own devices.
Sourcepub fn has_been_scanned(&self) -> bool
pub fn has_been_scanned(&self) -> bool
Whether the QrCode was scanned by the other device.
Sourcepub fn we_started(&self) -> bool
pub fn we_started(&self) -> bool
Did we initiate the verification flow.
Sourcepub fn cancel_info(&self) -> Option<CancelInfo>
pub fn cancel_info(&self) -> Option<CancelInfo>
Get info about the cancellation if the verification flow has been cancelled.
Sourcepub fn other_user_id(&self) -> &UserId
pub fn other_user_id(&self) -> &UserId
Get the user id of the other user participating in this verification flow.
Sourcepub fn other_device(&self) -> &DeviceData
pub fn other_device(&self) -> &DeviceData
Get the other user’s device that we’re verifying.
Sourcepub fn is_cancelled(&self) -> bool
pub fn is_cancelled(&self) -> bool
Has the verification been cancelled.
Sourcepub fn to_qr_code(&self) -> Result<QrCode, EncodingError>
pub fn to_qr_code(&self) -> Result<QrCode, EncodingError>
Generate a QR code object that is representing this verification flow.
The QrCode
can then be rendered as an image or as an unicode string.
The to_bytes()
method can be used to instead
output the raw bytes that should be encoded as a QR code.
Sourcepub fn to_bytes(&self) -> Result<Vec<u8>, EncodingError>
pub fn to_bytes(&self) -> Result<Vec<u8>, EncodingError>
Generate a the raw bytes that should be encoded as a QR code is representing this verification flow.
The to_qr_code()
method can be used to instead
output a QrCode
object that can be rendered.
Sourcepub async fn cancel(&self) -> Result<()>
pub async fn cancel(&self) -> Result<()>
Abort the verification flow and notify the other side that we did so.
Sourcepub fn changes(&self) -> impl Stream<Item = QrVerificationState>
pub fn changes(&self) -> impl Stream<Item = QrVerificationState>
Listen for changes in the QR code verification process.
The changes are presented as a stream of QrVerificationState
values.
This method can be used to react to changes in the state of the verification process, or rather the method can be used to handle each step of the verification process.
§Flowchart
The flow of the verification process is pictured below. Please note that the process can be cancelled at each step of the process. Either side can cancel the process.
┌───────┐
│Started│
└───┬───┘
│
│
┌──────⌄─────┐
│Reciprocated│
└──────┬─────┘
│
┌───⌄───┐
│Scanned│
└───┬───┘
│
__________⌄_________
╱ ╲ ┌─────────┐
╱ Was the QR Code ╲______│Cancelled│
╲ successfully scanned ╱ no └─────────┘
╲____________________╱
│yes
│
┌────⌄────┐
│Confirmed│
└────┬────┘
│
┌───⌄───┐
│ Done │
└───────┘
§Examples
use futures_util::{Stream, StreamExt};
use matrix_sdk::encryption::verification::{
QrVerification, QrVerificationState,
};
let mut stream = qr.changes();
while let Some(state) = stream.next().await {
match state {
QrVerificationState::Scanned => {
println!("Was the QR code successfully scanned?");
// Ask the user to confirm or cancel here.
if user_confirmed {
qr.confirm().await?;
} else {
qr.cancel().await?;
}
}
QrVerificationState::Done { .. } => {
let device = qr.other_device();
println!(
"Successfully verified device {} {} {:?}",
device.user_id(),
device.device_id(),
device.local_trust_state()
);
break;
}
QrVerificationState::Cancelled(cancel_info) => {
println!(
"The verification has been cancelled, reason: {}",
cancel_info.reason()
);
break;
}
QrVerificationState::Started
| QrVerificationState::Reciprocated
| QrVerificationState::Confirmed => (),
}
}
Sourcepub fn state(&self) -> QrVerificationState
pub fn state(&self) -> QrVerificationState
Get the current state the verification process is in.
To listen to changes to the QrVerificationState
use the
QrVerification::changes
method.
Trait Implementations§
Source§impl Clone for QrVerification
impl Clone for QrVerification
Source§fn clone(&self) -> QrVerification
fn clone(&self) -> QrVerification
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for QrVerification
impl Debug for QrVerification
Source§impl From<QrVerification> for Verification
impl From<QrVerification> for Verification
Source§fn from(qr: QrVerification) -> Self
fn from(qr: QrVerification) -> Self
Auto Trait Implementations§
impl Freeze for QrVerification
impl !RefUnwindSafe for QrVerification
impl Send for QrVerification
impl Sync for QrVerification
impl Unpin for QrVerification
impl !UnwindSafe for QrVerification
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> CompatExt for T
impl<T> CompatExt for T
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T, UT> HandleAlloc<UT> for T
impl<T, UT> HandleAlloc<UT> for T
Source§fn consume_handle(handle: Handle) -> Arc<T>
fn consume_handle(handle: Handle) -> Arc<T>
Arc<>
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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