more efficient session check

This commit is contained in:
Brandon Thomas committed 2026-03-30 20:23:02 -04:00
1 parent 0d02aa6194
commit 1666ac2655
4 files changed
+46 -5

No files matched your search

@@ -8,7 +8,7 @@ use utoipa::ToSchema;
use mysql_queries::queries::generic_inference::web::dismiss_finished_jobs_for_user::dismiss_finished_jobs_for_user;
use crate::http_server::common_responses::common_web_error::CommonWebError;
use crate::http_server::web_utils::user_session::require_user_session::require_user_session;
use crate::http_server::web_utils::user_session::require_user_session_using_connection::require_user_session_using_connection;
use crate::state::server_state::ServerState;
#[derive(Serialize, ToSchema)]
@@ -33,10 +33,6 @@ pub async fn dismiss_finished_session_jobs_handler(
http_request: HttpRequest,
server_state: web::Data<Arc<ServerState>>) -> Result<Json<DismissFinishedSessionJobsSuccessResponse>, CommonWebError>
{
let user_session = require_user_session(&http_request, &server_state)
.await?;
// TODO(bt,2024-06-16): Reuse connection
let mut mysql_connection = server_state.mysql_pool.acquire()
.await
.map_err(|e| {
@@ -44,6 +40,10 @@ pub async fn dismiss_finished_session_jobs_handler(
CommonWebError::ServerError
})?;
let user_session = require_user_session_using_connection(
&http_request, &server_state.session_checker, &mut mysql_connection)
.await?;
dismiss_finished_jobs_for_user(&mut mysql_connection, &user_session.user_token)
.await
.map_err(|err| {
@@ -1,3 +1,4 @@
pub mod require_moderator;
pub mod require_user_session;
pub mod require_user_session_extended_using_connection;
pub mod require_user_session_using_connection;
@@ -25,6 +25,7 @@ impl Display for RequireUserSessionError {
impl Error for RequireUserSessionError {}
#[deprecated(note = "Use require_user_session_using_connection instead, which reuses an existing connection")]
pub async fn require_user_session(
http_request: &HttpRequest,
server_state: &ServerState,
@@ -0,0 +1,39 @@
use actix_web::HttpRequest;
use log::warn;
use sqlx::pool::PoolConnection;
use sqlx::MySql;
use mysql_queries::queries::users::user_sessions::get_user_session_by_token::SessionUserRecord;
use crate::http_server::session::session_checker::SessionChecker;
use crate::http_server::web_utils::user_session::require_user_session::RequireUserSessionError;
pub async fn require_user_session_using_connection(
http_request: &HttpRequest,
session_checker: &SessionChecker,
mysql_connection: &mut PoolConnection<MySql>,
) -> Result<SessionUserRecord, RequireUserSessionError> {
let maybe_user_session = session_checker
.maybe_get_user_session_from_connection(http_request, mysql_connection)
.await
.map_err(|e| {
warn!("Session checker error: {:?}", e);
RequireUserSessionError::ServerError
})?;
let user_session = match maybe_user_session {
Some(session) => session,
None => {
warn!("not logged in");
return Err(RequireUserSessionError::NotAuthorized);
}
};
if user_session.is_banned {
warn!("user is banned: {:?}", user_session.user_token.as_str());
return Err(RequireUserSessionError::NotAuthorized);
}
Ok(user_session)
}