1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-08-06 06:02:40 +03:00

storage: add a filter by last active time on browser sessions

This commit is contained in:
Quentin Gliech
2024-07-18 10:12:50 +02:00
parent f083ccf333
commit c6b759c56d
2 changed files with 40 additions and 2 deletions

View File

@@ -1,4 +1,4 @@
// Copyright 2022, 2023 The Matrix.org Foundation C.I.C. // Copyright 2022-2024 The Matrix.org Foundation C.I.C.
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
@@ -147,6 +147,12 @@ impl crate::filter::Filter for BrowserSessionFilter<'_> {
Expr::col((UserSessions::Table, UserSessions::FinishedAt)).is_not_null() Expr::col((UserSessions::Table, UserSessions::FinishedAt)).is_not_null()
} }
})) }))
.add_option(self.last_active_after().map(|last_active_after| {
Expr::col((UserSessions::Table, UserSessions::LastActiveAt)).gt(last_active_after)
}))
.add_option(self.last_active_before().map(|last_active_before| {
Expr::col((UserSessions::Table, UserSessions::LastActiveAt)).lt(last_active_before)
}))
} }
} }

View File

@@ -1,4 +1,4 @@
// Copyright 2022, 2023 The Matrix.org Foundation C.I.C. // Copyright 2022-2024 The Matrix.org Foundation C.I.C.
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
@@ -45,6 +45,8 @@ impl BrowserSessionState {
pub struct BrowserSessionFilter<'a> { pub struct BrowserSessionFilter<'a> {
user: Option<&'a User>, user: Option<&'a User>,
state: Option<BrowserSessionState>, state: Option<BrowserSessionState>,
last_active_before: Option<DateTime<Utc>>,
last_active_after: Option<DateTime<Utc>>,
} }
impl<'a> BrowserSessionFilter<'a> { impl<'a> BrowserSessionFilter<'a> {
@@ -67,6 +69,36 @@ impl<'a> BrowserSessionFilter<'a> {
self.user self.user
} }
/// Only return sessions with a last active time before the given time
#[must_use]
pub fn with_last_active_before(mut self, last_active_before: DateTime<Utc>) -> Self {
self.last_active_before = Some(last_active_before);
self
}
/// Only return sessions with a last active time after the given time
#[must_use]
pub fn with_last_active_after(mut self, last_active_after: DateTime<Utc>) -> Self {
self.last_active_after = Some(last_active_after);
self
}
/// Get the last active before filter
///
/// Returns [`None`] if no client filter was set
#[must_use]
pub fn last_active_before(&self) -> Option<DateTime<Utc>> {
self.last_active_before
}
/// Get the last active after filter
///
/// Returns [`None`] if no client filter was set
#[must_use]
pub fn last_active_after(&self) -> Option<DateTime<Utc>> {
self.last_active_after
}
/// Only return active browser sessions /// Only return active browser sessions
#[must_use] #[must_use]
pub fn active_only(mut self) -> Self { pub fn active_only(mut self) -> Self {