diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs index 0c378f994e..a3cab8a1e8 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/redeem_beta_key_handler.rs @@ -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, }; diff --git a/crates/service/web/storyteller_web/src/http_server/web_utils/mod.rs b/crates/service/web/storyteller_web/src/http_server/web_utils/mod.rs index ae531e3f9a..3b56accb39 100644 --- a/crates/service/web/storyteller_web/src/http_server/web_utils/mod.rs +++ b/crates/service/web/storyteller_web/src/http_server/web_utils/mod.rs @@ -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; \ No newline at end of file +pub mod serialize_as_json_error; +pub mod try_delete_session_cache; \ No newline at end of file diff --git a/crates/service/web/storyteller_web/src/http_server/web_utils/try_delete_session_cache.rs b/crates/service/web/storyteller_web/src/http_server/web_utils/try_delete_session_cache.rs new file mode 100644 index 0000000000..06fdc4562d --- /dev/null +++ b/crates/service/web/storyteller_web/src/http_server/web_utils/try_delete_session_cache.rs @@ -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(); + } + } +}