From 2b71d4d8c40c3697e902398fc76bc1256d5b25ee Mon Sep 17 00:00:00 2001 From: Abhishek Marrivagu <68317979+Abhicodes-crypto@users.noreply.github.com> Date: Wed, 21 Jun 2023 12:16:17 +0530 Subject: [PATCH] fix(payments): fix client secret parsing (#1358) --- crates/router/src/core/payments/helpers.rs | 35 ++++++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/crates/router/src/core/payments/helpers.rs b/crates/router/src/core/payments/helpers.rs index 980a4e6566..3ca65337be 100644 --- a/crates/router/src/core/payments/helpers.rs +++ b/crates/router/src/core/payments/helpers.rs @@ -1729,7 +1729,7 @@ pub async fn verify_payment_intent_time_and_client_secret( ) -> error_stack::Result, errors::ApiErrorResponse> { client_secret .async_map(|cs| async move { - let payment_id = get_payment_id_from_client_secret(&cs); + let payment_id = get_payment_id_from_client_secret(&cs)?; let payment_intent = db .find_payment_intent_by_payment_id_merchant_id( @@ -1833,8 +1833,12 @@ pub fn get_business_details( } #[inline] -pub(crate) fn get_payment_id_from_client_secret(cs: &str) -> String { - cs.split('_').take(2).collect::>().join("_") +pub(crate) fn get_payment_id_from_client_secret(cs: &str) -> RouterResult { + let (payment_id, _) = cs + .rsplit_once("_secret_") + .ok_or(errors::ApiErrorResponse::ClientSecretInvalid) + .into_report()?; + Ok(payment_id.to_string()) } #[cfg(test)] @@ -2436,3 +2440,28 @@ pub fn add_order_details_and_metadata_to_payment_intent( Ok(()) } + +#[cfg(test)] +mod test { + #![allow(clippy::unwrap_used)] + #[test] + fn test_client_secret_parse() { + let client_secret1 = "pay_3TgelAms4RQec8xSStjF_secret_fc34taHLw1ekPgNh92qr"; + let client_secret2 = "pay_3Tgel__Ams4RQ_secret_ec8xSStjF_secret_fc34taHLw1ekPgNh92qr"; + let client_secret3 = + "pay_3Tgel__Ams4RQ_secret_ec8xSStjF_secret__secret_fc34taHLw1ekPgNh92qr"; + + assert_eq!( + "pay_3TgelAms4RQec8xSStjF", + super::get_payment_id_from_client_secret(client_secret1).unwrap() + ); + assert_eq!( + "pay_3Tgel__Ams4RQ_secret_ec8xSStjF", + super::get_payment_id_from_client_secret(client_secret2).unwrap() + ); + assert_eq!( + "pay_3Tgel__Ams4RQ_secret_ec8xSStjF_secret_", + super::get_payment_id_from_client_secret(client_secret3).unwrap() + ); + } +}