core_crypto/mls/conversation/mutable/
wipe.rs1use openmls_traits::OpenMlsCryptoProvider as _;
2
3use super::Result;
4use crate::{KeystoreError, OpenMlsError, RecursiveError, mls::conversation::ConversationMut};
5
6impl ConversationMut {
7 pub async fn wipe(&mut self) -> Result<()> {
12 let provider = self.crypto_provider().await?;
14 let mut conversation_cache = self
15 .tx_context
16 .mls_groups()
17 .await
18 .map_err(RecursiveError::transaction("getting mls conversation cache"))?;
19
20 self.mutate_group(async |database, group, _| {
21 let _ = group.delete_previous_epoch_keypairs(&provider).await;
24
25 let proposals = group
28 .pending_proposals()
29 .map(|proposal| proposal.proposal_reference().to_owned())
30 .collect::<Vec<_>>();
31 for proposal in proposals {
32 group
34 .remove_pending_proposal(database, &proposal)
35 .await
36 .map_err(OpenMlsError::wrap("removing pending proposal"))?;
37 }
38
39 Ok(())
40 })
41 .await?;
42
43 let id = self.id();
44
45 provider
46 .key_store()
47 .mls_group_delete(id)
48 .await
49 .map_err(KeystoreError::wrap("deleting mls group"))?;
50 let _ = conversation_cache.remove(id);
51
52 Ok(())
53 }
54}