diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/users/create_account_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/users/create_account_handler.rs index 1d7701c7fe..0046a129c5 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/users/create_account_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/users/create_account_handler.rs @@ -229,7 +229,7 @@ pub async fn create_account_handler( maybe_source, maybe_referral_url, maybe_landing_url, - maybe_referral_partner: sanitize_referral_username(request.maybe_referral_username.as_deref()), + maybe_referral_partner: request.maybe_referral_username.as_deref().and_then(sanitize_referral_username), maybe_user_token: None, // NB: This parameter is for internal testing only } ).await; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/users/google_sso/google_sso_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/users/google_sso/google_sso_handler.rs index 7fdbfca7aa..3cf5b5bd17 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/users/google_sso/google_sso_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/users/google_sso/google_sso_handler.rs @@ -243,7 +243,7 @@ pub async fn google_sso_handler( claims_subject: &claims_subject, claims_email_address: &claims_email_address, mysql_connection: &mut mysql_connection, - maybe_referral_partner: sanitize_referral_username(request.maybe_referral_username.as_deref()), + maybe_referral_partner: request.maybe_referral_username.as_deref().and_then(sanitize_referral_username), }).await?; user_token = result.user_token; diff --git a/crates/service/web/storyteller_web/src/util/cleaners/sanitize_referral_username.rs b/crates/service/web/storyteller_web/src/util/cleaners/sanitize_referral_username.rs index c612608005..a60b370df9 100644 --- a/crates/service/web/storyteller_web/src/util/cleaners/sanitize_referral_username.rs +++ b/crates/service/web/storyteller_web/src/util/cleaners/sanitize_referral_username.rs @@ -1,10 +1,10 @@ const MAX_REFERRAL_PARTNER_LENGTH: usize = 32; -/// Sanitize an optional referral username/code for storage. +/// Sanitize a referral username/code for storage +/// in the `users.maybe_referral_partner` column. /// Trims whitespace and truncates to 32 characters. -/// Returns None if the input is None or empty after trimming. -pub fn sanitize_referral_username(maybe_value: Option<&str>) -> Option { - let value = maybe_value?; +/// Returns None if empty after trimming. +pub fn sanitize_referral_username(value: &str) -> Option { let trimmed = value.trim(); if trimmed.is_empty() { return None; @@ -17,35 +17,30 @@ pub fn sanitize_referral_username(maybe_value: Option<&str>) -> Option { mod tests { use super::*; - #[test] - fn none_returns_none() { - assert_eq!(sanitize_referral_username(None), None); - } - #[test] fn empty_returns_none() { - assert_eq!(sanitize_referral_username(Some("")), None); + assert_eq!(sanitize_referral_username(""), None); } #[test] fn whitespace_only_returns_none() { - assert_eq!(sanitize_referral_username(Some(" ")), None); + assert_eq!(sanitize_referral_username(" "), None); } #[test] fn trims_whitespace() { - assert_eq!(sanitize_referral_username(Some(" alice ")), Some("alice".to_string())); + assert_eq!(sanitize_referral_username(" alice "), Some("alice".to_string())); } #[test] fn truncates_long_values() { let long = "a".repeat(50); - let result = sanitize_referral_username(Some(&long)).unwrap(); + let result = sanitize_referral_username(&long).unwrap(); assert_eq!(result.len(), 32); } #[test] fn passes_through_normal_values() { - assert_eq!(sanitize_referral_username(Some("bob123")), Some("bob123".to_string())); + assert_eq!(sanitize_referral_username("bob123"), Some("bob123".to_string())); } }