From e6b59a7a7e215fe87256dacbf0852cade8500804 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sat, 13 Jun 2026 04:45:26 -0400 Subject: [PATCH] cleanup require_moderator --- .../beta_keys/create_beta_keys_handler.rs | 9 ++- .../edit_beta_key_distributed_flag_handler.rs | 9 ++- .../beta_keys/edit_beta_key_note_handler.rs | 9 ++- .../upload_pmx_media_file_handler.rs | 9 ++- .../alerts/moderation_send_alert_handler.rs | 9 ++- ...ation_list_debug_logs_for_token_handler.rs | 13 ++-- .../info/moderator_token_info_handler.rs | 9 ++- .../moderation_get_job_by_token_handler.rs | 13 ++-- .../jobs/user/list_user_jobs_handler.rs | 9 ++- ...moderator_list_staff_audit_logs_handler.rs | 13 ++-- ...r_list_subscribing_users_by_signup_date.rs | 9 ++- .../moderator_list_users_by_signup_date.rs | 9 ++- ...er_lookup_by_stripe_customer_id_handler.rs | 9 ++- .../user/moderator_user_lookup_handler.rs | 9 ++- .../user_bans/moderation_ban_user_handler.rs | 13 ++-- .../moderator_change_user_email_handler.rs | 13 ++-- ..._email_address_changes_for_user_handler.rs | 13 ++-- ...derator_edit_user_feature_flags_handler.rs | 13 ++-- ...ll_available_user_feature_flags_handler.rs | 13 ++-- ...derator_list_user_feature_flags_handler.rs | 13 ++-- ...ator_list_global_user_referrals_handler.rs | 13 ++-- ...or_list_user_referrals_for_user_handler.rs | 13 ++-- ...impersonation_requests_for_user_handler.rs | 13 ++-- ..._session_impersonation_requests_handler.rs | 13 ++-- ...r_session_impersonation_request_handler.rs | 13 ++-- ...or_get_user_stripe_customer_ids_handler.rs | 13 ++-- ...wallet_ledger_entries_by_wallet_handler.rs | 9 ++- ...derator_get_wallet_ledger_entry_handler.rs | 9 ++- .../wallets/list_user_wallets_handler.rs | 9 ++- ...or_add_banked_balance_to_wallet_handler.rs | 9 ++- ...oderator_create_wallet_for_user_handler.rs | 9 ++- .../wallets/moderator_get_wallet_handler.rs | 9 ++- .../http_server/session/session_checker.rs | 11 ++++ .../user_session/require_moderator.rs | 59 ++++++++----------- 34 files changed, 259 insertions(+), 159 deletions(-) diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/create_beta_keys_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/create_beta_keys_handler.rs index d2e2a70177..b808eb3aa1 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/create_beta_keys_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/create_beta_keys_handler.rs @@ -14,7 +14,7 @@ use mysql_queries::queries::users::user_profiles::get_user_profile_by_username:: use crate::http_server::web_utils::response_error_helpers::to_simple_json_error; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorError, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorError, RequireModeratorArgs}; use crate::state::server_state::ServerState; const MAXIMUM_KEYS : u32 = 100; @@ -60,7 +60,12 @@ pub async fn create_beta_keys_handler( server_state: web::Data>, ) -> Result { - let user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|err| match err { RequireModeratorError::ServerError => CommonWebError::from_error(err), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/edit_beta_key_distributed_flag_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/edit_beta_key_distributed_flag_handler.rs index 9a98730c68..2b16167319 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/edit_beta_key_distributed_flag_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/edit_beta_key_distributed_flag_handler.rs @@ -14,7 +14,7 @@ use tokens::tokens::w2l_results::W2lResultToken; use crate::http_server::web_utils::response_error_helpers::to_simple_json_error; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorError, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorError, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// For the URL PathInfo @@ -58,7 +58,12 @@ pub async fn edit_beta_key_distributed_flag_handler( server_state: web::Data>, ) -> Result { - let user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|err| match err { RequireModeratorError::ServerError => CommonWebError::from_error(err), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/edit_beta_key_note_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/edit_beta_key_note_handler.rs index 1cba9f8156..d618602328 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/edit_beta_key_note_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/beta_keys/edit_beta_key_note_handler.rs @@ -13,7 +13,7 @@ use tokens::tokens::beta_keys::BetaKeyToken; use crate::http_server::web_utils::response_error_helpers::to_simple_json_error; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorError, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorError, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// For the URL PathInfo @@ -57,7 +57,12 @@ pub async fn edit_beta_key_note_handler( server_state: web::Data>, ) -> Result { - let user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|err| match err { RequireModeratorError::ServerError => CommonWebError::from_error(err), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs index ddc7aedd19..30f2b4ee0a 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_files/upload/upload_pmx/upload_pmx_media_file_handler.rs @@ -23,7 +23,7 @@ use tokens::tokens::media_files::MediaFileToken; use crate::http_server::endpoints::media_files::upload::upload_error::MediaFileUploadError; use crate::http_server::endpoints::media_files::upload::upload_pmx::extract_and_upload_pmx_files::{extract_and_upload_pmx_files, PmxError}; use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorError, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorError, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// Form-multipart request fields. @@ -115,7 +115,12 @@ pub async fn upload_pmx_media_file_handler( // ==================== READ SESSION ==================== // // NB: We require a moderator to upload PMX files. - let user_session = require_moderator(&http_request, &server_state, UseDatabase::FromPool(&mut mysql_connection)) + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &mut *mysql_connection, + phantom: Default::default(), + }) .await .map_err(|err| match err { RequireModeratorError::ServerError => MediaFileUploadError::ServerError, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/alerts/moderation_send_alert_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/alerts/moderation_send_alert_handler.rs index ccf459b71a..3805f24511 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/alerts/moderation_send_alert_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/alerts/moderation_send_alert_handler.rs @@ -14,7 +14,7 @@ use mysql_queries::queries::staff_audit_logs::insert_staff_audit_log::{ use pager::notification::notification_details_builder::NotificationDetailsBuilder; use pager::notification::notification_urgency::NotificationUrgency; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// Send a test alert via the pager system. Moderators only. @@ -35,7 +35,12 @@ pub async fn moderation_send_alert_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|err| { warn!("Moderator check failed: {:?}", err); diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/debug_logs/moderation_list_debug_logs_for_token_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/debug_logs/moderation_list_debug_logs_for_token_handler.rs index 5788806aa6..96181c9f5f 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/debug_logs/moderation_list_debug_logs_for_token_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/debug_logs/moderation_list_debug_logs_for_token_handler.rs @@ -16,7 +16,7 @@ use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -74,11 +74,12 @@ pub async fn moderation_list_debug_logs_for_token_handler( query: web::Query, server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/info/moderator_token_info_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/info/moderator_token_info_handler.rs index 130c76aaeb..f473a8af2f 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/info/moderator_token_info_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/info/moderator_token_info_handler.rs @@ -25,7 +25,7 @@ use tokens::tokens::users::UserToken; use crate::http_server::web_utils::serialize_as_json_error::serialize_as_json_error; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorError, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorError, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// For the URL PathInfo @@ -60,7 +60,12 @@ pub async fn moderator_get_token_info_handler( server_state: web::Data> ) -> Result { - let user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|err| match err { RequireModeratorError::ServerError => CommonWebError::from_error(err), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/moderation_get_job_by_token_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/moderation_get_job_by_token_handler.rs index e1339ad15f..d7a6253095 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/moderation_get_job_by_token_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/moderation_get_job_by_token_handler.rs @@ -17,7 +17,7 @@ use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -92,11 +92,12 @@ pub async fn moderation_get_job_by_token_handler( path: web::Path, server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/user/list_user_jobs_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/user/list_user_jobs_handler.rs index 38a0cea5e3..d1717cd6d8 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/user/list_user_jobs_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/jobs/user/list_user_jobs_handler.rs @@ -13,7 +13,7 @@ use mysql_queries::queries::generic_inference::web::list_user_jobs_for_moderatio use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// List jobs for a user (moderation) @@ -36,7 +36,12 @@ pub async fn list_user_jobs_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/staff_audit_logs/moderator_list_staff_audit_logs_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/staff_audit_logs/moderator_list_staff_audit_logs_handler.rs index af155b23c2..9016ee365b 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/staff_audit_logs/moderator_list_staff_audit_logs_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/staff_audit_logs/moderator_list_staff_audit_logs_handler.rs @@ -14,7 +14,7 @@ use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -76,11 +76,12 @@ pub async fn moderator_list_staff_audit_logs_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_list_subscribing_users_by_signup_date.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_list_subscribing_users_by_signup_date.rs index e9ccf6b629..df79bb4796 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_list_subscribing_users_by_signup_date.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_list_subscribing_users_by_signup_date.rs @@ -15,7 +15,7 @@ use mysql_queries::queries::users::user::list::list_subscribing_users_by_signup_ }; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// List subscribing users by signup date (descending), for moderators. @@ -36,7 +36,12 @@ pub async fn moderator_list_subscribing_users_by_signup_date_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_list_users_by_signup_date.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_list_users_by_signup_date.rs index c2635b5c7a..b69c4bfbb9 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_list_users_by_signup_date.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_list_users_by_signup_date.rs @@ -15,7 +15,7 @@ use mysql_queries::queries::users::user::list::list_users_by_signup_date_for_mod }; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// List users by signup date (descending), for moderators. @@ -36,7 +36,12 @@ pub async fn moderator_list_users_by_signup_date_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_by_stripe_customer_id_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_by_stripe_customer_id_handler.rs index cf4359f9a5..b22bbe6f71 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_by_stripe_customer_id_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_by_stripe_customer_id_handler.rs @@ -12,7 +12,7 @@ use artcraft_api_defs::moderation::user::user_lookup_by_stripe_customer_id::{ use mysql_queries::queries::users::user_subscriptions::lookup_users_by_stripe_customer_id::lookup_users_by_stripe_customer_id; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// Moderator User Lookup by Stripe Customer ID @@ -33,7 +33,12 @@ pub async fn moderator_user_lookup_by_stripe_customer_id_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_handler.rs index 12c6063e0c..19255c9048 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user/moderator_user_lookup_handler.rs @@ -17,7 +17,7 @@ use mysql_queries::queries::users::user::get::lookup_user_for_moderation::{ use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; const LEGACY_USER_TOKEN_PREFIX: &str = "U:"; @@ -40,7 +40,12 @@ pub async fn moderator_user_lookup_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_bans/moderation_ban_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_bans/moderation_ban_user_handler.rs index 59ee1922c2..1b884c6869 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_bans/moderation_ban_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_bans/moderation_ban_user_handler.rs @@ -19,7 +19,7 @@ use mysql_queries::queries::users::user_profiles::get_user_profile_by_username:: use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -61,11 +61,12 @@ pub async fn moderation_ban_user_handler( ) -> Result, CommonWebError> { // 1. Require moderator with ban permissions. - let user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_emails/moderator_change_user_email_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_emails/moderator_change_user_email_handler.rs index 1975cdce75..87f3d2ce10 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_emails/moderator_change_user_email_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_emails/moderator_change_user_email_handler.rs @@ -25,7 +25,7 @@ use users::email::validate_email_address_format::validate_email_address_format; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -71,11 +71,12 @@ pub async fn moderator_change_user_email_handler( ) -> Result, CommonWebError> { // 1. Require moderator. - let user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_emails/moderator_list_email_address_changes_for_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_emails/moderator_list_email_address_changes_for_user_handler.rs index 249a4e2da6..16523aaeda 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_emails/moderator_list_email_address_changes_for_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_emails/moderator_list_email_address_changes_for_user_handler.rs @@ -16,7 +16,7 @@ use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -103,11 +103,12 @@ pub async fn moderator_list_email_address_changes_for_user_handler( ) -> Result, CommonWebError> { // 1. Require moderator. - let _user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_edit_user_feature_flags_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_edit_user_feature_flags_handler.rs index d208ecca2e..7f2902f6f2 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_edit_user_feature_flags_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_edit_user_feature_flags_handler.rs @@ -28,7 +28,7 @@ use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::response_error_helpers::to_simple_json_error; use crate::http_server::web_utils::response_success_helpers::simple_json_success; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; use artcraft_api_defs::common::responses::simple_generic_json_success::SimpleGenericJsonSuccess; @@ -89,11 +89,12 @@ pub async fn moderator_edit_user_feature_flags_handler( redis_pool: Data>, ) -> Result { - let user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_list_all_available_user_feature_flags_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_list_all_available_user_feature_flags_handler.rs index 137954a853..d5b6e46d7b 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_list_all_available_user_feature_flags_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_list_all_available_user_feature_flags_handler.rs @@ -9,7 +9,7 @@ use enums::by_table::users::user_feature_flag::UserFeatureFlag; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -49,11 +49,12 @@ pub async fn moderator_list_all_available_user_feature_flags_handler( http_request: HttpRequest, server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_list_user_feature_flags_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_list_user_feature_flags_handler.rs index 3d840a31db..f9d2723da7 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_list_user_feature_flags_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_feature_flags/moderator_list_user_feature_flags_handler.rs @@ -13,7 +13,7 @@ use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::session::lookup::user_session_feature_flags::UserSessionFeatureFlags; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -56,11 +56,12 @@ pub async fn moderator_list_user_feature_flags_handler( path: Path, server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_global_user_referrals_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_global_user_referrals_handler.rs index 47cd65028c..a4e8f745be 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_global_user_referrals_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_global_user_referrals_handler.rs @@ -14,7 +14,7 @@ use mysql_queries::queries::user_referrals::list_global_user_referrals::{ use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -42,11 +42,12 @@ pub async fn moderator_list_global_user_referrals_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_user_referrals_for_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_user_referrals_for_user_handler.rs index 480aa54df3..195aaf60eb 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_user_referrals_for_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_referrals/moderator_list_user_referrals_for_user_handler.rs @@ -17,7 +17,7 @@ use mysql_queries::queries::user_referrals::list_user_referrals_for_user::{ use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -47,11 +47,12 @@ pub async fn moderator_list_user_referrals_for_user_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_list_user_session_impersonation_requests_for_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_list_user_session_impersonation_requests_for_user_handler.rs index 70f602176a..1092604e52 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_list_user_session_impersonation_requests_for_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_list_user_session_impersonation_requests_for_user_handler.rs @@ -13,7 +13,7 @@ use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -81,11 +81,12 @@ pub async fn moderator_list_user_session_impersonation_requests_for_user_handler server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_list_user_session_impersonation_requests_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_list_user_session_impersonation_requests_handler.rs index 860d607635..3e1ff676ee 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_list_user_session_impersonation_requests_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_list_user_session_impersonation_requests_handler.rs @@ -13,7 +13,7 @@ use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -75,11 +75,12 @@ pub async fn moderator_list_user_session_impersonation_requests_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_user_session_impersonation_request_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_user_session_impersonation_request_handler.rs index 5d5ae5e8d9..767b1e57a5 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_user_session_impersonation_request_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_sessions/moderator_user_session_impersonation_request_handler.rs @@ -26,7 +26,7 @@ use mysql_queries::queries::users::user::get::lookup_user_for_moderation::{ use crate::http_server::common_responses::common_web_error::CommonWebError; use crate::http_server::web_utils::user_session::require_moderator::{ - require_moderator, UseDatabase, + require_moderator, RequireModeratorArgs, }; use crate::state::server_state::ServerState; @@ -71,11 +71,12 @@ pub async fn moderator_user_session_impersonation_request_handler( ) -> Result, CommonWebError> { // 1. Require moderator session. - let user_session = require_moderator( - &http_request, - &server_state, - UseDatabase::GrabNewConnection, - ).await.map_err(|err| { + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }).await.map_err(|err| { warn!("Moderator check failed: {:?}", err); CommonWebError::NotAuthorized })?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_stripe_data/moderator_get_user_stripe_customer_ids_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_stripe_data/moderator_get_user_stripe_customer_ids_handler.rs index 3701f7d84e..b7b7f8a651 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_stripe_data/moderator_get_user_stripe_customer_ids_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/user_stripe_data/moderator_get_user_stripe_customer_ids_handler.rs @@ -16,7 +16,7 @@ use mysql_queries::queries::users::user_subscriptions::list_stripe_customer_ids_ use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// Get all stripe customer ids on file for a user (moderation) @@ -43,11 +43,12 @@ pub async fn moderator_get_user_stripe_customer_ids_handler( .acquire() .await?; - let _moderator_session = require_moderator( - &http_request, - &server_state, - UseDatabase::FromPool(&mut mysql_connection), - ) + let _moderator_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &mut *mysql_connection, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/list_wallet_ledger_entries_by_wallet_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/list_wallet_ledger_entries_by_wallet_handler.rs index bb0b11e3b5..b77c23f892 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/list_wallet_ledger_entries_by_wallet_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/list_wallet_ledger_entries_by_wallet_handler.rs @@ -13,7 +13,7 @@ use mysql_queries::queries::wallet_ledger_entries::list_wallet_ledger_entries_by use tokens::tokens::wallets::WalletToken; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// List wallet ledger entries by wallet token (moderation) @@ -36,7 +36,12 @@ pub async fn list_wallet_ledger_entries_by_wallet_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/moderator_get_wallet_ledger_entry_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/moderator_get_wallet_ledger_entry_handler.rs index 419035d852..a18e7f98b3 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/moderator_get_wallet_ledger_entry_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallet_ledger_entries/moderator_get_wallet_ledger_entry_handler.rs @@ -13,7 +13,7 @@ use mysql_queries::queries::wallet_ledger_entries::get_wallet_ledger_entry_for_m use tokens::tokens::wallet_ledger_entries::WalletLedgerEntryToken; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// Get a single wallet ledger entry by token (moderation) @@ -36,7 +36,12 @@ pub async fn moderator_get_wallet_ledger_entry_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/list_user_wallets_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/list_user_wallets_handler.rs index 2ef3f96d01..29b04acd42 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/list_user_wallets_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/list_user_wallets_handler.rs @@ -13,7 +13,7 @@ use mysql_queries::queries::wallets::list_user_wallets_for_moderation::list_user use tokens::tokens::users::UserToken; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// List wallets for a user (moderation) @@ -36,7 +36,12 @@ pub async fn list_user_wallets_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_add_banked_balance_to_wallet_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_add_banked_balance_to_wallet_handler.rs index b26d042503..79df7fa7d4 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_add_banked_balance_to_wallet_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_add_banked_balance_to_wallet_handler.rs @@ -21,7 +21,7 @@ use mysql_queries::queries::wallets::add_durable_banked_balance_to_wallet::add_d use tokens::tokens::wallets::WalletToken; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// Add banked credits to a wallet (moderation) @@ -46,7 +46,12 @@ pub async fn moderator_add_banked_balance_to_wallet_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|err| { warn!("Moderator check failed: {:?}", err); diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_create_wallet_for_user_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_create_wallet_for_user_handler.rs index da23d806d7..69685a6d04 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_create_wallet_for_user_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_create_wallet_for_user_handler.rs @@ -15,7 +15,7 @@ use mysql_queries::queries::wallets::create_new_wallet_for_owner_user::create_ne use mysql_queries::queries::wallets::find_primary_wallet_token_for_owner::find_primary_wallet_token_for_owner_using_connection; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// Create a wallet for a user (moderation) @@ -37,7 +37,12 @@ pub async fn moderator_create_wallet_for_user_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_get_wallet_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_get_wallet_handler.rs index 179dde9f6c..e164aa6453 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_get_wallet_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/moderation/wallets/moderator_get_wallet_handler.rs @@ -13,7 +13,7 @@ use mysql_queries::queries::wallets::get_wallet_for_moderation::get_wallet_for_m use tokens::tokens::wallets::WalletToken; use crate::http_server::common_responses::common_web_error::CommonWebError; -use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, UseDatabase}; +use crate::http_server::web_utils::user_session::require_moderator::{require_moderator, RequireModeratorArgs}; use crate::state::server_state::ServerState; /// Get a single wallet by token (moderation) @@ -36,7 +36,12 @@ pub async fn moderator_get_wallet_handler( server_state: web::Data>, ) -> Result, CommonWebError> { - let _user_session = require_moderator(&http_request, &server_state, UseDatabase::GrabNewConnection) + let _user_session = require_moderator(RequireModeratorArgs { + http_request: &http_request, + server_state: &server_state, + mysql_executor: &server_state.mysql_pool, + phantom: Default::default(), + }) .await .map_err(|_| CommonWebError::NotAuthorized)?; diff --git a/crates/service/web/storyteller_web/src/http_server/session/session_checker.rs b/crates/service/web/storyteller_web/src/http_server/session/session_checker.rs index 7d3aa08b9d..ab6f51910b 100644 --- a/crates/service/web/storyteller_web/src/http_server/session/session_checker.rs +++ b/crates/service/web/storyteller_web/src/http_server/session/session_checker.rs @@ -140,6 +140,17 @@ impl SessionChecker { } + pub async fn maybe_get_user_session_from_executor<'e, 'c : 'e, E>( + &self, + request: &HttpRequest, + mysql_executor: E, + ) -> Result, SessionCheckerError> + where E: 'e + Executor<'c, Database = MySql> + { + self.do_user_session_lookup_and_cookie_decode(request, mysql_executor).await + } + + async fn do_user_session_lookup_and_cookie_decode<'e, 'c : 'e, E>( &self, request: &HttpRequest, diff --git a/crates/service/web/storyteller_web/src/http_server/web_utils/user_session/require_moderator.rs b/crates/service/web/storyteller_web/src/http_server/web_utils/user_session/require_moderator.rs index 7605361929..fdb2e28458 100644 --- a/crates/service/web/storyteller_web/src/http_server/web_utils/user_session/require_moderator.rs +++ b/crates/service/web/storyteller_web/src/http_server/web_utils/user_session/require_moderator.rs @@ -1,15 +1,30 @@ use std::error::Error; use std::fmt::{Display, Formatter}; +use std::marker::PhantomData; use actix_web::HttpRequest; use log::warn; -use sqlx::pool::PoolConnection; -use sqlx::MySql; +use sqlx::{Executor, MySql}; use mysql_queries::queries::users::user_sessions::get_user_session_by_token::SessionUserRecord; use crate::state::server_state::ServerState; +pub struct RequireModeratorArgs<'e, 'c, E> + where E: 'e + Executor<'c, Database = MySql> +{ + pub http_request: &'e HttpRequest, + pub server_state: &'e ServerState, + + /// The executor to run the session lookup against. Pass `&server_state.mysql_pool` to + /// grab a fresh connection, or an in-flight connection (`&mut *connection`) to reuse one + /// the handler already holds. + pub mysql_executor: E, + + // NB: phantom can be passed as `Default::default()`. + pub phantom: PhantomData<&'c E>, +} + #[derive(Debug)] pub enum RequireModeratorError { ServerError, @@ -27,40 +42,14 @@ impl Display for RequireModeratorError { impl Error for RequireModeratorError {} -pub enum UseDatabase<'a> { - GrabNewConnection, - FromPool(&'a mut PoolConnection), -} - -pub async fn require_moderator( - http_request: &HttpRequest, - server_state: &ServerState, - database: UseDatabase<'_>, -) -> Result { - // NB: Save a reference to a connection we open in a branch until the function ends. - let mut saved_connection = None; - - let mysql_connection = match database { - UseDatabase::GrabNewConnection => { - let mut connection = server_state.mysql_pool - .acquire() - .await - .map_err(|err| { - warn!("MySql pool error: {:?}", err); - RequireModeratorError::ServerError - })?; - - saved_connection = Some(connection); - - // NB: We just saved it, so it shouldn't error. Safer than unwrap/expect. - saved_connection.as_mut().ok_or(RequireModeratorError::ServerError)? - }, - UseDatabase::FromPool(pool) => pool, - }; - - let maybe_user_session = server_state +pub async fn require_moderator<'e, 'c : 'e, E>( + args: RequireModeratorArgs<'e, 'c, E>, +) -> Result + where E: 'e + Executor<'c, Database = MySql> +{ + let maybe_user_session = args.server_state .session_checker - .maybe_get_user_session_from_connection(&http_request, mysql_connection) + .maybe_get_user_session_from_executor(args.http_request, args.mysql_executor) .await .map_err(|e| { warn!("Session checker error: {:?}", e);