clear session cache after beta key enroll

This commit is contained in:
Brandon Thomas committed 2024-05-20 15:11:34 -04:00
1 parent 836b4396f9
commit d14400289a
3 files changed
+34 -1

No files matched your search

@@ -38,6 +38,7 @@ use crate::http_server::endpoints::voice_designer::inference::enqueue_tts_reques
use crate::http_server::web_utils::require_moderator::RequireModeratorError;
use crate::http_server::web_utils::require_user_session::{require_user_session, RequireUserSessionError};
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
use crate::http_server::web_utils::try_delete_session_cache::try_delete_session_cache;
use crate::server_state::ServerState;
#[derive(Deserialize, ToSchema)]
@@ -155,6 +156,8 @@ pub async fn redeem_beta_key_handler(
}
}
try_delete_session_cache(&http_request, &server_state);
let response = RedeemBetaKeySuccessResponse {
success: true,
};
@@ -6,4 +6,5 @@ pub mod require_moderator;
pub mod require_user_session;
pub mod response_error_helpers;
pub mod response_success_helpers;
pub mod serialize_as_json_error;
pub mod serialize_as_json_error;
pub mod try_delete_session_cache;
@@ -0,0 +1,29 @@
use actix_web::HttpRequest;
use log::info;
use redis_common::redis_cache_keys::RedisCacheKeys;
use crate::server_state::ServerState;
pub fn try_delete_session_cache(
http_request: &HttpRequest,
server_state: &ServerState,
) {
// TODO: Clear Redis cache of sessions
// Unfortunately we don't yet have an index of user_token => session_tokens[] outside the DB.
// For now, a hacky solution is just to delete the cache under the current user.
// This makes sense for non-mods and should solve 95% of cases.
let session_token = match server_state.session_checker.forgiving_get_session_token(&http_request) {
None => return,
Some(session_token) => session_token,
};
if let Ok(mut redis_ttl_cache) = server_state.redis_ttl_cache.get_connection() {
info!("Delete session cache for user.");
let keys = vec![
RedisCacheKeys::session_record_user(&session_token),
RedisCacheKeys::session_record_light(&session_token),
];
for key in keys.iter() {
let _r = redis_ttl_cache.delete_from_cache(key).ok();
}
}
}