mirror of
https://github.com/matrix-org/matrix-rust-sdk.git
synced 2026-05-24 16:48:52 -04:00
fix(crypto): Don't put the session timestamps behind an Arc
This commit is contained in:
@@ -526,7 +526,7 @@ impl ReadOnlyDevice {
|
||||
|
||||
let session = if let Some(s) = store.get_sessions(&sender_key.to_base64()).await? {
|
||||
let mut sessions = s.lock().await;
|
||||
sessions.sort_by_key(|s| *s.last_use_time);
|
||||
sessions.sort_by_key(|s| s.last_use_time);
|
||||
sessions.get(0).cloned()
|
||||
} else {
|
||||
None
|
||||
|
||||
@@ -932,8 +932,8 @@ impl ReadOnlyAccount {
|
||||
session_id: session_id.into(),
|
||||
sender_key: identity_key,
|
||||
created_using_fallback_key: fallback_used,
|
||||
creation_time: Arc::new(now),
|
||||
last_use_time: Arc::new(now),
|
||||
creation_time: now,
|
||||
last_use_time: now,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1028,8 +1028,8 @@ impl ReadOnlyAccount {
|
||||
session_id: session_id.into(),
|
||||
sender_key: their_identity_key,
|
||||
created_using_fallback_key: false,
|
||||
creation_time: Arc::new(now),
|
||||
last_use_time: Arc::new(now),
|
||||
creation_time: now,
|
||||
last_use_time: now,
|
||||
};
|
||||
|
||||
Ok(InboundCreationResult { session, plaintext: result.plaintext })
|
||||
|
||||
@@ -161,7 +161,7 @@ impl TryFrom<ToDeviceForwardedRoomKeyEventContent> for ExportedRoomKey {
|
||||
|
||||
#[cfg(all(test, any(target_os = "linux", target_arch = "wasm32")))]
|
||||
mod tests {
|
||||
use std::{sync::Arc, time::Duration};
|
||||
use std::time::Duration;
|
||||
|
||||
use matrix_sdk_common::instant::SystemTime;
|
||||
use matrix_sdk_test::async_test;
|
||||
@@ -205,7 +205,7 @@ mod tests {
|
||||
assert!(!session.expired());
|
||||
// FIXME: this might break on macosx and windows
|
||||
let time = SystemTime::now() - Duration::from_secs(60 * 60);
|
||||
session.creation_time = Arc::new(SecondsSinceUnixEpoch::from_system_time(time).unwrap());
|
||||
session.creation_time = SecondsSinceUnixEpoch::from_system_time(time).unwrap();
|
||||
assert!(session.expired());
|
||||
|
||||
Ok(())
|
||||
|
||||
@@ -117,7 +117,7 @@ pub struct OutboundGroupSession {
|
||||
account_identity_keys: Arc<IdentityKeys>,
|
||||
session_id: Arc<str>,
|
||||
room_id: Arc<RoomId>,
|
||||
pub(crate) creation_time: Arc<SecondsSinceUnixEpoch>,
|
||||
pub(crate) creation_time: SecondsSinceUnixEpoch,
|
||||
message_count: Arc<AtomicU64>,
|
||||
shared: Arc<AtomicBool>,
|
||||
invalidated: Arc<AtomicBool>,
|
||||
@@ -174,7 +174,7 @@ impl OutboundGroupSession {
|
||||
device_id,
|
||||
account_identity_keys: identity_keys,
|
||||
session_id: session_id.into(),
|
||||
creation_time: Arc::new(seconds_since_unix_epoch()),
|
||||
creation_time: seconds_since_unix_epoch(),
|
||||
message_count: Arc::new(AtomicU64::new(0)),
|
||||
shared: Arc::new(AtomicBool::new(false)),
|
||||
invalidated: Arc::new(AtomicBool::new(false)),
|
||||
@@ -494,7 +494,7 @@ impl OutboundGroupSession {
|
||||
account_identity_keys: identity_keys,
|
||||
session_id: session_id.into(),
|
||||
room_id: pickle.room_id,
|
||||
creation_time: pickle.creation_time.into(),
|
||||
creation_time: pickle.creation_time,
|
||||
message_count: AtomicU64::from(pickle.message_count).into(),
|
||||
shared: AtomicBool::from(pickle.shared).into(),
|
||||
invalidated: AtomicBool::from(pickle.invalidated).into(),
|
||||
@@ -525,7 +525,7 @@ impl OutboundGroupSession {
|
||||
pickle,
|
||||
room_id: self.room_id.clone(),
|
||||
settings: self.settings.clone(),
|
||||
creation_time: *self.creation_time,
|
||||
creation_time: self.creation_time,
|
||||
message_count: self.message_count.load(Ordering::SeqCst),
|
||||
shared: self.shared(),
|
||||
invalidated: self.invalidated(),
|
||||
|
||||
@@ -57,9 +57,9 @@ pub struct Session {
|
||||
/// Has this been created using the fallback key
|
||||
pub created_using_fallback_key: bool,
|
||||
/// When the session was created
|
||||
pub creation_time: Arc<SecondsSinceUnixEpoch>,
|
||||
pub creation_time: SecondsSinceUnixEpoch,
|
||||
/// When the session was last used
|
||||
pub last_use_time: Arc<SecondsSinceUnixEpoch>,
|
||||
pub last_use_time: SecondsSinceUnixEpoch,
|
||||
}
|
||||
|
||||
#[cfg(not(tarpaulin_include))]
|
||||
@@ -83,7 +83,7 @@ impl Session {
|
||||
/// * `message` - The Olm message that should be decrypted.
|
||||
pub async fn decrypt(&mut self, message: &OlmMessage) -> Result<String, DecryptionError> {
|
||||
let plaintext = self.inner.lock().await.decrypt(message)?;
|
||||
self.last_use_time = Arc::new(seconds_since_unix_epoch());
|
||||
self.last_use_time = seconds_since_unix_epoch();
|
||||
Ok(plaintext)
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ impl Session {
|
||||
/// * `plaintext` - The plaintext that should be encrypted.
|
||||
pub(crate) async fn encrypt_helper(&mut self, plaintext: &str) -> OlmMessage {
|
||||
let message = self.inner.lock().await.encrypt(plaintext);
|
||||
self.last_use_time = Arc::new(seconds_since_unix_epoch());
|
||||
self.last_use_time = seconds_since_unix_epoch();
|
||||
message
|
||||
}
|
||||
|
||||
@@ -173,8 +173,8 @@ impl Session {
|
||||
pickle,
|
||||
sender_key: self.sender_key,
|
||||
created_using_fallback_key: self.created_using_fallback_key,
|
||||
creation_time: *self.creation_time,
|
||||
last_use_time: *self.last_use_time,
|
||||
creation_time: self.creation_time,
|
||||
last_use_time: self.last_use_time,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -212,8 +212,8 @@ impl Session {
|
||||
session_id: session_id.into(),
|
||||
created_using_fallback_key: pickle.created_using_fallback_key,
|
||||
sender_key: pickle.sender_key,
|
||||
creation_time: Arc::new(pickle.creation_time),
|
||||
last_use_time: Arc::new(pickle.last_use_time),
|
||||
creation_time: pickle.creation_time,
|
||||
last_use_time: pickle.last_use_time,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ impl SessionManager {
|
||||
|
||||
if let Some(sessions) = sessions {
|
||||
let mut sessions = sessions.lock().await;
|
||||
sessions.sort_by_key(|s| *s.creation_time);
|
||||
sessions.sort_by_key(|s| s.creation_time);
|
||||
|
||||
let session = sessions.get(0);
|
||||
|
||||
@@ -451,7 +451,7 @@ mod tests {
|
||||
|
||||
let bob_device = ReadOnlyDevice::from_account(&bob).await;
|
||||
let time = SystemTime::now() - Duration::from_secs(3601);
|
||||
session.creation_time = Arc::new(SecondsSinceUnixEpoch::from_system_time(time).unwrap());
|
||||
session.creation_time = SecondsSinceUnixEpoch::from_system_time(time).unwrap();
|
||||
|
||||
manager.store.save_devices(&[bob_device.clone()]).await.unwrap();
|
||||
manager.store.save_sessions(&[session]).await.unwrap();
|
||||
|
||||
Reference in New Issue
Block a user