crypto: Retire the memory store.
parent
485296bc34
commit
ddaf630063
|
@ -24,7 +24,6 @@ use super::memory_stores::{GroupSessionStore, SessionStore};
|
|||
use super::olm::{Account, InboundGroupSession, Session};
|
||||
#[cfg(feature = "sqlite-cryptostore")]
|
||||
use super::store::sqlite::SqliteStore;
|
||||
use super::store::MemoryStore;
|
||||
use super::CryptoStore;
|
||||
use crate::api;
|
||||
|
||||
|
@ -69,7 +68,7 @@ pub struct OlmMachine {
|
|||
/// Store for the encryption keys.
|
||||
/// Persists all the encrytpion keys so a client can resume the session
|
||||
/// without the need to create new keys.
|
||||
// store: Box<dyn CryptoStore>,
|
||||
store: Option<Box<dyn CryptoStore>>,
|
||||
/// A cache of all the Olm sessions we know about.
|
||||
sessions: SessionStore,
|
||||
/// A cache of all the inbound group sessions we know about.
|
||||
|
@ -89,7 +88,7 @@ impl OlmMachine {
|
|||
device_id: device_id.to_owned(),
|
||||
account: Arc::new(Mutex::new(Account::new())),
|
||||
uploaded_signed_key_count: None,
|
||||
// store: Box::new(MemoryStore::new()),
|
||||
store: None,
|
||||
sessions: SessionStore::new(),
|
||||
inbound_group_sessions: GroupSessionStore::new(),
|
||||
})
|
||||
|
@ -123,7 +122,7 @@ impl OlmMachine {
|
|||
device_id: device_id.to_owned(),
|
||||
account: Arc::new(Mutex::new(account)),
|
||||
uploaded_signed_key_count: None,
|
||||
// store: Box::new(store),
|
||||
store: Some(Box::new(store)),
|
||||
sessions: SessionStore::new(),
|
||||
inbound_group_sessions: GroupSessionStore::new(),
|
||||
})
|
||||
|
@ -179,7 +178,10 @@ impl OlmMachine {
|
|||
account.mark_keys_as_published();
|
||||
drop(account);
|
||||
|
||||
// self.store.save_account(self.account.clone()).await?;
|
||||
if let Some(store) = self.store.as_mut() {
|
||||
store.save_account(self.account.clone()).await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -53,51 +53,7 @@ pub enum CryptoStoreError {
|
|||
pub type Result<T> = std::result::Result<T, CryptoStoreError>;
|
||||
|
||||
#[async_trait]
|
||||
pub trait CryptoStore: Debug + Sync + Sync {
|
||||
pub trait CryptoStore: Debug + Send + Sync {
|
||||
async fn load_account(&mut self) -> Result<Option<Account>>;
|
||||
async fn save_account(&mut self, account: Arc<Mutex<Account>>) -> Result<()>;
|
||||
}
|
||||
|
||||
pub struct MemoryStore {
|
||||
pub(crate) account_info: Option<(String, bool)>,
|
||||
}
|
||||
|
||||
impl MemoryStore {
|
||||
/// Create a new empty memory store.
|
||||
pub fn new() -> Self {
|
||||
MemoryStore { account_info: None }
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl CryptoStore for MemoryStore {
|
||||
async fn load_account(&mut self) -> Result<Option<Account>> {
|
||||
let result = match &self.account_info {
|
||||
Some((pickle, shared)) => Some(Account::from_pickle(
|
||||
pickle.to_owned(),
|
||||
PicklingMode::Unencrypted,
|
||||
*shared,
|
||||
)?),
|
||||
None => None,
|
||||
};
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
async fn save_account(&mut self, account: Arc<Mutex<Account>>) -> Result<()> {
|
||||
let acc = account.lock().await;
|
||||
let pickle = acc.pickle(PicklingMode::Unencrypted);
|
||||
self.account_info = Some((pickle, acc.shared));
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for MemoryStore {
|
||||
fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> StdResult<(), std::fmt::Error> {
|
||||
write!(
|
||||
fmt,
|
||||
"MemoryStore {{ account_stored: {}, account shared: {} }}",
|
||||
self.account_info.is_some(),
|
||||
self.account_info.as_ref().map_or(false, |a| a.1)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue