crypto: Notify our users that a verification timed out on our end
This commit is contained in:
parent
ee6b804804
commit
113587247e
3 changed files with 26 additions and 10 deletions
|
@ -789,7 +789,7 @@ impl OlmMachine {
|
|||
one_time_keys_counts: &BTreeMap<DeviceKeyAlgorithm, UInt>,
|
||||
) -> OlmResult<ToDevice> {
|
||||
// Remove verification objects that have expired or are done.
|
||||
self.verification_machine.garbage_collect();
|
||||
let mut events = self.verification_machine.garbage_collect();
|
||||
|
||||
// Always save the account, a new session might get created which also
|
||||
// touches the account.
|
||||
|
@ -804,8 +804,6 @@ impl OlmMachine {
|
|||
}
|
||||
}
|
||||
|
||||
let mut events = Vec::new();
|
||||
|
||||
for mut raw_event in to_device_events.events {
|
||||
let event = match raw_event.deserialize() {
|
||||
Ok(e) => e,
|
||||
|
|
|
@ -666,7 +666,8 @@ impl From<(RoomId, AnyMessageEventContent)> for OutgoingContent {
|
|||
}
|
||||
|
||||
#[cfg(test)]
|
||||
use crate::{OutgoingRequest, OutgoingVerificationRequest, RoomMessageRequest, ToDeviceRequest};
|
||||
use crate::OutgoingVerificationRequest;
|
||||
use crate::{OutgoingRequest, RoomMessageRequest, ToDeviceRequest};
|
||||
|
||||
#[cfg(test)]
|
||||
impl From<OutgoingVerificationRequest> for OutgoingContent {
|
||||
|
@ -678,14 +679,12 @@ impl From<OutgoingVerificationRequest> for OutgoingContent {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
impl From<RoomMessageRequest> for OutgoingContent {
|
||||
fn from(value: RoomMessageRequest) -> Self {
|
||||
(value.room_id, value.content).into()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
impl TryFrom<ToDeviceRequest> for OutgoingContent {
|
||||
type Error = String;
|
||||
|
||||
|
@ -736,7 +735,6 @@ impl TryFrom<ToDeviceRequest> for OutgoingContent {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
impl TryFrom<OutgoingRequest> for OutgoingContent {
|
||||
type Error = String;
|
||||
|
||||
|
|
|
@ -12,11 +12,18 @@
|
|||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use std::{convert::TryFrom, sync::Arc};
|
||||
use std::{
|
||||
convert::{TryFrom, TryInto},
|
||||
sync::Arc,
|
||||
};
|
||||
|
||||
use dashmap::DashMap;
|
||||
use matrix_sdk_common::{locks::Mutex, uuid::Uuid};
|
||||
use ruma::{DeviceId, MilliSecondsSinceUnixEpoch, UserId};
|
||||
use ruma::{
|
||||
events::{AnyToDeviceEvent, AnyToDeviceEventContent, ToDeviceEvent},
|
||||
serde::Raw,
|
||||
DeviceId, MilliSecondsSinceUnixEpoch, UserId,
|
||||
};
|
||||
use tracing::{info, trace, warn};
|
||||
|
||||
use super::{
|
||||
|
@ -165,15 +172,28 @@ impl VerificationMachine {
|
|||
self.verifications.outgoing_requests()
|
||||
}
|
||||
|
||||
pub fn garbage_collect(&self) {
|
||||
pub fn garbage_collect(&self) -> Vec<Raw<AnyToDeviceEvent>> {
|
||||
let mut events = vec![];
|
||||
|
||||
for user_verification in self.requests.iter() {
|
||||
user_verification.retain(|_, v| !(v.is_done() || v.is_cancelled()));
|
||||
}
|
||||
self.requests.retain(|_, v| !v.is_empty());
|
||||
|
||||
for request in self.verifications.garbage_collect() {
|
||||
if let Ok(OutgoingContent::ToDevice(AnyToDeviceEventContent::KeyVerificationCancel(
|
||||
content,
|
||||
))) = request.clone().try_into()
|
||||
{
|
||||
let event = ToDeviceEvent { content, sender: self.account.user_id().to_owned() };
|
||||
|
||||
events.push(AnyToDeviceEvent::KeyVerificationCancel(event).into());
|
||||
}
|
||||
|
||||
self.verifications.add_request(request)
|
||||
}
|
||||
|
||||
events
|
||||
}
|
||||
|
||||
async fn mark_sas_as_done(
|
||||
|
|
Loading…
Reference in a new issue