1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-11-20 12:02:22 +03:00

Record the user session activity for most routes

This commit is contained in:
Quentin Gliech
2023-09-19 17:53:47 +02:00
parent cf5510a1a2
commit 407c78a7be
20 changed files with 219 additions and 23 deletions

View File

@@ -44,7 +44,7 @@ use rand_chacha::ChaChaRng;
use sqlx::PgPool;
use tracing::{info_span, Instrument};
use crate::impl_from_error_for_route;
use crate::{impl_from_error_for_route, BoundActivityTracker};
#[cfg(test)]
mod tests;
@@ -192,6 +192,7 @@ impl IntoResponse for RouteError {
async fn get_requester(
clock: &impl Clock,
activity_tracker: &BoundActivityTracker,
mut repo: BoxRepository,
session_info: SessionInfo,
token: Option<&str>,
@@ -209,6 +210,10 @@ async fn get_requester(
.await?
.ok_or(RouteError::LoadFailed)?;
activity_tracker
.record_oauth2_session(clock, &session)
.await;
// Load the user if there is one
let user = if let Some(user_id) = session.user_id {
let user = repo
@@ -235,6 +240,13 @@ async fn get_requester(
Requester::OAuth2Session(session, user)
} else {
let maybe_session = session_info.load_session(&mut repo).await?;
if let Some(session) = maybe_session.as_ref() {
activity_tracker
.record_browser_session(clock, session)
.await;
}
Requester::from(maybe_session)
};
repo.cancel().await?;
@@ -245,6 +257,7 @@ pub async fn post(
State(schema): State<Schema>,
clock: BoxClock,
repo: BoxRepository,
activity_tracker: BoundActivityTracker,
cookie_jar: CookieJar,
content_type: Option<TypedHeader<ContentType>>,
authorization: Option<TypedHeader<Authorization<Bearer>>>,
@@ -254,7 +267,7 @@ pub async fn post(
.as_ref()
.map(|TypedHeader(Authorization(bearer))| bearer.token());
let (session_info, _cookie_jar) = cookie_jar.session_info();
let requester = get_requester(&clock, repo, session_info, token).await?;
let requester = get_requester(&clock, &activity_tracker, repo, session_info, token).await?;
let content_type = content_type.map(|TypedHeader(h)| h.to_string());
@@ -285,6 +298,7 @@ pub async fn get(
State(schema): State<Schema>,
clock: BoxClock,
repo: BoxRepository,
activity_tracker: BoundActivityTracker,
cookie_jar: CookieJar,
authorization: Option<TypedHeader<Authorization<Bearer>>>,
RawQuery(query): RawQuery,
@@ -293,7 +307,7 @@ pub async fn get(
.as_ref()
.map(|TypedHeader(Authorization(bearer))| bearer.token());
let (session_info, _cookie_jar) = cookie_jar.session_info();
let requester = get_requester(&clock, repo, session_info, token).await?;
let requester = get_requester(&clock, &activity_tracker, repo, session_info, token).await?;
let request =
async_graphql::http::parse_query_string(&query.unwrap_or_default())?.data(requester);