From d892ee7af087b43c87f98c5d7a43eebafb91b5b6 Mon Sep 17 00:00:00 2001 From: Sakil Mostak <73734619+Sakilmostak@users.noreply.github.com> Date: Thu, 3 Apr 2025 18:49:08 +0530 Subject: [PATCH] revert: implement `NameType` for name validation (#6734) (#7717) --- crates/api_models/src/customers.rs | 2 +- crates/api_models/src/mandates.rs | 8 +- crates/api_models/src/payment_methods.rs | 71 ++++--- crates/api_models/src/payments.rs | 105 ++++----- .../src/payments/additional_info.rs | 14 +- crates/api_models/src/payouts.rs | 2 +- crates/cards/tests/basic.rs | 4 +- crates/common_utils/src/types.rs | 201 +----------------- .../src/connectors/adyen/transformers.rs | 6 +- .../authorizedotnet/transformers.rs | 12 +- .../connectors/bankofamerica/transformers.rs | 4 +- .../src/connectors/bluesnap/transformers.rs | 4 +- .../connectors/cybersource/transformers.rs | 5 +- .../src/connectors/dlocal/transformers.rs | 6 +- .../src/connectors/nuvei/transformers.rs | 6 +- .../src/connectors/paypal/transformers.rs | 4 +- .../src/connectors/trustpay/transformers.rs | 6 +- .../src/connectors/wellsfargo/transformers.rs | 4 +- .../src/connectors/worldline/transformers.rs | 6 +- crates/hyperswitch_connectors/src/utils.rs | 43 ++-- .../hyperswitch_domain_models/src/address.rs | 14 +- .../src/bulk_tokenization.rs | 12 +- .../src/payment_method_data.rs | 36 ++-- .../src/router_data.rs | 2 +- .../src/router_request_types/fraud_check.rs | 2 +- .../compatibility/stripe/customers/types.rs | 2 +- .../stripe/payment_intents/types.rs | 8 +- .../stripe/setup_intents/types.rs | 4 +- .../connector/netcetera/netcetera_types.rs | 10 +- .../src/connector/payone/transformers.rs | 1 - .../connector/riskified/transformers/api.rs | 8 +- .../connector/signifyd/transformers/api.rs | 2 +- .../src/connector/stripe/transformers.rs | 8 +- .../connector/stripe/transformers/connect.rs | 4 +- crates/router/src/connector/utils.rs | 27 ++- crates/router/src/core/customers.rs | 2 +- crates/router/src/core/locker_migration.rs | 2 +- crates/router/src/core/payment_methods.rs | 3 +- .../router/src/core/payment_methods/cards.rs | 46 ++-- .../payment_methods/network_tokenization.rs | 4 +- .../src/core/payment_methods/tokenize.rs | 12 +- .../payment_methods/tokenize/card_executor.rs | 5 +- .../tokenize/payment_method_executor.rs | 5 +- .../src/core/payment_methods/transformers.rs | 12 +- .../router/src/core/payment_methods/vault.rs | 8 +- crates/router/src/core/payments/helpers.rs | 24 +-- crates/router/src/core/payouts/helpers.rs | 4 +- .../core/unified_authentication_service.rs | 2 +- crates/router/src/core/utils.rs | 16 +- crates/router/src/types/api/payments.rs | 8 +- crates/router/src/types/transformers.rs | 42 +--- crates/router/src/utils.rs | 16 +- crates/router/tests/connectors/aci.rs | 24 +-- crates/router/tests/connectors/adyen.rs | 20 +- crates/router/tests/connectors/airwallex.rs | 15 +- crates/router/tests/connectors/bitpay.rs | 8 +- crates/router/tests/connectors/bluesnap.rs | 8 +- crates/router/tests/connectors/coinbase.rs | 8 +- crates/router/tests/connectors/cryptopay.rs | 8 +- crates/router/tests/connectors/cybersource.rs | 8 +- crates/router/tests/connectors/fiserv.rs | 8 +- crates/router/tests/connectors/forte.rs | 8 +- crates/router/tests/connectors/iatapay.rs | 8 +- .../router/tests/connectors/multisafepay.rs | 8 +- crates/router/tests/connectors/opennode.rs | 8 +- crates/router/tests/connectors/payme.rs | 8 +- crates/router/tests/connectors/rapyd.rs | 16 +- crates/router/tests/connectors/trustpay.rs | 8 +- crates/router/tests/connectors/utils.rs | 15 +- crates/router/tests/connectors/worldline.rs | 16 +- crates/router/tests/payments.rs | 16 +- crates/router/tests/payments2.rs | 16 +- 72 files changed, 364 insertions(+), 734 deletions(-) diff --git a/crates/api_models/src/customers.rs b/crates/api_models/src/customers.rs index a6ffb55e61..eb61cae6e4 100644 --- a/crates/api_models/src/customers.rs +++ b/crates/api_models/src/customers.rs @@ -18,7 +18,7 @@ pub struct CustomerRequest { pub merchant_id: id_type::MerchantId, /// The customer's name #[schema(max_length = 255, value_type = Option, example = "Jon Test")] - pub name: Option, + pub name: Option>, /// The customer's email address #[schema(value_type = Option, max_length = 255, example = "JonTest@test.com")] pub email: Option, diff --git a/crates/api_models/src/mandates.rs b/crates/api_models/src/mandates.rs index 4c0b8d4d18..2d61a63098 100644 --- a/crates/api_models/src/mandates.rs +++ b/crates/api_models/src/mandates.rs @@ -57,7 +57,7 @@ pub struct MandateCardDetails { pub card_exp_year: Option>, /// The card holder name #[schema(value_type = Option)] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// The token from card locker #[schema(value_type = Option)] pub card_token: Option>, @@ -79,7 +79,7 @@ pub struct MandateCardDetails { pub card_type: Option, /// The nick_name of the card holder #[schema(value_type = Option)] - pub nick_name: Option, + pub nick_name: Option>, } #[derive(Clone, Debug, Deserialize, ToSchema, Serialize)] @@ -151,7 +151,7 @@ pub struct NetworkTransactionIdAndCardDetails { /// The card holder's name #[schema(value_type = String, example = "John Test")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// The name of the issuer of card #[schema(example = "chase")] @@ -172,7 +172,7 @@ pub struct NetworkTransactionIdAndCardDetails { /// The card holder's nick name #[schema(value_type = Option, example = "John Test")] - pub nick_name: Option, + pub nick_name: Option>, /// The network transaction ID provided by the card network during a CIT (Customer Initiated Transaction), /// where `setup_future_usage` is set to `off_session`. diff --git a/crates/api_models/src/payment_methods.rs b/crates/api_models/src/payment_methods.rs index a06fc07fe7..3590537a08 100644 --- a/crates/api_models/src/payment_methods.rs +++ b/crates/api_models/src/payment_methods.rs @@ -548,11 +548,11 @@ pub struct CardDetail { /// Card Holder Name #[schema(value_type = String,example = "John Doe")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// Card Holder's Nick Name #[schema(value_type = Option,example = "John Doe")] - pub nick_name: Option, + pub nick_name: Option>, /// Card Issuing Country pub card_issuing_country: Option, @@ -608,11 +608,11 @@ pub struct CardDetail { /// Card Holder Name #[schema(value_type = String,example = "John Doe")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// Card Holder's Nick Name #[schema(value_type = Option,example = "John Doe")] - pub nick_name: Option, + pub nick_name: Option>, /// Card Issuing Country #[schema(value_type = CountryAlpha2)] @@ -651,11 +651,11 @@ pub struct MigrateCardDetail { /// Card Holder Name #[schema(value_type = String,example = "John Doe")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// Card Holder's Nick Name #[schema(value_type = Option,example = "John Doe")] - pub nick_name: Option, + pub nick_name: Option>, /// Card Issuing Country pub card_issuing_country: Option, @@ -688,11 +688,11 @@ pub struct MigrateNetworkTokenData { /// Card Holder Name #[schema(value_type = String,example = "John Doe")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// Card Holder's Nick Name #[schema(value_type = Option,example = "John Doe")] - pub nick_name: Option, + pub nick_name: Option>, /// Card Issuing Country pub card_issuing_country: Option, @@ -735,11 +735,11 @@ pub struct CardDetailUpdate { /// Card Holder Name #[schema(value_type = String,example = "John Doe")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// Card Holder's Nick Name #[schema(value_type = Option,example = "John Doe")] - pub nick_name: Option, + pub nick_name: Option>, } #[cfg(all( @@ -762,7 +762,10 @@ impl CardDetailUpdate { .card_holder_name .clone() .or(card_data_from_locker.name_on_card), - nick_name: self.nick_name.clone().or(card_data_from_locker.nick_name), + nick_name: self + .nick_name + .clone() + .or(card_data_from_locker.nick_name.map(masking::Secret::new)), card_issuing_country: None, card_network: None, card_issuer: None, @@ -777,11 +780,11 @@ impl CardDetailUpdate { pub struct CardDetailUpdate { /// Card Holder Name #[schema(value_type = String,example = "John Doe")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// Card Holder's Nick Name #[schema(value_type = Option,example = "John Doe")] - pub nick_name: Option, + pub nick_name: Option>, } #[cfg(all(feature = "v2", feature = "payment_methods_v2"))] @@ -795,7 +798,10 @@ impl CardDetailUpdate { .card_holder_name .clone() .or(card_data_from_locker.name_on_card), - nick_name: self.nick_name.clone().or(card_data_from_locker.nick_name), + nick_name: self + .nick_name + .clone() + .or(card_data_from_locker.nick_name.map(masking::Secret::new)), card_issuing_country: None, card_network: None, card_issuer: None, @@ -973,8 +979,8 @@ pub struct CardDetailsPaymentMethod { pub issuer_country: Option, pub expiry_month: Option>, pub expiry_year: Option>, - pub nick_name: Option, - pub card_holder_name: Option, + pub nick_name: Option>, + pub card_holder_name: Option>, pub card_isin: Option, pub card_issuer: Option, pub card_network: Option, @@ -1068,12 +1074,12 @@ pub enum BankAccountAccessCreds { #[derive(Debug, serde::Deserialize, serde::Serialize, Clone)] pub struct Card { pub card_number: CardNumber, - pub name_on_card: Option, + pub name_on_card: Option>, pub card_exp_month: masking::Secret, pub card_exp_year: masking::Secret, pub card_brand: Option, pub card_isin: Option, - pub nick_name: Option, + pub nick_name: Option, } #[cfg(all( @@ -1099,13 +1105,13 @@ pub struct CardDetailFromLocker { pub card_token: Option>, #[schema(value_type=Option)] - pub card_holder_name: Option, + pub card_holder_name: Option>, #[schema(value_type=Option)] pub card_fingerprint: Option>, #[schema(value_type=Option)] - pub nick_name: Option, + pub nick_name: Option>, #[schema(value_type = Option)] pub card_network: Option, @@ -1133,13 +1139,13 @@ pub struct CardDetailFromLocker { pub expiry_year: Option>, #[schema(value_type=Option)] - pub card_holder_name: Option, + pub card_holder_name: Option>, #[schema(value_type=Option)] pub card_fingerprint: Option>, #[schema(value_type=Option)] - pub nick_name: Option, + pub nick_name: Option>, #[schema(value_type = Option)] pub card_network: Option, @@ -2294,8 +2300,8 @@ pub struct TokenizedCardValue1 { pub card_number: String, pub exp_year: String, pub exp_month: String, - pub name_on_card: Option, - pub nickname: Option, + pub name_on_card: Option, + pub nickname: Option, pub card_last_four: Option, pub card_token: Option, } @@ -2363,14 +2369,14 @@ pub struct TokenizedBankRedirectValue2 { #[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] pub struct PaymentMethodRecord { pub customer_id: id_type::CustomerId, - pub name: Option, + pub name: Option>, pub email: Option, pub phone: Option>, pub phone_country_code: Option, pub merchant_id: Option, pub payment_method: Option, pub payment_method_type: Option, - pub nick_name: common_utils::types::NameType, + pub nick_name: masking::Secret, pub payment_instrument_id: Option>, pub card_number_masked: masking::Secret, pub card_expiry_month: masking::Secret, @@ -2379,8 +2385,8 @@ pub struct PaymentMethodRecord { pub original_transaction_id: Option, pub billing_address_zip: masking::Secret, pub billing_address_state: masking::Secret, - pub billing_address_first_name: common_utils::types::NameType, - pub billing_address_last_name: common_utils::types::NameType, + pub billing_address_first_name: masking::Secret, + pub billing_address_last_name: masking::Secret, pub billing_address_city: String, pub billing_address_country: Option, pub billing_address_line1: masking::Secret, @@ -2650,11 +2656,11 @@ pub struct TokenizeCardRequest { /// Card Holder Name #[schema(value_type = Option, example = "John Doe")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// Card Holder's Nick Name #[schema(value_type = Option, example = "John Doe")] - pub nick_name: Option, + pub nick_name: Option>, /// Card Issuing Country pub card_issuing_country: Option, @@ -2715,7 +2721,10 @@ impl From<&Card> for MigrateCardDetail { card_exp_month: card.card_exp_month.clone(), card_exp_year: card.card_exp_year.clone(), card_holder_name: card.name_on_card.clone(), - nick_name: card.nick_name.clone(), + nick_name: card + .nick_name + .as_ref() + .map(|name| masking::Secret::new(name.clone())), card_issuing_country: None, card_network: None, card_issuer: None, diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs index 779490205d..159aaed6ce 100644 --- a/crates/api_models/src/payments.rs +++ b/crates/api_models/src/payments.rs @@ -23,7 +23,7 @@ use common_utils::{ types::{MinorUnit, StringMajorUnit}, }; use error_stack::ResultExt; -use masking::{Secret, WithType}; +use masking::{PeekInterface, Secret, WithType}; use router_derive::Setter; use serde::{de, ser::Serializer, Deserialize, Deserializer, Serialize}; use strum::Display; @@ -1913,7 +1913,7 @@ pub struct Card { /// The card holder's name #[schema(value_type = String, example = "John Test")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// The CVC number for the card #[schema(value_type = String, example = "242")] @@ -1937,7 +1937,7 @@ pub struct Card { pub bank_code: Option, /// The card holder's nick name #[schema(value_type = Option, example = "John Test")] - pub nick_name: Option, + pub nick_name: Option>, } #[cfg(feature = "v2")] @@ -1993,7 +1993,7 @@ pub struct ExtendedCardInfo { /// The card holder's name #[schema(value_type = String, example = "John Test")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// The CVC number for the card #[schema(value_type = String, example = "242")] @@ -2046,20 +2046,19 @@ impl GetAddressFromPaymentMethodData for Card { // John Wheat Dough // first_name -> John // last_name -> Wheat Dough - card_holder_name.split_whitespace() + card_holder_name.peek().split_whitespace() }) .map(|mut card_holder_name_iter| { let first_name = card_holder_name_iter .next() .map(ToOwned::to_owned) - .map(common_utils::types::NameType::get_unchecked); // it is unchecked because the string is coming from a checked type + .map(Secret::new); let last_name = card_holder_name_iter.collect::>().join(" "); let last_name = if last_name.is_empty_after_trim() { None } else { - Some(common_utils::types::NameType::get_unchecked(last_name)) - // it is unchecked because the string is coming from a checked type + Some(Secret::new(last_name)) }; AddressDetails { @@ -2111,7 +2110,7 @@ impl Card { pub struct CardToken { /// The card holder's name #[schema(value_type = String, example = "John Test")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// The CVC number for the card #[schema(value_type = Option)] @@ -2153,7 +2152,7 @@ pub enum PayLaterData { billing_email: Option, /// The billing name #[schema(value_type = Option)] - billing_name: Option, + billing_name: Option>, }, /// For PayBright Redirect as PayLater Option PayBrightRedirect {}, @@ -2222,10 +2221,10 @@ pub enum BankDebitData { routing_number: Secret, #[schema(value_type = String, example = "John Test")] - card_holder_name: Option, + card_holder_name: Option>, #[schema(value_type = String, example = "John Doe")] - bank_account_holder_name: Option, + bank_account_holder_name: Option>, #[schema(value_type = String, example = "ACH")] bank_name: Option, @@ -2244,7 +2243,7 @@ pub enum BankDebitData { iban: Secret, /// Owner name for bank debit #[schema(value_type = String, example = "A. Schneider")] - bank_account_holder_name: Option, + bank_account_holder_name: Option>, }, BecsBankDebit { /// Billing details for bank debit @@ -2257,7 +2256,7 @@ pub enum BankDebitData { bsb_number: Secret, /// Owner name for bank debit #[schema(value_type = Option, example = "A. Schneider")] - bank_account_holder_name: Option, + bank_account_holder_name: Option>, }, BacsBankDebit { /// Billing details for bank debit @@ -2270,7 +2269,7 @@ pub enum BankDebitData { sort_code: Secret, /// holder name for bank debit #[schema(value_type = String, example = "A. Schneider")] - bank_account_holder_name: Option, + bank_account_holder_name: Option>, }, } @@ -2278,7 +2277,7 @@ impl GetAddressFromPaymentMethodData for BankDebitData { fn get_billing_address(&self) -> Option
{ fn get_billing_address_inner( bank_debit_billing: Option<&BankDebitBilling>, - bank_account_holder_name: Option<&common_utils::types::NameType>, + bank_account_holder_name: Option<&Secret>, ) -> Option
{ // We will always have address here let mut address = bank_debit_billing @@ -2405,10 +2404,8 @@ mod payment_method_data_serde { Some(billing_address_details), ) => { if card.card_holder_name.is_none() { - card.card_holder_name = billing_address_details - .get_optional_full_name() - .map(common_utils::types::NameType::get_unchecked_from_secret) - // it is unchecked because the string is coming from a checked type + card.card_holder_name = + billing_address_details.get_optional_full_name(); } Some(PaymentMethodData::Card(card.clone())) } @@ -2848,7 +2845,7 @@ pub struct AdditionalCardInfo { pub card_exp_year: Option>, - pub card_holder_name: Option, + pub card_holder_name: Option>, /// Additional payment checks done on the cvv and billing address by the processors. /// This is a free form field and the structure varies from processor to processor @@ -2946,7 +2943,7 @@ pub enum BankRedirectData { /// The card holder's name #[schema(value_type = String, example = "John Test")] - card_holder_name: Option, + card_holder_name: Option>, //Required by Stripes billing_details: Option, @@ -3197,10 +3194,10 @@ impl GetAddressFromPaymentMethodData for BankRedirectData { pub struct AlfamartVoucherData { /// The billing first name for Alfamart #[schema(value_type = Option, example = "Jane")] - pub first_name: Option, + pub first_name: Option>, /// The billing second name for Alfamart #[schema(value_type = Option, example = "Doe")] - pub last_name: Option, + pub last_name: Option>, /// The Email ID for Alfamart #[schema(value_type = Option, example = "example@me.com")] pub email: Option, @@ -3210,10 +3207,10 @@ pub struct AlfamartVoucherData { pub struct IndomaretVoucherData { /// The billing first name for Alfamart #[schema(value_type = Option, example = "Jane")] - pub first_name: Option, + pub first_name: Option>, /// The billing second name for Alfamart #[schema(value_type = Option, example = "Doe")] - pub last_name: Option, + pub last_name: Option>, /// The Email ID for Alfamart #[schema(value_type = Option, example = "example@me.com")] pub email: Option, @@ -3223,10 +3220,10 @@ pub struct IndomaretVoucherData { pub struct JCSVoucherData { /// The billing first name for Japanese convenience stores #[schema(value_type = Option, example = "Jane")] - pub first_name: Option, + pub first_name: Option>, /// The billing second name Japanese convenience stores #[schema(value_type = Option, example = "Doe")] - pub last_name: Option, + pub last_name: Option>, /// The Email ID for Japanese convenience stores #[schema(value_type = Option, example = "example@me.com")] pub email: Option, @@ -3246,10 +3243,10 @@ pub struct AchBillingDetails { pub struct DokuBillingDetails { /// The billing first name for Doku #[schema(value_type = Option, example = "Jane")] - pub first_name: Option, + pub first_name: Option>, /// The billing second name for Doku #[schema(value_type = Option, example = "Doe")] - pub last_name: Option, + pub last_name: Option>, /// The Email ID for Doku billing #[schema(value_type = Option, example = "example@me.com")] pub email: Option, @@ -3268,7 +3265,7 @@ pub struct SepaAndBacsBillingDetails { pub email: Option, /// The billing name for SEPA and BACS billing #[schema(value_type = Option, example = "Jane Doe")] - pub name: Option, + pub name: Option>, } #[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)] @@ -3306,7 +3303,7 @@ pub struct SofortBilling { pub struct BankRedirectBilling { /// The name for which billing is issued #[schema(value_type = String, example = "John Doe")] - pub billing_name: Option, + pub billing_name: Option>, /// The billing email for bank redirect #[schema(value_type = String, example = "example@example.com")] pub email: Option, @@ -3480,7 +3477,7 @@ impl GetAddressFromPaymentMethodData for BankTransferData { pub struct BankDebitBilling { /// The billing name for bank debits #[schema(value_type = Option, example = "John Doe")] - pub name: Option, + pub name: Option>, /// The billing email for bank debits #[schema(value_type = Option, example = "example@example.com")] pub email: Option, @@ -3910,7 +3907,7 @@ pub struct CardResponse { #[schema(value_type = Option)] pub card_exp_year: Option>, #[schema(value_type = Option)] - pub card_holder_name: Option, + pub card_holder_name: Option>, pub payment_checks: Option, pub authentication_data: Option, } @@ -4300,11 +4297,11 @@ pub struct AddressDetails { /// The first name for the address #[schema(value_type = Option, max_length = 255, example = "John")] - pub first_name: Option, + pub first_name: Option>, /// The last name for the address #[schema(value_type = Option, max_length = 255, example = "Doe")] - pub last_name: Option, + pub last_name: Option>, } impl AddressDetails { @@ -4312,10 +4309,10 @@ impl AddressDetails { match (self.first_name.as_ref(), self.last_name.as_ref()) { (Some(first_name), Some(last_name)) => Some(Secret::new(format!( "{} {}", - String::from(first_name), - String::from(last_name) + first_name.peek(), + last_name.peek() ))), - (Some(name), None) | (None, Some(name)) => Some(Secret::from(name.to_owned())), + (Some(name), None) | (None, Some(name)) => Some(name.to_owned()), _ => None, } } @@ -8301,6 +8298,7 @@ mod payments_response_api_contract { mod billing_from_payment_method_data { #![allow(clippy::unwrap_used)] use common_enums::CountryAlpha2; + use masking::ExposeOptionInterface; use super::*; @@ -8332,8 +8330,7 @@ mod billing_from_payment_method_data { #[test] fn test_bank_redirect_payment_method_data_eps() { let test_email = Email::try_from("example@example.com".to_string()).unwrap(); - let test_first_name = - common_utils::types::NameType::try_from(String::from("Chaser")).unwrap(); + let test_first_name = Secret::new(String::from("Chaser")); let bank_redirect_billing = BankRedirectBilling { billing_name: Some(test_first_name.clone()), @@ -8384,8 +8381,7 @@ mod billing_from_payment_method_data { #[test] fn test_bank_debit_payment_method_data_ach() { let test_email = Email::try_from("example@example.com".to_string()).unwrap(); - let test_first_name = - common_utils::types::NameType::try_from(String::from("Chaser")).unwrap(); + let test_first_name = Secret::new(String::from("Chaser")); let bank_redirect_billing = BankDebitBilling { name: Some(test_first_name.clone()), @@ -8419,10 +8415,7 @@ mod billing_from_payment_method_data { #[test] fn test_card_payment_method_data() { let card_payment_method_data = PaymentMethodData::Card(Card { - card_holder_name: Some( - common_utils::types::NameType::try_from(TEST_FIRST_NAME_SINGLE.to_string()) - .unwrap(), - ), + card_holder_name: Some(Secret::new(TEST_FIRST_NAME_SINGLE.into())), ..Default::default() }); @@ -8431,11 +8424,7 @@ mod billing_from_payment_method_data { let billing_address = billing_address.unwrap(); assert_eq!( - billing_address - .address - .unwrap() - .first_name - .map(String::from), + billing_address.address.unwrap().first_name.expose_option(), Some(TEST_FIRST_NAME_SINGLE.into()) ); } @@ -8452,9 +8441,7 @@ mod billing_from_payment_method_data { #[test] fn test_card_payment_method_data_full_name() { let card_payment_method_data = PaymentMethodData::Card(Card { - card_holder_name: Some( - common_utils::types::NameType::try_from(TEST_FULL_NAME.to_string()).unwrap(), - ), + card_holder_name: Some(Secret::new(TEST_FULL_NAME.into())), ..Default::default() }); @@ -8462,12 +8449,12 @@ mod billing_from_payment_method_data { let billing_address = billing_details.address.unwrap(); assert_eq!( - billing_address.first_name.map(String::from), + billing_address.first_name.expose_option(), Some(TEST_FIRST_NAME.into()) ); assert_eq!( - billing_address.last_name.map(String::from), + billing_address.last_name.expose_option(), Some(TEST_LAST_NAME.into()) ); } @@ -8475,9 +8462,7 @@ mod billing_from_payment_method_data { #[test] fn test_card_payment_method_data_empty_string() { let card_payment_method_data = PaymentMethodData::Card(Card { - card_holder_name: Some( - common_utils::types::NameType::try_from("".to_string()).unwrap(), - ), + card_holder_name: Some(Secret::new("".to_string())), ..Default::default() }); diff --git a/crates/api_models/src/payments/additional_info.rs b/crates/api_models/src/payments/additional_info.rs index fc3ff5d81d..33297e2b34 100644 --- a/crates/api_models/src/payments/additional_info.rs +++ b/crates/api_models/src/payments/additional_info.rs @@ -27,11 +27,11 @@ pub struct AchBankDebitAdditionalData { /// Card holder's name #[schema(value_type = Option, example = "John Doe")] - pub card_holder_name: Option, + pub card_holder_name: Option>, /// Bank account's owner name #[schema(value_type = Option, example = "John Doe")] - pub bank_account_holder_name: Option, + pub bank_account_holder_name: Option>, /// Name of the bank #[schema(value_type = Option, example = "ach")] @@ -58,7 +58,7 @@ pub struct BacsBankDebitAdditionalData { /// Bank account's owner name #[schema(value_type = Option, example = "John Doe")] - pub bank_account_holder_name: Option, + pub bank_account_holder_name: Option>, } #[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)] @@ -73,7 +73,7 @@ pub struct BecsBankDebitAdditionalData { /// Bank account's owner name #[schema(value_type = Option, example = "John Doe")] - pub bank_account_holder_name: Option, + pub bank_account_holder_name: Option>, } #[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)] @@ -84,7 +84,7 @@ pub struct SepaBankDebitAdditionalData { /// Bank account's owner name #[schema(value_type = Option, example = "John Doe")] - pub bank_account_holder_name: Option, + pub bank_account_holder_name: Option>, } #[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)] @@ -110,7 +110,7 @@ pub struct BancontactBankRedirectAdditionalData { /// The card holder's name #[schema(value_type = Option, example = "John Test")] - pub card_holder_name: Option, + pub card_holder_name: Option>, } #[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)] @@ -194,7 +194,7 @@ pub struct GivexGiftCardAdditionalData { pub struct CardTokenAdditionalData { /// The card holder's name #[schema(value_type = String, example = "John Test")] - pub card_holder_name: Option, + pub card_holder_name: Option>, } #[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)] diff --git a/crates/api_models/src/payouts.rs b/crates/api_models/src/payouts.rs index 8192eabd29..4c8a73b75a 100644 --- a/crates/api_models/src/payouts.rs +++ b/crates/api_models/src/payouts.rs @@ -254,7 +254,7 @@ pub struct CardPayout { /// The card holder's name #[schema(value_type = String, example = "John Doe")] - pub card_holder_name: Option, + pub card_holder_name: Option>, } #[derive(Eq, PartialEq, Clone, Debug, Deserialize, Serialize, ToSchema)] diff --git a/crates/cards/tests/basic.rs b/crates/cards/tests/basic.rs index 971cbef32c..0f27c9e028 100644 --- a/crates/cards/tests/basic.rs +++ b/crates/cards/tests/basic.rs @@ -85,11 +85,11 @@ fn test_card_expiration() { assert!(invalid_card_exp.is_err()); let serialized = serde_json::to_string(&card_exp).unwrap(); - let expected_string = format!(r#"{{"month":{},"year":{}}}"#, curr_month, curr_year); + let expected_string = format!(r#"{{"month":{},"year":{}}}"#, 3, curr_year); assert_eq!(serialized, expected_string); let derialized = serde_json::from_str::(&serialized).unwrap(); - assert_eq!(*derialized.get_month().peek(), curr_month); + assert_eq!(*derialized.get_month().peek(), 3); assert_eq!(*derialized.get_year().peek(), curr_year); let invalid_serialized_string = r#"{"month":13,"year":123}"#; diff --git a/crates/common_utils/src/types.rs b/crates/common_utils/src/types.rs index 4bcbc8a454..11c9b17fae 100644 --- a/crates/common_utils/src/types.rs +++ b/crates/common_utils/src/types.rs @@ -13,9 +13,9 @@ use std::{ borrow::Cow, fmt::Display, iter::Sum, - ops::{Add, Deref, Mul, Sub}, + ops::{Add, Mul, Sub}, primitive::i64, - str::{FromStr, SplitWhitespace}, + str::FromStr, }; use common_enums::enums; @@ -29,7 +29,6 @@ use diesel::{ AsExpression, FromSqlRow, Queryable, }; use error_stack::{report, ResultExt}; -use masking::{ExposeInterface, PeekInterface}; pub use primitive_wrappers::bool_wrappers::{ AlwaysRequestExtendedAuthorization, ExtendedAuthorizationAppliedBool, RequestExtendedAuthorizationBool, @@ -49,7 +48,6 @@ use crate::{ self, MAX_DESCRIPTION_LENGTH, MAX_STATEMENT_DESCRIPTOR_LENGTH, PUBLISHABLE_KEY_LENGTH, }, errors::{CustomResult, ParsingError, PercentageError, ValidationError}, - ext_traits::ConfigExt, fp_utils::when, }; @@ -1102,11 +1100,6 @@ pub(crate) enum LengthStringError { MinLengthViolated(u16), } -impl masking::SerializableSecret - for LengthString -{ -} - impl LengthString { /// Generates new [MerchantReferenceId] from the given input string pub fn from(input_string: Cow<'static, str>) -> Result { @@ -1130,22 +1123,6 @@ impl LengthString Display - for LengthString -{ - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.0) - } -} - -impl Default - for LengthString -{ - fn default() -> Self { - Self(String::default()) - } -} - impl<'de, const MAX_LENGTH: u16, const MIN_LENGTH: u16> Deserialize<'de> for LengthString { @@ -1158,13 +1135,6 @@ impl<'de, const MAX_LENGTH: u16, const MIN_LENGTH: u16> Deserialize<'de> } } -impl Deref for LengthString { - type Target = String; - fn deref(&self) -> &Self::Target { - &self.0 - } -} - impl FromSql for LengthString where @@ -1393,173 +1363,6 @@ where } } -#[derive(Clone, Default, Debug, Eq, PartialEq, Serialize)] -/// NewType for validating Names -pub struct NameType(masking::Secret>); - -impl TryFrom for NameType { - type Error = error_stack::Report; - fn try_from(card_holder_name: String) -> Result { - for char in card_holder_name.chars() { - validate_character_in_card_holder_name(char)?; - } - let valid_length_name = - LengthString::<256, 0>::from(card_holder_name.into()).map_err(|_| { - report!(ValidationError::InvalidValue { - message: "invalid length for name".to_string() - }) - })?; - Ok(Self(masking::Secret::new(valid_length_name))) - } -} - -impl TryFrom> for NameType { - type Error = error_stack::Report; - fn try_from(masked_card_holder_name: masking::Secret) -> Result { - Self::try_from(masked_card_holder_name.expose()) - } -} - -impl NameType { - /// This function is used to create NameType from a string without any validation - pub fn get_unchecked(card_holder_name: String) -> Self { - Self(masking::Secret::new(LengthString::<256, 0>::new_unchecked( - card_holder_name, - ))) - } - - /// This function is used to create NameType from a secret of string without any validation - pub fn get_unchecked_from_secret(card_holder_name: masking::Secret) -> Self { - Self(masking::Secret::new(LengthString::<256, 0>::new_unchecked( - card_holder_name.expose(), - ))) - } - - /// Trim the name - pub fn trim(&self) -> Self { - let value = self.0.peek().trim().to_string(); - Self(masking::Secret::new(LengthString::<256, 0>::new_unchecked( - value, - ))) - } - - /// Check if the string is empty - pub fn is_empty(&self) -> bool { - self.0.peek().is_empty() - } - - /// Split the string by whitespace - pub fn split_whitespace(&self) -> SplitWhitespace<'_> { - self.0.peek().split_whitespace() - } - - /// Split once at the first occurrence of the given character - pub fn split_once(&self, delimiter: char) -> Option<(&str, &str)> { - self.0.peek().split_once(delimiter) - } - - /// Split once at the last occurrence of the given character - pub fn rsplit_once(&self, delimiter: char) -> Option<(&str, &str)> { - self.0.peek().rsplit_once(delimiter) - } -} - -impl From for String { - fn from(card_holder_name: NameType) -> Self { - (*(card_holder_name.0.peek())).to_string() - } -} - -impl From<&NameType> for String { - fn from(card_holder_name: &NameType) -> Self { - (*(card_holder_name.0.peek())).to_string() - } -} - -impl FromStr for NameType { - type Err = error_stack::Report; - - fn from_str(card_number: &str) -> Result { - Self::try_from(card_number.to_string()) - } -} - -impl From for masking::Secret { - fn from(card_holder_name: NameType) -> Self { - Self::new(card_holder_name.0.peek().to_string()) - } -} - -impl From<&NameType> for masking::Secret { - fn from(card_holder_name: &NameType) -> Self { - Self::new(card_holder_name.0.peek().to_string()) - } -} - -fn validate_character_in_card_holder_name( - character: char, -) -> Result<(), error_stack::Report> { - if character.is_alphabetic() - || character == ' ' - || character == '.' - || character == '-' - || character == '\'' - || character == '~' - || character == '`' - { - Ok(()) - } else { - Err(report!(ValidationError::InvalidValue { - message: format!("invalid character found in card holder name: {}", character) - })) - } -} - -impl<'de> Deserialize<'de> for NameType { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - let card_holder_name = String::deserialize(deserializer)?; - card_holder_name - .try_into() - .map_err(serde::de::Error::custom) - } -} - -impl ConfigExt for NameType { - fn is_empty_after_trim(&self) -> bool { - self.trim().is_empty() - } -} - -#[cfg(test)] -mod name_type_test { - #![allow(clippy::unwrap_used)] - use super::*; - #[test] - fn test_card_holder_name() { - let valid_name = "Sakil Mostak".to_string(); - // no panic - let card_holder_name = NameType::try_from("Sakil Mostak".to_string()).unwrap(); - - // will panic on unwrap - let invalid_card_holder_name = NameType::try_from("$@k!l M*$t@k".to_string()); - - assert_eq!(String::from(card_holder_name.clone()), valid_name); - assert!(invalid_card_holder_name.is_err()); - - let serialized = serde_json::to_string(&card_holder_name).unwrap(); - assert_eq!(&serialized, "\"Sakil Mostak\""); - - let derialized = serde_json::from_str::(&serialized).unwrap(); - assert_eq!(String::from(derialized), valid_name); - - let invalid_deserialization = serde_json::from_str::("$@k!l M*$t@k"); - assert!(invalid_deserialization.is_err()); - } -} - #[cfg(feature = "v2")] /// Browser information to be used for 3DS 2.0 // If any of the field is PII, then we can make them as secret diff --git a/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs b/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs index a5e814fe9b..f977ba6a66 100644 --- a/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/adyen/transformers.rs @@ -1937,8 +1937,8 @@ fn get_shopper_name( ) -> Option { let billing = address.and_then(|billing| billing.address.as_ref()); Some(ShopperName { - first_name: billing.and_then(|a| a.first_name.clone().map(From::from)), - last_name: billing.and_then(|a| a.last_name.clone().map(From::from)), + first_name: billing.and_then(|a| a.first_name.clone()), + last_name: billing.and_then(|a| a.last_name.clone()), }) } @@ -2232,7 +2232,6 @@ impl TryFrom<(&WalletData, &PaymentsAuthorizeRouterData)> for AdyenPaymentMethod holder_name: paze_decrypted_data .billing_address .name - .map(From::from) .or(item.get_optional_billing_full_name()), brand: Some(paze_decrypted_data.payment_card_network.clone()) .and_then(get_adyen_card_network), @@ -5141,7 +5140,6 @@ impl TryFrom<&PayoutMethodData> for PayoutCardDetails { holder_name: card .card_holder_name .clone() - .map(From::from) .get_required_value("card_holder_name") .change_context(errors::ConnectorError::MissingRequiredField { field_name: "payout_method_data.card.holder_name", diff --git a/crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs b/crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs index a6798f12ff..deefa7a159 100644 --- a/crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs @@ -734,8 +734,8 @@ impl .get_optional_billing() .and_then(|billing_address| billing_address.address.as_ref()) .map(|address| BillTo { - first_name: address.first_name.clone().map(From::from), - last_name: address.last_name.clone().map(From::from), + first_name: address.first_name.clone(), + last_name: address.last_name.clone(), address: address.line1.clone(), city: address.city.clone(), state: address.state.clone(), @@ -871,8 +871,8 @@ impl .get_optional_billing() .and_then(|billing_address| billing_address.address.as_ref()) .map(|address| BillTo { - first_name: address.first_name.clone().map(From::from), - last_name: address.last_name.clone().map(From::from), + first_name: address.first_name.clone(), + last_name: address.last_name.clone(), address: address.line1.clone(), city: address.city.clone(), state: address.state.clone(), @@ -945,8 +945,8 @@ impl .get_optional_billing() .and_then(|billing_address| billing_address.address.as_ref()) .map(|address| BillTo { - first_name: address.first_name.clone().map(From::from), - last_name: address.last_name.clone().map(From::from), + first_name: address.first_name.clone(), + last_name: address.last_name.clone(), address: address.line1.clone(), city: address.city.clone(), state: address.state.clone(), diff --git a/crates/hyperswitch_connectors/src/connectors/bankofamerica/transformers.rs b/crates/hyperswitch_connectors/src/connectors/bankofamerica/transformers.rs index beb6113f48..50fddc6166 100644 --- a/crates/hyperswitch_connectors/src/connectors/bankofamerica/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/bankofamerica/transformers.rs @@ -530,8 +530,8 @@ fn build_bill_to( }); BillTo { - first_name: addr.first_name.clone().map(From::from), - last_name: addr.last_name.clone().map(From::from), + first_name: addr.first_name.clone(), + last_name: addr.last_name.clone(), address1: addr.line1.clone(), locality: addr.city.clone(), administrative_area, diff --git a/crates/hyperswitch_connectors/src/connectors/bluesnap/transformers.rs b/crates/hyperswitch_connectors/src/connectors/bluesnap/transformers.rs index 8e0e3d77a0..7c49cfe93d 100644 --- a/crates/hyperswitch_connectors/src/connectors/bluesnap/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/bluesnap/transformers.rs @@ -344,8 +344,8 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> for Blues billing_contact: BillingDetails { country_code: billing_address.country, address_lines: Some(address), - family_name: billing_address.last_name.to_owned().map(From::from), - given_name: billing_address.first_name.to_owned().map(From::from), + family_name: billing_address.last_name.to_owned(), + given_name: billing_address.first_name.to_owned(), postal_code: billing_address.zip, }, } diff --git a/crates/hyperswitch_connectors/src/connectors/cybersource/transformers.rs b/crates/hyperswitch_connectors/src/connectors/cybersource/transformers.rs index b762c63b06..c0db1e7bff 100644 --- a/crates/hyperswitch_connectors/src/connectors/cybersource/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/cybersource/transformers.rs @@ -1175,8 +1175,8 @@ fn build_bill_to( Ok(address_details .and_then(|addr| { addr.address.as_ref().map(|addr| BillTo { - first_name: addr.first_name.clone().map(From::from), - last_name: addr.last_name.clone().map(From::from), + first_name: addr.first_name.remove_new_line(), + last_name: addr.last_name.remove_new_line(), address1: addr.line1.remove_new_line(), locality: addr.city.remove_new_line(), administrative_area: addr.to_state_code_as_optional().unwrap_or_else(|_| { @@ -1515,6 +1515,7 @@ impl let (first_name, last_name) = match paze_data.billing_address.name { Some(name) => { let (first_name, last_name) = name + .peek() .split_once(' ') .map(|(first, last)| (first.to_string(), last.to_string())) .ok_or(errors::ConnectorError::MissingRequiredField { diff --git a/crates/hyperswitch_connectors/src/connectors/dlocal/transformers.rs b/crates/hyperswitch_connectors/src/connectors/dlocal/transformers.rs index 0314547161..20b50af355 100644 --- a/crates/hyperswitch_connectors/src/connectors/dlocal/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/dlocal/transformers.rs @@ -10,7 +10,7 @@ use hyperswitch_domain_models::{ types, }; use hyperswitch_interfaces::{api::CurrencyUnit, errors}; -use masking::Secret; +use masking::{PeekInterface, Secret}; use serde::{Deserialize, Serialize}; use url::Url; @@ -188,11 +188,11 @@ fn get_payer_name( let first_name = address .first_name .clone() - .map_or("".to_string(), String::from); + .map_or("".to_string(), |first_name| first_name.peek().to_string()); let last_name = address .last_name .clone() - .map_or("".to_string(), String::from); + .map_or("".to_string(), |last_name| last_name.peek().to_string()); let name: String = format!("{first_name} {last_name}").trim().to_string(); if !name.is_empty() { Some(Secret::new(name)) diff --git a/crates/hyperswitch_connectors/src/connectors/nuvei/transformers.rs b/crates/hyperswitch_connectors/src/connectors/nuvei/transformers.rs index ad7b112f1f..cbc4a244d8 100644 --- a/crates/hyperswitch_connectors/src/connectors/nuvei/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/nuvei/transformers.rs @@ -844,7 +844,9 @@ where ( Some(BillingAddress { first_name: Some(first_name.clone()), - last_name: Some(address.get_last_name().ok().unwrap_or(first_name)), + last_name: Some( + address.get_last_name().ok().unwrap_or(&first_name).clone(), + ), email: item.request.get_email_required()?, country: item.get_billing_country()?, }), @@ -1081,7 +1083,7 @@ where let first_name = address.get_first_name()?.clone(); Some(BillingAddress { first_name: Some(first_name.clone()), - last_name: Some(address.get_last_name().ok().unwrap_or(first_name)), + last_name: Some(address.get_last_name().ok().unwrap_or(&first_name).clone()), email: item.request.get_email_required()?, country: item.get_billing_country()?, }) diff --git a/crates/hyperswitch_connectors/src/connectors/paypal/transformers.rs b/crates/hyperswitch_connectors/src/connectors/paypal/transformers.rs index a30915c826..bc5d10620b 100644 --- a/crates/hyperswitch_connectors/src/connectors/paypal/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/paypal/transformers.rs @@ -343,7 +343,7 @@ impl From<&PaypalRouterData<&PaymentsAuthorizeRouterData>> for ShippingAddress { .router_data .get_optional_shipping() .and_then(|inner_data| inner_data.address.as_ref()) - .and_then(|inner_data| inner_data.first_name.clone().map(From::from)), + .and_then(|inner_data| inner_data.first_name.clone()), }), } } @@ -358,7 +358,7 @@ impl From<&PaypalRouterData<&PaymentsPostSessionTokensRouterData>> for ShippingA .router_data .get_optional_shipping() .and_then(|inner_data| inner_data.address.as_ref()) - .and_then(|inner_data| inner_data.first_name.clone().map(From::from)), + .and_then(|inner_data| inner_data.first_name.clone()), }), } } diff --git a/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs index fffb191ba0..c518a6e2d3 100644 --- a/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs @@ -321,7 +321,7 @@ fn get_card_request_data( .get_billing()? .address .as_ref() - .and_then(|address| address.last_name.clone().map(From::from)); + .and_then(|address| address.last_name.clone()); Ok(TrustpayPaymentsRequest::CardsPaymentRequest(Box::new( PaymentRequestCards { amount, @@ -374,7 +374,7 @@ fn get_debtor_info( .get_billing()? .address .as_ref() - .and_then(|address| address.last_name.clone().map(From::from)); + .and_then(|address| address.last_name.clone()); Ok(match pm { TrustpayPaymentMethod::Blik => Some(DebtorInformation { name: get_full_name(params.billing_first_name, billing_last_name), @@ -400,7 +400,7 @@ fn get_bank_transfer_debtor_info( Ok(match pm { TrustpayBankTransferPaymentMethod::SepaCreditTransfer | TrustpayBankTransferPaymentMethod::InstantBankTransfer => Some(DebtorInformation { - name: get_full_name(params.billing_first_name, billing_last_name.map(From::from)), + name: get_full_name(params.billing_first_name, billing_last_name), email: item.request.get_email()?, }), }) diff --git a/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs b/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs index 5d87172de2..26afd937ea 100644 --- a/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/wellsfargo/transformers.rs @@ -853,8 +853,8 @@ fn build_bill_to( let ad = Ok(address_details .and_then(|addr| { addr.address.as_ref().map(|addr| BillTo { - first_name: addr.first_name.clone().map(From::from), - last_name: addr.last_name.clone().map(From::from), + first_name: addr.first_name.clone(), + last_name: addr.last_name.clone(), address1: addr.line1.clone(), locality: addr.city.clone(), administrative_area: addr.to_state_code_as_optional().ok().flatten(), diff --git a/crates/hyperswitch_connectors/src/connectors/worldline/transformers.rs b/crates/hyperswitch_connectors/src/connectors/worldline/transformers.rs index 03a6d6816e..d716bfd088 100644 --- a/crates/hyperswitch_connectors/src/connectors/worldline/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/worldline/transformers.rs @@ -472,11 +472,11 @@ impl From for BillingAddress impl From for Shipping { fn from(value: hyperswitch_domain_models::address::AddressDetails) -> Self { Self { - city: value.city.clone(), + city: value.city, country_code: value.country, name: Some(Name { - first_name: value.first_name.map(From::from), - surname: value.last_name.map(From::from), + first_name: value.first_name, + surname: value.last_name, ..Default::default() }), state: value.state, diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs index f457a39a99..40ad127e20 100644 --- a/crates/hyperswitch_connectors/src/utils.rs +++ b/crates/hyperswitch_connectors/src/utils.rs @@ -553,7 +553,7 @@ impl RouterData shipping_address .clone() .address - .and_then(|shipping_details| shipping_details.first_name.map(From::from)) + .and_then(|shipping_details| shipping_details.first_name) }) } @@ -562,7 +562,7 @@ impl RouterData shipping_address .clone() .address - .and_then(|shipping_details| shipping_details.last_name.map(From::from)) + .and_then(|shipping_details| shipping_details.last_name) }) } @@ -671,7 +671,7 @@ impl RouterData billing_address .clone() .address - .and_then(|billing_details| billing_details.first_name.map(From::from)) + .and_then(|billing_details| billing_details.first_name.clone()) }) .ok_or_else(missing_field_err( "payment_method_data.billing.address.first_name", @@ -694,7 +694,7 @@ impl RouterData billing_address .clone() .address - .and_then(|billing_details| billing_details.last_name.map(From::from)) + .and_then(|billing_details| billing_details.last_name.clone()) }) .ok_or_else(missing_field_err( "payment_method_data.billing.address.last_name", @@ -877,7 +877,7 @@ impl RouterData billing_address .clone() .address - .and_then(|billing_details| billing_details.first_name.map(From::from)) + .and_then(|billing_details| billing_details.first_name) }) } @@ -888,7 +888,7 @@ impl RouterData billing_address .clone() .address - .and_then(|billing_details| billing_details.last_name.map(From::from)) + .and_then(|billing_details| billing_details.last_name) }) } @@ -1151,7 +1151,6 @@ impl CardData for Card { fn get_cardholder_name(&self) -> Result, Error> { self.card_holder_name .clone() - .map(From::from) .ok_or_else(missing_field_err("card.card_holder_name")) } } @@ -1259,7 +1258,6 @@ impl CardData for CardDetailsForNetworkTransactionId { fn get_cardholder_name(&self) -> Result, Error> { self.card_holder_name .clone() - .map(From::from) .ok_or_else(missing_field_err("card.card_holder_name")) } } @@ -1304,8 +1302,8 @@ static CARD_REGEX: Lazy>> = Lazy }); pub trait AddressDetailsData { - fn get_first_name(&self) -> Result, Error>; - fn get_last_name(&self) -> Result, Error>; + fn get_first_name(&self) -> Result<&Secret, Error>; + fn get_last_name(&self) -> Result<&Secret, Error>; fn get_full_name(&self) -> Result, Error>; fn get_line1(&self) -> Result<&Secret, Error>; fn get_city(&self) -> Result<&String, Error>; @@ -1328,23 +1326,26 @@ pub trait AddressDetailsData { } impl AddressDetailsData for AddressDetails { - fn get_first_name(&self) -> Result, Error> { + fn get_first_name(&self) -> Result<&Secret, Error> { self.first_name - .clone() - .map(From::from) + .as_ref() .ok_or_else(missing_field_err("address.first_name")) } - fn get_last_name(&self) -> Result, Error> { + fn get_last_name(&self) -> Result<&Secret, Error> { self.last_name - .clone() - .map(From::from) + .as_ref() .ok_or_else(missing_field_err("address.last_name")) } fn get_full_name(&self) -> Result, Error> { - let first_name = self.get_first_name()?.expose(); - let last_name = self.get_last_name().unwrap_or_default().expose(); + let first_name = self.get_first_name()?.peek().to_owned(); + let last_name = self + .get_last_name() + .ok() + .cloned() + .unwrap_or(Secret::new("".to_string())); + let last_name = last_name.peek(); let full_name = format!("{} {}", first_name, last_name).trim().to_string(); Ok(Secret::new(full_name)) } @@ -1537,11 +1538,11 @@ impl AddressDetailsData for AddressDetails { } fn get_optional_first_name(&self) -> Option> { - self.first_name.clone().map(From::from) + self.first_name.clone() } fn get_optional_last_name(&self) -> Option> { - self.last_name.clone().map(From::from) + self.last_name.clone() } fn get_optional_country(&self) -> Option { @@ -1845,7 +1846,6 @@ impl PaymentsAuthorizeRequestData for PaymentsAuthorizeData { Some(payments::AdditionalPaymentData::Card(card_data)) => Ok(card_data .card_holder_name .clone() - .map(From::from) .ok_or_else(|| errors::ConnectorError::MissingRequiredField { field_name: "card_holder_name", })?), @@ -5859,7 +5859,6 @@ impl CardData for api_models::payouts::CardPayout { fn get_cardholder_name(&self) -> Result, Error> { self.card_holder_name .clone() - .map(From::from) .ok_or_else(missing_field_err("card.card_holder_name")) } } diff --git a/crates/hyperswitch_domain_models/src/address.rs b/crates/hyperswitch_domain_models/src/address.rs index 79b19a52c9..f8e38ae8a3 100644 --- a/crates/hyperswitch_domain_models/src/address.rs +++ b/crates/hyperswitch_domain_models/src/address.rs @@ -1,4 +1,4 @@ -use masking::Secret; +use masking::{PeekInterface, Secret}; #[derive(Default, Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)] pub struct Address { @@ -48,8 +48,8 @@ pub struct AddressDetails { pub line3: Option>, pub zip: Option>, pub state: Option>, - pub first_name: Option, - pub last_name: Option, + pub first_name: Option>, + pub last_name: Option>, } impl AddressDetails { @@ -57,10 +57,10 @@ impl AddressDetails { match (self.first_name.as_ref(), self.last_name.as_ref()) { (Some(first_name), Some(last_name)) => Some(Secret::new(format!( "{} {}", - String::from(first_name), - String::from(last_name) + first_name.peek(), + last_name.peek() ))), - (Some(name), None) | (None, Some(name)) => Some(Secret::from(name)), + (Some(name), None) | (None, Some(name)) => Some(name.to_owned()), _ => None, } } @@ -71,7 +71,7 @@ impl AddressDetails { let (first_name, last_name) = if self .first_name .as_ref() - .is_some_and(|first_name| !first_name.trim().is_empty()) + .is_some_and(|first_name| !first_name.peek().trim().is_empty()) { (self.first_name.clone(), self.last_name.clone()) } else { diff --git a/crates/hyperswitch_domain_models/src/bulk_tokenization.rs b/crates/hyperswitch_domain_models/src/bulk_tokenization.rs index fef8d9606d..0eff34a1bf 100644 --- a/crates/hyperswitch_domain_models/src/bulk_tokenization.rs +++ b/crates/hyperswitch_domain_models/src/bulk_tokenization.rs @@ -35,8 +35,8 @@ pub struct TokenizeCardRequest { pub card_expiry_month: masking::Secret, pub card_expiry_year: masking::Secret, pub card_cvc: Option>, - pub card_holder_name: Option, - pub nick_name: Option, + pub card_holder_name: Option>, + pub nick_name: Option>, pub card_issuing_country: Option, pub card_network: Option, pub card_issuer: Option, @@ -56,8 +56,8 @@ pub struct CardNetworkTokenizeRecord { pub card_expiry_month: Option>, pub card_expiry_year: Option>, pub card_cvc: Option>, - pub card_holder_name: Option, - pub nick_name: Option, + pub card_holder_name: Option>, + pub nick_name: Option>, pub card_issuing_country: Option, pub card_network: Option, pub card_issuer: Option, @@ -87,8 +87,8 @@ pub struct CardNetworkTokenizeRecord { pub billing_address_line3: Option>, pub billing_address_zip: Option>, pub billing_address_state: Option>, - pub billing_address_first_name: Option, - pub billing_address_last_name: Option, + pub billing_address_first_name: Option>, + pub billing_address_last_name: Option>, pub billing_phone_number: Option>, pub billing_phone_country_code: Option, pub billing_email: Option, diff --git a/crates/hyperswitch_domain_models/src/payment_method_data.rs b/crates/hyperswitch_domain_models/src/payment_method_data.rs index 0ab1e4797e..f69b9dc685 100644 --- a/crates/hyperswitch_domain_models/src/payment_method_data.rs +++ b/crates/hyperswitch_domain_models/src/payment_method_data.rs @@ -89,8 +89,8 @@ pub struct Card { pub card_type: Option, pub card_issuing_country: Option, pub bank_code: Option, - pub nick_name: Option, - pub card_holder_name: Option, + pub nick_name: Option>, + pub card_holder_name: Option>, } #[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize, Default)] @@ -103,8 +103,8 @@ pub struct CardDetailsForNetworkTransactionId { pub card_type: Option, pub card_issuing_country: Option, pub bank_code: Option, - pub nick_name: Option, - pub card_holder_name: Option, + pub nick_name: Option>, + pub card_holder_name: Option>, } #[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize, Default)] @@ -117,8 +117,8 @@ pub struct CardDetail { pub card_type: Option, pub card_issuing_country: Option, pub bank_code: Option, - pub nick_name: Option, - pub card_holder_name: Option, + pub nick_name: Option>, + pub card_holder_name: Option>, } impl CardDetailsForNetworkTransactionId { @@ -414,7 +414,7 @@ pub enum BankRedirectData { card_number: Option, card_exp_month: Option>, card_exp_year: Option>, - card_holder_name: Option, + card_holder_name: Option>, }, Bizum {}, Blik { @@ -557,7 +557,7 @@ pub struct GiftCardDetails { #[serde(rename_all = "snake_case")] pub struct CardToken { /// The card holder's name - pub card_holder_name: Option, + pub card_holder_name: Option>, /// The CVC number for the card pub card_cvc: Option>, @@ -569,25 +569,25 @@ pub enum BankDebitData { AchBankDebit { account_number: Secret, routing_number: Secret, - card_holder_name: Option, - bank_account_holder_name: Option, + card_holder_name: Option>, + bank_account_holder_name: Option>, bank_name: Option, bank_type: Option, bank_holder_type: Option, }, SepaBankDebit { iban: Secret, - bank_account_holder_name: Option, + bank_account_holder_name: Option>, }, BecsBankDebit { account_number: Secret, bsb_number: Secret, - bank_account_holder_name: Option, + bank_account_holder_name: Option>, }, BacsBankDebit { account_number: Secret, sort_code: Secret, - bank_account_holder_name: Option, + bank_account_holder_name: Option>, }, } @@ -643,7 +643,7 @@ pub struct NetworkTokenData { pub card_type: Option, pub card_issuing_country: Option, pub bank_code: Option, - pub nick_name: Option, + pub nick_name: Option>, pub eci: Option, } @@ -1561,10 +1561,10 @@ pub struct TokenizedCardValue1 { pub card_number: String, pub exp_year: String, pub exp_month: String, - pub nickname: Option, + pub nickname: Option, pub card_last_four: Option, pub card_token: Option, - pub card_holder_name: Option, + pub card_holder_name: Option>, } #[derive(Debug, serde::Serialize, serde::Deserialize)] @@ -1896,8 +1896,8 @@ impl From for CardDetailsPaymentMethod { last4_digits: Some(item.card_number.get_last4()), expiry_month: Some(item.card_exp_month), expiry_year: Some(item.card_exp_year), - card_holder_name: item.card_holder_name.map(From::from), - nick_name: item.nick_name.map(From::from), + card_holder_name: item.card_holder_name, + nick_name: item.nick_name, card_isin: None, card_issuer: item.card_issuer, card_network: item.card_network, diff --git a/crates/hyperswitch_domain_models/src/router_data.rs b/crates/hyperswitch_domain_models/src/router_data.rs index c4eeb33430..8c35229c6b 100644 --- a/crates/hyperswitch_domain_models/src/router_data.rs +++ b/crates/hyperswitch_domain_models/src/router_data.rs @@ -315,7 +315,7 @@ pub struct PazeDynamicData { #[derive(Debug, Clone, serde::Deserialize)] #[serde(rename_all = "camelCase")] pub struct PazeAddress { - pub name: Option, + pub name: Option>, pub line1: Option>, pub line2: Option>, pub line3: Option>, diff --git a/crates/hyperswitch_domain_models/src/router_request_types/fraud_check.rs b/crates/hyperswitch_domain_models/src/router_request_types/fraud_check.rs index 1e55a8e322..4d7f4bfdf4 100644 --- a/crates/hyperswitch_domain_models/src/router_request_types/fraud_check.rs +++ b/crates/hyperswitch_domain_models/src/router_request_types/fraud_check.rs @@ -140,7 +140,7 @@ pub struct Product { #[serde_with::skip_serializing_none] #[serde(rename_all = "snake_case")] pub struct Destination { - pub full_name: common_utils::types::NameType, + pub full_name: Secret, pub organization: Option, pub email: Option, pub address: Address, diff --git a/crates/router/src/compatibility/stripe/customers/types.rs b/crates/router/src/compatibility/stripe/customers/types.rs index 8f523be7d7..83649f9823 100644 --- a/crates/router/src/compatibility/stripe/customers/types.rs +++ b/crates/router/src/compatibility/stripe/customers/types.rs @@ -42,7 +42,7 @@ pub struct StripeAddressDetails { pub struct CreateCustomerRequest { pub email: Option, pub invoice_prefix: Option, - pub name: Option, + pub name: Option>, pub phone: Option>, pub address: Option, pub metadata: Option, diff --git a/crates/router/src/compatibility/stripe/payment_intents/types.rs b/crates/router/src/compatibility/stripe/payment_intents/types.rs index fa95fe08e3..11eddab48f 100644 --- a/crates/router/src/compatibility/stripe/payment_intents/types.rs +++ b/crates/router/src/compatibility/stripe/payment_intents/types.rs @@ -64,7 +64,7 @@ pub struct StripeCard { pub exp_month: masking::Secret, pub exp_year: masking::Secret, pub cvc: masking::Secret, - pub holder_name: Option, + pub holder_name: Option>, } // ApplePay wallet param is not available in stripe Docs @@ -169,7 +169,7 @@ impl From for payments::PaymentMethodData { #[derive(Default, Serialize, PartialEq, Eq, Deserialize, Clone, Debug)] pub struct Shipping { pub address: AddressDetails, - pub name: Option, + pub name: Option>, pub carrier: Option, pub phone: Option>, pub tracking_number: Option>, @@ -950,9 +950,7 @@ fn get_pmd_based_on_payment_method_type( payments::PaymentMethodData::BankRedirect(payments::BankRedirectData::Ideal { billing_details: billing_details.as_ref().map(|billing_data| { payments::BankRedirectBilling { - billing_name: billing_data - .get_optional_full_name() - .map(common_utils::types::NameType::get_unchecked_from_secret), // this is unchecked because the input is coming from a checked type + billing_name: billing_data.get_optional_full_name(), email: billing_data.email.clone(), } }), diff --git a/crates/router/src/compatibility/stripe/setup_intents/types.rs b/crates/router/src/compatibility/stripe/setup_intents/types.rs index a4d6f36e13..158a134611 100644 --- a/crates/router/src/compatibility/stripe/setup_intents/types.rs +++ b/crates/router/src/compatibility/stripe/setup_intents/types.rs @@ -96,9 +96,7 @@ impl From for payments::Card { card_number: card.number, card_exp_month: card.exp_month, card_exp_year: card.exp_year, - card_holder_name: Some(common_utils::types::NameType::get_unchecked(String::from( - "Stripe_cust", - ))), // this is unchecked because valid input is being provided + card_holder_name: Some(masking::Secret::new("stripe_cust".to_owned())), card_cvc: card.cvc, card_issuer: None, card_network: None, diff --git a/crates/router/src/connector/netcetera/netcetera_types.rs b/crates/router/src/connector/netcetera/netcetera_types.rs index 12e4199099..4869c228b4 100644 --- a/crates/router/src/connector/netcetera/netcetera_types.rs +++ b/crates/router/src/connector/netcetera/netcetera_types.rs @@ -2,7 +2,9 @@ use std::collections::HashMap; use common_utils::{pii::Email, types::SemanticVersion}; use hyperswitch_connectors::utils::AddressDetailsData; +use masking::ExposeInterface; use serde::{Deserialize, Serialize}; +use unidecode::unidecode; use crate::{connector::utils::PhoneDetailsData, errors, types::api::MessageCategory}; @@ -823,9 +825,11 @@ impl .clone() .map(PhoneNumber::try_from) .transpose()?, - cardholder_name: billing_address - .address - .and_then(|address| address.get_optional_full_name()), + cardholder_name: billing_address.address.and_then(|address| { + address + .get_optional_full_name() + .map(|name| masking::Secret::new(unidecode(&name.expose()))) + }), ship_addr_city: shipping_address .as_ref() .and_then(|shipping_add| shipping_add.address.as_ref()) diff --git a/crates/router/src/connector/payone/transformers.rs b/crates/router/src/connector/payone/transformers.rs index 0e4593baaf..2ac9c08301 100644 --- a/crates/router/src/connector/payone/transformers.rs +++ b/crates/router/src/connector/payone/transformers.rs @@ -146,7 +146,6 @@ impl TryFrom>> card_holder_name: card_data .card_holder_name .clone() - .map(From::from) .get_required_value("card_holder_name") .change_context(errors::ConnectorError::MissingRequiredField { field_name: "payout_method_data.card.holder_name", diff --git a/crates/router/src/connector/riskified/transformers/api.rs b/crates/router/src/connector/riskified/transformers/api.rs index e882aafe8a..e8c1b87441 100644 --- a/crates/router/src/connector/riskified/transformers/api.rs +++ b/crates/router/src/connector/riskified/transformers/api.rs @@ -227,8 +227,8 @@ impl TryFrom<&RiskifiedRouterData<&frm_types::FrmCheckoutRouterData>> customer: RiskifiedCustomer { email: payment_data.request.email.clone(), - first_name: address.get_first_name().ok(), - last_name: address.get_last_name().ok(), + first_name: address.get_first_name().ok().cloned(), + last_name: address.get_last_name().ok().cloned(), created_at: common_utils::date_time::now(), verified_email: false, id: payment_data.get_customer_id()?, @@ -633,8 +633,8 @@ impl TryFrom<&hyperswitch_domain_models::address::Address> for OrderAddress { field_name: "address", })?; Ok(Self { - first_name: address.first_name.clone().map(From::from), - last_name: address.last_name.clone().map(From::from), + first_name: address.first_name.clone(), + last_name: address.last_name.clone(), address1: address.line1.clone(), country_code: address.country, city: address.city.clone(), diff --git a/crates/router/src/connector/signifyd/transformers/api.rs b/crates/router/src/connector/signifyd/transformers/api.rs index 45cc7e5061..028c0e8251 100644 --- a/crates/router/src/connector/signifyd/transformers/api.rs +++ b/crates/router/src/connector/signifyd/transformers/api.rs @@ -562,7 +562,7 @@ impl From for Product { impl From for Destination { fn from(destination: core_types::Destination) -> Self { Self { - full_name: destination.full_name.into(), + full_name: destination.full_name, organization: destination.organization, email: destination.email, address: Address::from(destination.address), diff --git a/crates/router/src/connector/stripe/transformers.rs b/crates/router/src/connector/stripe/transformers.rs index 70471985d9..e6dd1297fd 100644 --- a/crates/router/src/connector/stripe/transformers.rs +++ b/crates/router/src/connector/stripe/transformers.rs @@ -1692,11 +1692,11 @@ impl TryFrom<(&types::PaymentsAuthorizeRouterData, MinorUnit)> for PaymentIntent state: shipping_address.and_then(|a| a.state.clone()), name: format!( "{} {}", - String::from(first_name), + first_name.clone().expose(), shipping_detail .last_name .clone() - .map(String::from) + .expose_option() .unwrap_or_default() ) .into(), @@ -1728,8 +1728,8 @@ impl TryFrom<(&types::PaymentsAuthorizeRouterData, MinorUnit)> for PaymentIntent a.first_name.as_ref().map(|first_name| { format!( "{} {}", - String::from(first_name), - a.last_name.clone().map(String::from).unwrap_or_default() + first_name.clone().expose(), + a.last_name.clone().expose_option().unwrap_or_default() ) .into() }) diff --git a/crates/router/src/connector/stripe/transformers/connect.rs b/crates/router/src/connector/stripe/transformers/connect.rs index c749209509..9852338038 100644 --- a/crates/router/src/connector/stripe/transformers/connect.rs +++ b/crates/router/src/connector/stripe/transformers/connect.rs @@ -124,9 +124,9 @@ pub struct StripeConnectRecipientCreateRequest { #[serde(rename = "company[owners_provided]")] company_owners_provided: Option, #[serde(rename = "individual[first_name]")] - individual_first_name: Option, + individual_first_name: Option>, #[serde(rename = "individual[last_name]")] - individual_last_name: Option, + individual_last_name: Option>, #[serde(rename = "individual[dob][day]")] individual_dob_day: Option>, #[serde(rename = "individual[dob][month]")] diff --git a/crates/router/src/connector/utils.rs b/crates/router/src/connector/utils.rs index dfb8a89791..e6a69701ec 100644 --- a/crates/router/src/connector/utils.rs +++ b/crates/router/src/connector/utils.rs @@ -236,7 +236,7 @@ impl RouterData for types::RouterData RouterData for types::RouterData RouterData for types::RouterData RouterData for types::RouterData RouterData for types::RouterData RouterData for types::RouterData Result, Error>; - fn get_last_name(&self) -> Result, Error>; + fn get_first_name(&self) -> Result<&Secret, Error>; + fn get_last_name(&self) -> Result<&Secret, Error>; fn get_full_name(&self) -> Result, Error>; fn get_line1(&self) -> Result<&Secret, Error>; fn get_city(&self) -> Result<&String, Error>; @@ -1862,17 +1862,15 @@ pub trait AddressDetailsData { } impl AddressDetailsData for hyperswitch_domain_models::address::AddressDetails { - fn get_first_name(&self) -> Result, Error> { + fn get_first_name(&self) -> Result<&Secret, Error> { self.first_name - .clone() - .map(From::from) + .as_ref() .ok_or_else(missing_field_err("address.first_name")) } - fn get_last_name(&self) -> Result, Error> { + fn get_last_name(&self) -> Result<&Secret, Error> { self.last_name - .clone() - .map(From::from) + .as_ref() .ok_or_else(missing_field_err("address.last_name")) } @@ -1881,6 +1879,7 @@ impl AddressDetailsData for hyperswitch_domain_models::address::AddressDetails { let last_name = self .get_last_name() .ok() + .cloned() .unwrap_or(Secret::new("".to_string())); let last_name = last_name.peek(); let full_name = format!("{} {}", first_name, last_name).trim().to_string(); diff --git a/crates/router/src/core/customers.rs b/crates/router/src/core/customers.rs index 5b4a50784c..c46cadd1e3 100644 --- a/crates/router/src/core/customers.rs +++ b/crates/router/src/core/customers.rs @@ -147,7 +147,7 @@ impl CustomerCreateBridge for customers::CustomerRequest { types::CryptoOperation::BatchEncrypt( domain::FromRequestEncryptableCustomer::to_encryptable( domain::FromRequestEncryptableCustomer { - name: self.name.clone().map(From::from), + name: self.name.clone(), email: self.email.clone().map(|a| a.expose().switch_strategy()), phone: self.phone.clone(), }, diff --git a/crates/router/src/core/locker_migration.rs b/crates/router/src/core/locker_migration.rs index fb7432f44a..dbadadb3a6 100644 --- a/crates/router/src/core/locker_migration.rs +++ b/crates/router/src/core/locker_migration.rs @@ -165,7 +165,7 @@ pub async fn call_to_locker( card_exp_month: card.card_exp_month, card_exp_year: card.card_exp_year, card_holder_name: card.name_on_card, - nick_name: card.nick_name, + nick_name: card.nick_name.map(masking::Secret::new), card_issuing_country: None, card_network: None, card_issuer: None, diff --git a/crates/router/src/core/payment_methods.rs b/crates/router/src/core/payment_methods.rs index c6c76edd4a..b8fe4e8362 100644 --- a/crates/router/src/core/payment_methods.rs +++ b/crates/router/src/core/payment_methods.rs @@ -786,8 +786,7 @@ pub(crate) async fn get_payment_method_create_request( card_number: card.card_number.clone(), card_exp_month: card.card_exp_month.clone(), card_exp_year: card.card_exp_year.clone(), - card_holder_name: card.card_holder_name.clone().or(billing_name - .map(common_utils::types::NameType::get_unchecked_from_secret)), // this is unchecked because billing name is coming from a checked type + card_holder_name: billing_name, nick_name: card.nick_name.clone(), card_issuing_country: card.card_issuing_country.clone(), card_network: card.card_network.clone(), diff --git a/crates/router/src/core/payment_methods/cards.rs b/crates/router/src/core/payment_methods/cards.rs index 0898ff2708..dc79cd6845 100644 --- a/crates/router/src/core/payment_methods/cards.rs +++ b/crates/router/src/core/payment_methods/cards.rs @@ -2326,15 +2326,21 @@ pub fn validate_payment_method_update( }) || card_updation_obj .card_holder_name - .map(String::from) + .map(|name| name.expose()) .is_some_and(|new_card_holder_name| { - existing_card_data.card_holder_name.map(String::from) != Some(new_card_holder_name) + existing_card_data + .card_holder_name + .map(|name| name.expose()) + != Some(new_card_holder_name) }) || card_updation_obj .nick_name - .map(String::from) + .map(|nick_name| nick_name.expose()) .is_some_and(|new_nick_name| { - existing_card_data.nick_name.map(String::from) != Some(new_nick_name) + existing_card_data + .nick_name + .map(|nick_name| nick_name.expose()) + != Some(new_nick_name) }) } @@ -2567,7 +2573,7 @@ pub async fn add_card_hs( card_exp_year: card.card_exp_year.to_owned(), card_brand: card.card_network.as_ref().map(ToString::to_string), card_isin: None, - nick_name: card.nick_name.to_owned(), + nick_name: card.nick_name.as_ref().map(Secret::peek).cloned(), }, ttl: state.conf.locker.ttl_for_storage_in_secs, }); @@ -2990,12 +2996,8 @@ pub async fn mock_call_to_locker_hs( card_number: store_card_req.card.card_number.peek().to_string(), card_exp_year: store_card_req.card.card_exp_year.peek().to_string(), card_exp_month: store_card_req.card.card_exp_month.peek().to_string(), - name_on_card: store_card_req - .card - .name_on_card - .to_owned() - .map(String::from), - nickname: store_card_req.card.nick_name.to_owned().map(String::from), + name_on_card: store_card_req.card.name_on_card.to_owned().expose_option(), + nickname: store_card_req.card.nick_name.to_owned(), ..locker_mock_up }, payment_methods::StoreLockerReq::LockerGeneric(store_generic_req) => { @@ -3046,16 +3048,8 @@ pub async fn mock_get_card<'a>( .map(Some)?, card_exp_year: Some(locker_mock_up.card_exp_year.into()), card_exp_month: Some(locker_mock_up.card_exp_month.into()), - name_on_card: locker_mock_up - .name_on_card - .map(common_utils::types::NameType::try_from) - .transpose() - .change_context(errors::VaultError::ResponseDeserializationFailed)?, - nickname: locker_mock_up - .nickname - .map(common_utils::types::NameType::try_from) - .transpose() - .change_context(errors::VaultError::ResponseDeserializationFailed)?, + name_on_card: locker_mock_up.name_on_card.map(|card| card.into()), + nickname: locker_mock_up.nickname, customer_id: locker_mock_up.customer_id, duplicate: locker_mock_up.duplicate, }; @@ -5682,12 +5676,16 @@ impl TempLockerCardSupport { .clone() .expose_option() .get_required_value("expiry_year")?; - let card_holder_name = card.card_holder_name.clone(); + let card_holder_name = card + .card_holder_name + .clone() + .expose_option() + .unwrap_or_default(); let value1 = payment_methods::mk_card_value1( card_number, card_exp_year, card_exp_month, - card_holder_name, + Some(card_holder_name), None, None, None, @@ -6154,7 +6152,7 @@ pub async fn execute_payment_method_tokenization( &network_token_details, &customer.id, card_details.name_on_card.clone(), - card_details.nick_name.clone(), + card_details.nick_name.clone().map(Secret::new), ) .await?; let builder = builder.set_stored_token_response(&store_token_resp); diff --git a/crates/router/src/core/payment_methods/network_tokenization.rs b/crates/router/src/core/payment_methods/network_tokenization.rs index bd9bf07c46..8aa371e7a7 100644 --- a/crates/router/src/core/payment_methods/network_tokenization.rs +++ b/crates/router/src/core/payment_methods/network_tokenization.rs @@ -364,8 +364,8 @@ pub async fn make_card_network_tokenization_request( card_network: Some(resp.card_brand), card_type: card.card_type.clone(), card_issuing_country: card.card_issuing_country, - card_holder_name: card.card_holder_name.clone().map(From::from), - nick_name: card.nick_name.clone().map(From::from), + card_holder_name: card.card_holder_name.clone(), + nick_name: card.nick_name.clone(), }; Ok((network_token_details, network_token_req_ref_id)) } diff --git a/crates/router/src/core/payment_methods/tokenize.rs b/crates/router/src/core/payment_methods/tokenize.rs index 92625f8f67..bd0a5a2192 100644 --- a/crates/router/src/core/payment_methods/tokenize.rs +++ b/crates/router/src/core/payment_methods/tokenize.rs @@ -8,7 +8,7 @@ use common_utils::{ }; use error_stack::{report, ResultExt}; use hyperswitch_domain_models::router_request_types as domain_request_types; -use masking::Secret; +use masking::{ExposeInterface, Secret}; use router_env::logger; use super::migration; @@ -234,8 +234,8 @@ pub trait NetworkTokenizationProcess<'a, D> { &self, network_token: &NetworkTokenizationResponse, customer_id: &id_type::CustomerId, - card_holder_name: Option, - nick_name: Option, + card_holder_name: Option>, + nick_name: Option>, ) -> RouterResult; } @@ -386,8 +386,8 @@ where &self, network_token: &NetworkTokenizationResponse, customer_id: &id_type::CustomerId, - card_holder_name: Option, - nick_name: Option, + card_holder_name: Option>, + nick_name: Option>, ) -> RouterResult { let network_token = &network_token.0; let merchant_id = self.merchant_account.get_id(); @@ -402,7 +402,7 @@ where card_brand: Some(network_token.card_brand.to_string()), card_isin: Some(network_token.token_isin.clone()), name_on_card: card_holder_name, - nick_name: nick_name.clone(), + nick_name: nick_name.map(|nick_name| nick_name.expose()), }, requestor_card_reference: None, ttl: self.state.conf.locker.ttl_for_storage_in_secs, diff --git a/crates/router/src/core/payment_methods/tokenize/card_executor.rs b/crates/router/src/core/payment_methods/tokenize/card_executor.rs index aede4f7a1d..eb9d3d6b6c 100644 --- a/crates/router/src/core/payment_methods/tokenize/card_executor.rs +++ b/crates/router/src/core/payment_methods/tokenize/card_executor.rs @@ -489,7 +489,10 @@ impl CardNetworkTokenizeExecutor<'_, domain::TokenizeCardRequest> { card_exp_year: card.card_exp_year.clone(), card_isin: Some(card.card_number.get_card_isin().clone()), name_on_card: card.card_holder_name.clone(), - nick_name: card.nick_name.clone(), + nick_name: card + .nick_name + .as_ref() + .map(|nick_name| nick_name.clone().expose()), card_brand: None, }, requestor_card_reference: None, diff --git a/crates/router/src/core/payment_methods/tokenize/payment_method_executor.rs b/crates/router/src/core/payment_methods/tokenize/payment_method_executor.rs index e06b48bb99..2249434b10 100644 --- a/crates/router/src/core/payment_methods/tokenize/payment_method_executor.rs +++ b/crates/router/src/core/payment_methods/tokenize/payment_method_executor.rs @@ -134,7 +134,10 @@ impl<'a> NetworkTokenizationBuilder<'a, PmValidated> { bank_code: optional_card_info .as_ref() .and_then(|card_info| card_info.bank_code.clone()), - nick_name: card_from_locker.nick_name.clone(), + nick_name: card_from_locker + .nick_name + .as_ref() + .map(|nick_name| Secret::new(nick_name.clone())), card_holder_name: card_from_locker.name_on_card.clone(), card_issuer: optional_card_info .as_ref() diff --git a/crates/router/src/core/payment_methods/transformers.rs b/crates/router/src/core/payment_methods/transformers.rs index 2e4622d9c8..56a3173285 100644 --- a/crates/router/src/core/payment_methods/transformers.rs +++ b/crates/router/src/core/payment_methods/transformers.rs @@ -141,8 +141,8 @@ pub struct AddCardResponse { pub card_number: Option, pub card_exp_year: Option>, pub card_exp_month: Option>, - pub name_on_card: Option, - pub nickname: Option, + pub name_on_card: Option>, + pub nickname: Option, pub customer_id: Option, pub duplicate: Option, } @@ -831,7 +831,7 @@ pub fn get_card_detail( card_token: None, card_fingerprint: None, card_holder_name: response.name_on_card, - nick_name: response.nick_name, + nick_name: response.nick_name.map(Secret::new), card_isin: None, card_issuer: None, card_network: None, @@ -858,7 +858,7 @@ pub fn get_card_detail( expiry_year: Some(response.card_exp_year), card_fingerprint: None, card_holder_name: response.name_on_card, - nick_name: response.nick_name, + nick_name: response.nick_name.map(Secret::new), card_isin: None, card_issuer: None, card_network: None, @@ -900,8 +900,8 @@ pub fn mk_card_value1( card_number: cards::CardNumber, exp_year: String, exp_month: String, - name_on_card: Option, - nickname: Option, + name_on_card: Option, + nickname: Option, card_last_four: Option, card_token: Option, ) -> CustomResult { diff --git a/crates/router/src/core/payment_methods/vault.rs b/crates/router/src/core/payment_methods/vault.rs index f3e35a68b8..71d57ef796 100644 --- a/crates/router/src/core/payment_methods/vault.rs +++ b/crates/router/src/core/payment_methods/vault.rs @@ -63,7 +63,7 @@ impl Vaultable for domain::Card { card_number: self.card_number.peek().clone(), exp_year: self.card_exp_year.peek().clone(), exp_month: self.card_exp_month.peek().clone(), - nickname: self.nick_name.clone(), + nickname: self.nick_name.as_ref().map(|name| name.peek().clone()), card_last_four: None, card_token: None, card_holder_name: self.card_holder_name.clone(), @@ -119,7 +119,7 @@ impl Vaultable for domain::Card { bank_code: None, card_issuing_country: None, card_type: None, - nick_name: value1.nickname, + nick_name: value1.nickname.map(masking::Secret::new), card_holder_name: value1.card_holder_name, }; @@ -463,7 +463,7 @@ impl Vaultable for api::CardPayout { card_number: self.card_number.peek().clone(), exp_year: self.expiry_year.peek().clone(), exp_month: self.expiry_month.peek().clone(), - name_on_card: self.card_holder_name.clone(), + name_on_card: self.card_holder_name.clone().map(|n| n.peek().to_string()), nickname: None, card_last_four: None, card_token: None, @@ -514,7 +514,7 @@ impl Vaultable for api::CardPayout { .map_err(|_| errors::VaultError::FetchCardFailed)?, expiry_month: value1.exp_month.into(), expiry_year: value1.exp_year.into(), - card_holder_name: value1.name_on_card, + card_holder_name: value1.name_on_card.map(masking::Secret::new), }; let supp_data = SupplementaryVaultData { diff --git a/crates/router/src/core/payments/helpers.rs b/crates/router/src/core/payments/helpers.rs index 5e63f78956..a701d16fe1 100644 --- a/crates/router/src/core/payments/helpers.rs +++ b/crates/router/src/core/payments/helpers.rs @@ -128,11 +128,11 @@ pub async fn create_or_update_address_for_payment_by_request( first_name: address .address .as_ref() - .and_then(|a| a.first_name.clone().map(From::from)), + .and_then(|a| a.first_name.clone()), last_name: address .address .as_ref() - .and_then(|a| a.last_name.clone().map(From::from)), + .and_then(|a| a.last_name.clone()), zip: address.address.as_ref().and_then(|a| a.zip.clone()), phone_number: address .phone @@ -341,14 +341,8 @@ pub async fn get_domain_address( line2: address.address.as_ref().and_then(|a| a.line2.clone()), line3: address.address.as_ref().and_then(|a| a.line3.clone()), state: address.address.as_ref().and_then(|a| a.state.clone()), - first_name: address - .address - .as_ref() - .and_then(|a| a.first_name.clone().map(From::from)), - last_name: address - .address - .as_ref() - .and_then(|a| a.last_name.clone().map(From::from)), + first_name: address.address.as_ref().and_then(|a| a.first_name.clone()), + last_name: address.address.as_ref().and_then(|a| a.last_name.clone()), zip: address.address.as_ref().and_then(|a| a.zip.clone()), phone_number: address .phone @@ -1886,7 +1880,7 @@ pub async fn retrieve_payment_method_with_temporary_token( card_token_data.and_then(|token_data| token_data.card_holder_name.clone()); if let Some(name) = name_on_card.clone() { - if !name.is_empty() { + if !name.peek().is_empty() { is_card_updated = true; updated_card.nick_name = name_on_card; } @@ -2278,7 +2272,7 @@ pub async fn fetch_card_details_from_locker( // The card_holder_name from locker retrieved card is considered if it is a non-empty string or else card_holder_name is picked // from payment_method_data.card_token object let name_on_card = if let Some(name) = card.name_on_card.clone() { - if name.is_empty() { + if name.clone().expose().is_empty() { card_token_data .and_then(|token_data| token_data.card_holder_name.clone()) .or(Some(name)) @@ -2300,7 +2294,7 @@ pub async fn fetch_card_details_from_locker( .card_cvc .unwrap_or_default(), card_issuer: None, - nick_name: card.nick_name, + nick_name: card.nick_name.map(masking::Secret::new), card_network: card .card_brand .map(|card_brand| enums::CardNetwork::from_str(&card_brand)) @@ -2358,7 +2352,7 @@ pub async fn fetch_network_token_details_from_locker( token_cryptogram: None, token_exp_month: token_data.card_exp_month, token_exp_year: token_data.card_exp_year, - nick_name: token_data.nick_name, + nick_name: token_data.nick_name.map(masking::Secret::new), card_issuer: None, card_network, card_type: None, @@ -2405,7 +2399,7 @@ pub async fn fetch_card_details_for_network_transaction_flow_from_locker( card_type: None, card_issuing_country: None, bank_code: None, - nick_name: card_details_from_locker.nick_name, + nick_name: card_details_from_locker.nick_name.map(masking::Secret::new), card_holder_name: card_details_from_locker.name_on_card.clone(), }; diff --git a/crates/router/src/core/payouts/helpers.rs b/crates/router/src/core/payouts/helpers.rs index 5d9888989f..cdb021311e 100644 --- a/crates/router/src/core/payouts/helpers.rs +++ b/crates/router/src/core/payouts/helpers.rs @@ -1421,7 +1421,7 @@ pub async fn get_additional_payout_data( card_extended_bin: card_extended_bin.clone(), card_exp_month: Some(card_data.expiry_month.clone()), card_exp_year: Some(card_data.expiry_year.clone()), - card_holder_name: card_data.card_holder_name.clone().map(From::from), + card_holder_name: card_data.card_holder_name.clone(), }, )) }); @@ -1438,7 +1438,7 @@ pub async fn get_additional_payout_data( card_extended_bin, card_exp_month: Some(card_data.expiry_month.clone()), card_exp_year: Some(card_data.expiry_year.clone()), - card_holder_name: card_data.card_holder_name.clone().map(From::from), + card_holder_name: card_data.card_holder_name.clone(), }, )) })) diff --git a/crates/router/src/core/unified_authentication_service.rs b/crates/router/src/core/unified_authentication_service.rs index 45d0ed9251..9f028f1228 100644 --- a/crates/router/src/core/unified_authentication_service.rs +++ b/crates/router/src/core/unified_authentication_service.rs @@ -259,7 +259,7 @@ impl UnifiedAuthenticationService for ExternalAuthentication payment_data_type: None, encrypted_src_card_details: None, card_expiry_date: card.card_exp_year.clone(), - cardholder_name: card.card_holder_name.clone().map(From::from), + cardholder_name: card.card_holder_name.clone(), card_token_number: card.card_cvc.clone(), account_type: card.card_network.clone(), }) diff --git a/crates/router/src/core/utils.rs b/crates/router/src/core/utils.rs index a9ef9e8068..87dce4ade0 100644 --- a/crates/router/src/core/utils.rs +++ b/crates/router/src/core/utils.rs @@ -74,8 +74,6 @@ pub async fn construct_payout_router_data<'a, F>( merchant_account: &domain::MerchantAccount, payout_data: &mut PayoutData, ) -> RouterResult> { - use common_utils::types::NameType; - let merchant_connector_account = payout_data .merchant_connector_account .clone() @@ -93,16 +91,6 @@ pub async fn construct_payout_router_data<'a, F>( number: a.phone_number.clone().map(Encryptable::into_inner), country_code: a.country_code.to_owned(), }; - let first_name = a - .first_name - .clone() - .map(Encryptable::into_inner) - .map(NameType::get_unchecked_from_secret); // this is unchecked because this value is fetched from db - let last_name = a - .last_name - .clone() - .map(Encryptable::into_inner) - .map(NameType::get_unchecked_from_secret); // this is unchecked because this value is fetched from db let address_details = api_models::payments::AddressDetails { city: a.city.to_owned(), country: a.country.to_owned(), @@ -110,8 +98,8 @@ pub async fn construct_payout_router_data<'a, F>( line2: a.line2.clone().map(Encryptable::into_inner), line3: a.line3.clone().map(Encryptable::into_inner), zip: a.zip.clone().map(Encryptable::into_inner), - first_name, - last_name, + first_name: a.first_name.clone().map(Encryptable::into_inner), + last_name: a.last_name.clone().map(Encryptable::into_inner), state: a.state.map(Encryptable::into_inner), }; diff --git a/crates/router/src/types/api/payments.rs b/crates/router/src/types/api/payments.rs index 4d1730f644..9f509f3bcb 100644 --- a/crates/router/src/types/api/payments.rs +++ b/crates/router/src/types/api/payments.rs @@ -135,18 +135,14 @@ mod payments_test { card_number: "1234432112344321".to_string().try_into().unwrap(), card_exp_month: "12".to_string().into(), card_exp_year: "99".to_string().into(), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "JohnDoe".to_string(), - )), + card_holder_name: Some(masking::Secret::new("JohnDoe".to_string())), card_cvc: "123".to_string().into(), card_issuer: Some("HDFC".to_string()), card_network: Some(api_models::enums::CardNetwork::Visa), bank_code: None, card_issuing_country: None, card_type: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), + nick_name: Some(masking::Secret::new("nick_name".into())), } } diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs index 1c60de60bd..c11751c832 100644 --- a/crates/router/src/types/transformers.rs +++ b/crates/router/src/types/transformers.rs @@ -771,16 +771,6 @@ impl From<&domain::Address> for hyperswitch_domain_models::address::Address { { None } else { - let first_name = address - .first_name - .clone() - .map(Encryptable::into_inner) - .map(common_utils::types::NameType::get_unchecked_from_secret); - let last_name = address - .last_name - .clone() - .map(Encryptable::into_inner) - .map(common_utils::types::NameType::get_unchecked_from_secret); Some(hyperswitch_domain_models::address::AddressDetails { city: address.city.clone(), country: address.country, @@ -789,8 +779,8 @@ impl From<&domain::Address> for hyperswitch_domain_models::address::Address { line3: address.line3.clone().map(Encryptable::into_inner), state: address.state.clone().map(Encryptable::into_inner), zip: address.zip.clone().map(Encryptable::into_inner), - first_name, - last_name, + first_name: address.first_name.clone().map(Encryptable::into_inner), + last_name: address.last_name.clone().map(Encryptable::into_inner), }) }; @@ -827,16 +817,6 @@ impl ForeignFrom for api_types::Address { { None } else { - let first_name = address - .first_name - .clone() - .map(Encryptable::into_inner) - .map(common_utils::types::NameType::get_unchecked_from_secret); - let last_name = address - .last_name - .clone() - .map(Encryptable::into_inner) - .map(common_utils::types::NameType::get_unchecked_from_secret); Some(api_types::AddressDetails { city: address.city.clone(), country: address.country, @@ -845,8 +825,8 @@ impl ForeignFrom for api_types::Address { line3: address.line3.clone().map(Encryptable::into_inner), state: address.state.clone().map(Encryptable::into_inner), zip: address.zip.clone().map(Encryptable::into_inner), - first_name, - last_name, + first_name: address.first_name.clone().map(Encryptable::into_inner), + last_name: address.last_name.clone().map(Encryptable::into_inner), }) }; @@ -1811,16 +1791,6 @@ impl ForeignFrom<(storage::PaymentLink, payments::PaymentLinkStatus)> impl From for payments::AddressDetails { fn from(addr: domain::Address) -> Self { - let first_name = addr - .first_name - .clone() - .map(Encryptable::into_inner) - .map(|name| common_utils::types::NameType::get_unchecked(name.expose())); - let last_name = addr - .last_name - .clone() - .map(Encryptable::into_inner) - .map(|name| common_utils::types::NameType::get_unchecked(name.expose())); Self { city: addr.city, country: addr.country, @@ -1829,8 +1799,8 @@ impl From for payments::AddressDetails { line3: addr.line3.map(Encryptable::into_inner), zip: addr.zip.map(Encryptable::into_inner), state: addr.state.map(Encryptable::into_inner), - first_name, - last_name, + first_name: addr.first_name.map(Encryptable::into_inner), + last_name: addr.last_name.map(Encryptable::into_inner), } } } diff --git a/crates/router/src/utils.rs b/crates/router/src/utils.rs index 9987b52cd0..59ee4e4fb3 100644 --- a/crates/router/src/utils.rs +++ b/crates/router/src/utils.rs @@ -780,8 +780,8 @@ impl CustomerAddress for api_models::customers::CustomerRequest { line2: address_details.line2.clone(), line3: address_details.line3.clone(), state: address_details.state.clone(), - first_name: address_details.first_name.clone().map(From::from), - last_name: address_details.last_name.clone().map(From::from), + first_name: address_details.first_name.clone(), + last_name: address_details.last_name.clone(), zip: address_details.zip.clone(), phone_number: self.phone.clone(), email: self @@ -842,8 +842,8 @@ impl CustomerAddress for api_models::customers::CustomerRequest { line2: address_details.line2.clone(), line3: address_details.line3.clone(), state: address_details.state.clone(), - first_name: address_details.first_name.clone().map(From::from), - last_name: address_details.last_name.clone().map(From::from), + first_name: address_details.first_name.clone(), + last_name: address_details.last_name.clone(), zip: address_details.zip.clone(), phone_number: self.phone.clone(), email: self @@ -916,8 +916,8 @@ impl CustomerAddress for api_models::customers::CustomerUpdateRequest { line2: address_details.line2.clone(), line3: address_details.line3.clone(), state: address_details.state.clone(), - first_name: address_details.first_name.clone().map(From::from), - last_name: address_details.last_name.clone().map(From::from), + first_name: address_details.first_name.clone(), + last_name: address_details.last_name.clone(), zip: address_details.zip.clone(), phone_number: self.phone.clone(), email: self @@ -977,8 +977,8 @@ impl CustomerAddress for api_models::customers::CustomerUpdateRequest { line2: address_details.line2.clone(), line3: address_details.line3.clone(), state: address_details.state.clone(), - first_name: address_details.first_name.clone().map(From::from), - last_name: address_details.last_name.clone().map(From::from), + first_name: address_details.first_name.clone(), + last_name: address_details.last_name.clone(), zip: address_details.zip.clone(), phone_number: self.phone.clone(), email: self diff --git a/crates/router/tests/connectors/aci.rs b/crates/router/tests/connectors/aci.rs index b49b788325..8b3372d7de 100644 --- a/crates/router/tests/connectors/aci.rs +++ b/crates/router/tests/connectors/aci.rs @@ -50,12 +50,8 @@ fn construct_payment_router_data() -> types::PaymentsAuthorizeRouterData { card_type: None, card_issuing_country: None, bank_code: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "card holder name".to_string(), - )), + nick_name: Some(Secret::new("nick_name".into())), + card_holder_name: Some(Secret::new("card holder name".into())), }), confirm: true, statement_descriptor_suffix: None, @@ -92,12 +88,8 @@ fn construct_payment_router_data() -> types::PaymentsAuthorizeRouterData { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "John".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "Doe".to_string(), - )), + first_name: Some(Secret::new("John".to_string())), + last_name: Some(Secret::new("Doe".to_string())), ..Default::default() }), phone: Some(PhoneDetails { @@ -308,12 +300,8 @@ async fn payments_create_failure() { card_type: None, card_issuing_country: None, bank_code: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "card holder name".to_string(), - )), + nick_name: Some(Secret::new("nick_name".into())), + card_holder_name: Some(Secret::new("card holder name".into())), }); let response = services::api::execute_connector_processing_step( diff --git a/crates/router/tests/connectors/adyen.rs b/crates/router/tests/connectors/adyen.rs index f57f7e5146..c7ad3b69a3 100644 --- a/crates/router/tests/connectors/adyen.rs +++ b/crates/router/tests/connectors/adyen.rs @@ -62,12 +62,8 @@ impl AdyenTest { line1: Some(Secret::new("1467".to_string())), line2: Some(Secret::new("Harrison Street".to_string())), line3: None, - first_name: Some(common_utils::types::NameType::get_unchecked( - "John".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "Dough".to_string(), - )), + first_name: Some(Secret::new("John".to_string())), + last_name: Some(Secret::new("Dough".to_string())), }), phone: Some(PhoneDetails { number: Some(Secret::new("9123456789".to_string())), @@ -112,9 +108,7 @@ impl AdyenTest { card_number: cards::CardNumber::from_str("4111111111111111").unwrap(), expiry_month: Secret::new("3".to_string()), expiry_year: Secret::new("2030".to_string()), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "John Doe".to_string(), - )), + card_holder_name: Some(Secret::new("John Doe".to_string())), }, )), enums::PayoutType::Bank => Some(types::api::PayoutMethodData::Bank( @@ -158,12 +152,8 @@ impl AdyenTest { card_type: None, card_issuing_country: None, bank_code: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "card holder name".to_string(), - )), + nick_name: Some(Secret::new("nick_name".into())), + card_holder_name: Some(Secret::new("card holder name".into())), }), confirm: true, statement_descriptor_suffix: None, diff --git a/crates/router/tests/connectors/airwallex.rs b/crates/router/tests/connectors/airwallex.rs index 10fdbff182..0e538818d5 100644 --- a/crates/router/tests/connectors/airwallex.rs +++ b/crates/router/tests/connectors/airwallex.rs @@ -57,12 +57,8 @@ fn get_default_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "John".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "Doe".to_string(), - )), + first_name: Some(Secret::new("John".to_string())), + last_name: Some(Secret::new("Doe".to_string())), ..Default::default() }), phone: None, @@ -85,11 +81,8 @@ fn payment_method_details() -> Option { card_type: None, card_issuing_country: None, bank_code: None, - nick_name: common_utils::types::NameType::try_from("nick_name".to_string()).ok(), - card_holder_name: common_utils::types::NameType::try_from( - "card holder name".to_string(), - ) - .ok(), + nick_name: Some(Secret::new("nick_name".into())), + card_holder_name: Some(Secret::new("card holder name".into())), }), capture_method: Some(diesel_models::enums::CaptureMethod::Manual), router_return_url: Some("https://google.com".to_string()), diff --git a/crates/router/tests/connectors/bitpay.rs b/crates/router/tests/connectors/bitpay.rs index 8e28151959..70af3b7521 100644 --- a/crates/router/tests/connectors/bitpay.rs +++ b/crates/router/tests/connectors/bitpay.rs @@ -43,12 +43,8 @@ fn get_default_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "first".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "last".to_string(), - )), + first_name: Some(Secret::new("first".to_string())), + last_name: Some(Secret::new("last".to_string())), line1: Some(Secret::new("line1".to_string())), line2: Some(Secret::new("line2".to_string())), city: Some("city".to_string()), diff --git a/crates/router/tests/connectors/bluesnap.rs b/crates/router/tests/connectors/bluesnap.rs index 6ee32b956d..d6df20d7ee 100644 --- a/crates/router/tests/connectors/bluesnap.rs +++ b/crates/router/tests/connectors/bluesnap.rs @@ -50,12 +50,8 @@ fn get_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "joseph".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "Doe".to_string(), - )), + first_name: Some(Secret::new("joseph".to_string())), + last_name: Some(Secret::new("Doe".to_string())), ..Default::default() }), phone: None, diff --git a/crates/router/tests/connectors/coinbase.rs b/crates/router/tests/connectors/coinbase.rs index 8d4223c0ab..7320b875ca 100644 --- a/crates/router/tests/connectors/coinbase.rs +++ b/crates/router/tests/connectors/coinbase.rs @@ -44,12 +44,8 @@ fn get_default_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "first".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "last".to_string(), - )), + first_name: Some(Secret::new("first".to_string())), + last_name: Some(Secret::new("last".to_string())), line1: Some(Secret::new("line1".to_string())), line2: Some(Secret::new("line2".to_string())), city: Some("city".to_string()), diff --git a/crates/router/tests/connectors/cryptopay.rs b/crates/router/tests/connectors/cryptopay.rs index 4cf54789a3..58fcdc6dae 100644 --- a/crates/router/tests/connectors/cryptopay.rs +++ b/crates/router/tests/connectors/cryptopay.rs @@ -43,12 +43,8 @@ fn get_default_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "first".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "last".to_string(), - )), + first_name: Some(Secret::new("first".to_string())), + last_name: Some(Secret::new("last".to_string())), line1: Some(Secret::new("line1".to_string())), line2: Some(Secret::new("line2".to_string())), city: Some("city".to_string()), diff --git a/crates/router/tests/connectors/cybersource.rs b/crates/router/tests/connectors/cybersource.rs index 0bac235d0f..08001ddd78 100644 --- a/crates/router/tests/connectors/cybersource.rs +++ b/crates/router/tests/connectors/cybersource.rs @@ -40,12 +40,8 @@ fn get_default_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "first".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "last".to_string(), - )), + first_name: Some(Secret::new("first".to_string())), + last_name: Some(Secret::new("last".to_string())), line1: Some(Secret::new("line1".to_string())), line2: Some(Secret::new("line2".to_string())), city: Some("city".to_string()), diff --git a/crates/router/tests/connectors/fiserv.rs b/crates/router/tests/connectors/fiserv.rs index 7d11608c63..78235278ed 100644 --- a/crates/router/tests/connectors/fiserv.rs +++ b/crates/router/tests/connectors/fiserv.rs @@ -52,12 +52,8 @@ fn payment_method_details() -> Option { card_type: None, card_issuing_country: None, bank_code: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "card holder name".to_string(), - )), + nick_name: Some(Secret::new("nick_name".into())), + card_holder_name: Some(Secret::new("card holder name".into())), }), capture_method: Some(diesel_models::enums::CaptureMethod::Manual), ..utils::PaymentAuthorizeType::default().0 diff --git a/crates/router/tests/connectors/forte.rs b/crates/router/tests/connectors/forte.rs index f06f1b7c60..3c5cde492c 100644 --- a/crates/router/tests/connectors/forte.rs +++ b/crates/router/tests/connectors/forte.rs @@ -57,12 +57,8 @@ fn get_default_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "first".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "last".to_string(), - )), + first_name: Some(Secret::new("first".to_string())), + last_name: Some(Secret::new("last".to_string())), line1: Some(Secret::new("line1".to_string())), line2: Some(Secret::new("line2".to_string())), city: Some("city".to_string()), diff --git a/crates/router/tests/connectors/iatapay.rs b/crates/router/tests/connectors/iatapay.rs index c715e4f740..89fc270e6a 100644 --- a/crates/router/tests/connectors/iatapay.rs +++ b/crates/router/tests/connectors/iatapay.rs @@ -60,12 +60,8 @@ fn get_default_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "first".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "last".to_string(), - )), + first_name: Some(Secret::new("first".to_string())), + last_name: Some(Secret::new("last".to_string())), line1: Some(Secret::new("line1".to_string())), line2: Some(Secret::new("line2".to_string())), city: Some("city".to_string()), diff --git a/crates/router/tests/connectors/multisafepay.rs b/crates/router/tests/connectors/multisafepay.rs index 1f88ec0c8d..1a81b00116 100644 --- a/crates/router/tests/connectors/multisafepay.rs +++ b/crates/router/tests/connectors/multisafepay.rs @@ -42,12 +42,8 @@ fn get_default_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "John".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "Doe".to_string(), - )), + first_name: Some(Secret::new("John".to_string())), + last_name: Some(Secret::new("Doe".to_string())), line1: Some(Secret::new("Kraanspoor".to_string())), line2: Some(Secret::new("line2".to_string())), line3: Some(Secret::new("line3".to_string())), diff --git a/crates/router/tests/connectors/opennode.rs b/crates/router/tests/connectors/opennode.rs index 0c6f375fbd..6605ea46c3 100644 --- a/crates/router/tests/connectors/opennode.rs +++ b/crates/router/tests/connectors/opennode.rs @@ -43,12 +43,8 @@ fn get_default_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "first".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "last".to_string(), - )), + first_name: Some(Secret::new("first".to_string())), + last_name: Some(Secret::new("last".to_string())), line1: Some(Secret::new("line1".to_string())), line2: Some(Secret::new("line2".to_string())), city: Some("city".to_string()), diff --git a/crates/router/tests/connectors/payme.rs b/crates/router/tests/connectors/payme.rs index b7b6376ec1..b56e1ec83d 100644 --- a/crates/router/tests/connectors/payme.rs +++ b/crates/router/tests/connectors/payme.rs @@ -54,12 +54,8 @@ fn get_default_payment_info() -> Option { line3: None, zip: None, state: None, - first_name: Some(common_utils::types::NameType::get_unchecked( - "John".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "Doe".to_string(), - )), + first_name: Some(Secret::new("John".to_string())), + last_name: Some(Secret::new("Doe".to_string())), }), phone: None, email: None, diff --git a/crates/router/tests/connectors/rapyd.rs b/crates/router/tests/connectors/rapyd.rs index 455d321fc2..ee6ac303e8 100644 --- a/crates/router/tests/connectors/rapyd.rs +++ b/crates/router/tests/connectors/rapyd.rs @@ -52,12 +52,8 @@ async fn should_only_authorize_payment() { card_type: None, card_issuing_country: None, bank_code: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "card holder name".to_string(), - )), + nick_name: Some(Secret::new("nick_name".into())), + card_holder_name: Some(Secret::new("card holder name".into())), }), capture_method: Some(diesel_models::enums::CaptureMethod::Manual), ..utils::PaymentAuthorizeType::default().0 @@ -84,12 +80,8 @@ async fn should_authorize_and_capture_payment() { card_type: None, card_issuing_country: None, bank_code: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "card holder name".to_string(), - )), + nick_name: Some(Secret::new("nick_name".into())), + card_holder_name: Some(Secret::new("card holder name".into())), }), ..utils::PaymentAuthorizeType::default().0 }), diff --git a/crates/router/tests/connectors/trustpay.rs b/crates/router/tests/connectors/trustpay.rs index 8b6f3910ef..a5eb08c67e 100644 --- a/crates/router/tests/connectors/trustpay.rs +++ b/crates/router/tests/connectors/trustpay.rs @@ -76,12 +76,8 @@ fn get_default_payment_info() -> Option { None, Some(Address { address: Some(AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "first".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "last".to_string(), - )), + first_name: Some(Secret::new("first".to_string())), + last_name: Some(Secret::new("last".to_string())), line1: Some(Secret::new("line1".to_string())), line2: Some(Secret::new("line2".to_string())), city: Some("city".to_string()), diff --git a/crates/router/tests/connectors/utils.rs b/crates/router/tests/connectors/utils.rs index 405cb54b88..c315200257 100644 --- a/crates/router/tests/connectors/utils.rs +++ b/crates/router/tests/connectors/utils.rs @@ -79,12 +79,8 @@ impl PaymentInfo { None, Some(hyperswitch_domain_models::address::Address { address: Some(hyperswitch_domain_models::address::AddressDetails { - first_name: Some(common_utils::types::NameType::get_unchecked( - "John".to_string(), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - "Doe".to_string(), - )), + first_name: Some(Secret::new("John".to_string())), + last_name: Some(Secret::new("Doe".to_string())), ..Default::default() }), phone: None, @@ -942,11 +938,8 @@ impl Default for CCardType { card_type: None, card_issuing_country: None, bank_code: None, - nick_name: common_utils::types::NameType::try_from("nick_name".to_string()).ok(), - card_holder_name: common_utils::types::NameType::try_from( - "card holder name".to_string(), - ) - .ok(), + nick_name: Some(Secret::new("nick_name".into())), + card_holder_name: Some(Secret::new("card holder name".into())), }) } } diff --git a/crates/router/tests/connectors/worldline.rs b/crates/router/tests/connectors/worldline.rs index 94f735328b..793a1cc15f 100644 --- a/crates/router/tests/connectors/worldline.rs +++ b/crates/router/tests/connectors/worldline.rs @@ -48,12 +48,8 @@ impl WorldlineTest { Some(Address { address: Some(AddressDetails { country: Some(api_models::enums::CountryAlpha2::US), - first_name: Some(common_utils::types::NameType::get_unchecked( - String::from("John"), - )), - last_name: Some(common_utils::types::NameType::get_unchecked( - String::from("Dough"), - )), + first_name: Some(Secret::new(String::from("John"))), + last_name: Some(Secret::new(String::from("Dough"))), ..Default::default() }), phone: None, @@ -86,12 +82,8 @@ impl WorldlineTest { card_type: None, card_issuing_country: None, bank_code: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "card holder name".to_string(), - )), + nick_name: Some(Secret::new("nick_name".into())), + card_holder_name: Some(Secret::new("card holder name".into())), }), confirm: true, statement_descriptor_suffix: None, diff --git a/crates/router/tests/payments.rs b/crates/router/tests/payments.rs index e85ace6181..0e57540e0e 100644 --- a/crates/router/tests/payments.rs +++ b/crates/router/tests/payments.rs @@ -342,18 +342,14 @@ async fn payments_create_core() { card_number: "4242424242424242".to_string().try_into().unwrap(), card_exp_month: "10".to_string().into(), card_exp_year: "35".to_string().into(), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "Arun Raj".to_string(), - )), + card_holder_name: Some(masking::Secret::new("Arun Raj".to_string())), card_cvc: "123".to_string().into(), card_issuer: None, card_network: None, card_type: None, card_issuing_country: None, bank_code: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), + nick_name: Some(masking::Secret::new("nick_name".into())), })), billing: None, }), @@ -614,18 +610,14 @@ async fn payments_create_core_adyen_no_redirect() { card_number: "5555 3412 4444 1115".to_string().try_into().unwrap(), card_exp_month: "03".to_string().into(), card_exp_year: "2030".to_string().into(), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "JohnDoe".to_string(), - )), + card_holder_name: Some(masking::Secret::new("JohnDoe".to_string())), card_cvc: "737".to_string().into(), card_issuer: None, card_network: None, card_type: None, card_issuing_country: None, bank_code: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), + nick_name: Some(masking::Secret::new("nick_name".into())), })), billing: None, }), diff --git a/crates/router/tests/payments2.rs b/crates/router/tests/payments2.rs index 216ca2a7bd..19281b4501 100644 --- a/crates/router/tests/payments2.rs +++ b/crates/router/tests/payments2.rs @@ -103,18 +103,14 @@ async fn payments_create_core() { card_number: "4242424242424242".to_string().try_into().unwrap(), card_exp_month: "10".to_string().into(), card_exp_year: "35".to_string().into(), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "Arun Raj".to_string(), - )), + card_holder_name: Some(masking::Secret::new("Arun Raj".to_string())), card_cvc: "123".to_string().into(), card_issuer: None, card_network: None, card_type: None, card_issuing_country: None, bank_code: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), + nick_name: Some(masking::Secret::new("nick_name".into())), })), billing: None, }), @@ -383,18 +379,14 @@ async fn payments_create_core_adyen_no_redirect() { card_number: "5555 3412 4444 1115".to_string().try_into().unwrap(), card_exp_month: "03".to_string().into(), card_exp_year: "2030".to_string().into(), - card_holder_name: Some(common_utils::types::NameType::get_unchecked( - "JohnDoe".to_string(), - )), + card_holder_name: Some(masking::Secret::new("JohnDoe".to_string())), card_cvc: "737".to_string().into(), bank_code: None, card_issuer: None, card_network: None, card_type: None, card_issuing_country: None, - nick_name: Some(common_utils::types::NameType::get_unchecked( - "nick_name".to_string(), - )), + nick_name: Some(masking::Secret::new("nick_name".into())), })), billing: None, }),