chore: move the session_changer_sender field into AuthCtx

This commit is contained in:
Benjamin Bouvier
2023-09-05 16:11:54 +02:00
parent 7db45a4b23
commit 6c55767c73
5 changed files with 13 additions and 12 deletions

View File

@@ -14,13 +14,13 @@
use matrix_sdk_base::SessionMeta;
use ruma::api::client::discovery::discover_homeserver::AuthenticationServerInfo;
use tokio::sync::Mutex;
use tokio::sync::{broadcast, Mutex};
#[cfg(feature = "experimental-oidc")]
use crate::oidc::{self, Oidc, OidcAuthData};
use crate::{
matrix_auth::{self, MatrixAuth, MatrixAuthData},
RefreshTokenError,
RefreshTokenError, SessionChange,
};
/// All the data relative to authentication, and that must be shared between a client and all its
@@ -36,6 +36,11 @@ pub(crate) struct AuthCtx {
/// Lock making sure we're only doing one token refresh at a time.
pub(crate) refresh_token_lock: Mutex<Result<(), RefreshTokenError>>,
/// Session change publisher. Allows the subscriber to handle changes to the
/// session such as logging out when the access token is invalid or
/// persisting updates to the access/refresh tokens.
pub(crate) session_change_sender: broadcast::Sender<SessionChange>,
}
/// An enum over all the possible authentication APIs.

View File

@@ -21,7 +21,7 @@ use ruma::{
OwnedServerName, ServerName,
};
use thiserror::Error;
use tokio::sync::Mutex;
use tokio::sync::{broadcast, Mutex};
use tracing::{debug, field::debug, instrument, Span};
use url::Url;
@@ -427,6 +427,7 @@ impl ClientBuilder {
authentication_server_info,
handle_refresh_tokens: self.handle_refresh_tokens,
refresh_token_lock: Mutex::new(Ok(())),
session_change_sender: broadcast::Sender::new(1),
});
let inner = Arc::new(ClientInner::new(

View File

@@ -192,10 +192,6 @@ pub(crate) struct ClientInner {
/// wait for the sync to get the data to fetch a room object from the state
/// store.
pub(crate) sync_beat: event_listener::Event,
/// Session change publisher. Allows the subscriber to handle changes to the
/// session such as logging out when the access token is invalid or
/// persisting updates to the access/refresh tokens.
pub(crate) session_change_sender: broadcast::Sender<SessionChange>,
/// Authentication data to keep in memory.
pub(crate) auth_data: OnceCell<AuthData>,
@@ -234,8 +230,6 @@ impl ClientInner {
server_versions: Option<Box<[MatrixVersion]>>,
respect_login_well_known: bool,
) -> Self {
let session_change_sender = broadcast::Sender::new(1);
Self {
homeserver: RwLock::new(homeserver),
auth_ctx,
@@ -257,7 +251,6 @@ impl ClientInner {
sync_gap_broadcast_txs: Default::default(),
respect_login_well_known,
sync_beat: event_listener::Event::new(),
session_change_sender,
auth_data: Default::default(),
#[cfg(feature = "e2e-encryption")]
cross_process_crypto_store_lock: OnceCell::new(),
@@ -1360,6 +1353,7 @@ impl Client {
info!("An unknown token error has been encountered.");
_ = self
.inner
.auth_ctx
.session_change_sender
.send(SessionChange::UnknownToken { soft_logout: *soft_logout });
}
@@ -1935,7 +1929,7 @@ impl Client {
/// Subscribes a new receiver to client SessionChange broadcasts.
pub fn subscribe_to_session_changes(&self) -> broadcast::Receiver<SessionChange> {
let broadcast = &self.inner.session_change_sender;
let broadcast = &self.inner.auth_ctx.session_change_sender;
broadcast.subscribe()
}

View File

@@ -476,6 +476,7 @@ impl MatrixAuth {
_ = self
.client
.inner
.auth_ctx
.session_change_sender
.send(SessionChange::TokensRefreshed);

View File

@@ -903,7 +903,7 @@ impl Oidc {
latest_id_token,
});
_ = self.client.inner.session_change_sender.send(SessionChange::TokensRefreshed);
_ = self.client.inner.auth_ctx.session_change_sender.send(SessionChange::TokensRefreshed);
Ok(response)
}