From 73eb467d32a0cabb6e27c25dd084aea6bb38e861 Mon Sep 17 00:00:00 2001 From: Debarshi Gupta Date: Mon, 21 Apr 2025 13:46:06 +0530 Subject: [PATCH] fix(core): [CARD TESTING GUARD] Added Card Testing Guard Config response in case of NULL (#7478) Co-authored-by: Debarshi Gupta Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> Co-authored-by: debarshi.gupta --- crates/diesel_models/src/business_profile.rs | 19 ++++++++ crates/router/src/core/admin.rs | 48 ++++---------------- crates/router/src/types/api/admin.rs | 41 ++++++----------- 3 files changed, 42 insertions(+), 66 deletions(-) diff --git a/crates/diesel_models/src/business_profile.rs b/crates/diesel_models/src/business_profile.rs index 001673872c..eed638fdba 100644 --- a/crates/diesel_models/src/business_profile.rs +++ b/crates/diesel_models/src/business_profile.rs @@ -641,6 +641,25 @@ pub struct CardTestingGuardConfig { common_utils::impl_to_sql_from_sql_json!(CardTestingGuardConfig); +impl Default for CardTestingGuardConfig { + fn default() -> Self { + Self { + is_card_ip_blocking_enabled: common_utils::consts::DEFAULT_CARD_IP_BLOCKING_STATUS, + card_ip_blocking_threshold: common_utils::consts::DEFAULT_CARD_IP_BLOCKING_THRESHOLD, + is_guest_user_card_blocking_enabled: + common_utils::consts::DEFAULT_GUEST_USER_CARD_BLOCKING_STATUS, + guest_user_card_blocking_threshold: + common_utils::consts::DEFAULT_GUEST_USER_CARD_BLOCKING_THRESHOLD, + is_customer_id_blocking_enabled: + common_utils::consts::DEFAULT_CUSTOMER_ID_BLOCKING_STATUS, + customer_id_blocking_threshold: + common_utils::consts::DEFAULT_CUSTOMER_ID_BLOCKING_THRESHOLD, + card_testing_guard_expiry: + common_utils::consts::DEFAULT_CARD_TESTING_GUARD_EXPIRY_IN_SECS, + } + } +} + #[derive(Clone, Debug, serde::Deserialize, serde::Serialize, diesel::AsExpression)] #[diesel(sql_type = diesel::sql_types::Json)] pub struct WebhookDetails { diff --git a/crates/router/src/core/admin.rs b/crates/router/src/core/admin.rs index 3dd2accbd1..c2f26b1ed9 100644 --- a/crates/router/src/core/admin.rs +++ b/crates/router/src/core/admin.rs @@ -3703,26 +3703,10 @@ impl ProfileCreateBridge for api::ProfileCreate { "fs", ))); - let card_testing_guard_config = match self.card_testing_guard_config { - Some(card_testing_guard_config) => Some(CardTestingGuardConfig::foreign_from( - card_testing_guard_config, - )), - None => Some(CardTestingGuardConfig { - is_card_ip_blocking_enabled: common_utils::consts::DEFAULT_CARD_IP_BLOCKING_STATUS, - card_ip_blocking_threshold: - common_utils::consts::DEFAULT_CARD_IP_BLOCKING_THRESHOLD, - is_guest_user_card_blocking_enabled: - common_utils::consts::DEFAULT_GUEST_USER_CARD_BLOCKING_STATUS, - guest_user_card_blocking_threshold: - common_utils::consts::DEFAULT_GUEST_USER_CARD_BLOCKING_THRESHOLD, - is_customer_id_blocking_enabled: - common_utils::consts::DEFAULT_CUSTOMER_ID_BLOCKING_STATUS, - customer_id_blocking_threshold: - common_utils::consts::DEFAULT_CUSTOMER_ID_BLOCKING_THRESHOLD, - card_testing_guard_expiry: - common_utils::consts::DEFAULT_CARD_TESTING_GUARD_EXPIRY_IN_SECS, - }), - }; + let card_testing_guard_config = self + .card_testing_guard_config + .map(CardTestingGuardConfig::foreign_from) + .or(Some(CardTestingGuardConfig::default())); Ok(domain::Profile::from(domain::ProfileSetter { profile_id, @@ -3874,26 +3858,10 @@ impl ProfileCreateBridge for api::ProfileCreate { "fs", ))); - let card_testing_guard_config = match self.card_testing_guard_config { - Some(card_testing_guard_config) => Some(CardTestingGuardConfig::foreign_from( - card_testing_guard_config, - )), - None => Some(CardTestingGuardConfig { - is_card_ip_blocking_enabled: common_utils::consts::DEFAULT_CARD_IP_BLOCKING_STATUS, - card_ip_blocking_threshold: - common_utils::consts::DEFAULT_CARD_IP_BLOCKING_THRESHOLD, - is_guest_user_card_blocking_enabled: - common_utils::consts::DEFAULT_GUEST_USER_CARD_BLOCKING_STATUS, - guest_user_card_blocking_threshold: - common_utils::consts::DEFAULT_GUEST_USER_CARD_BLOCKING_THRESHOLD, - is_customer_id_blocking_enabled: - common_utils::consts::DEFAULT_CUSTOMER_ID_BLOCKING_STATUS, - customer_id_blocking_threshold: - common_utils::consts::DEFAULT_CUSTOMER_ID_BLOCKING_THRESHOLD, - card_testing_guard_expiry: - common_utils::consts::DEFAULT_CARD_TESTING_GUARD_EXPIRY_IN_SECS, - }), - }; + let card_testing_guard_config = self + .card_testing_guard_config + .map(CardTestingGuardConfig::foreign_from) + .or(Some(CardTestingGuardConfig::default())); Ok(domain::Profile::from(domain::ProfileSetter { id: profile_id, diff --git a/crates/router/src/types/api/admin.rs b/crates/router/src/types/api/admin.rs index b72b47be16..4bd6dfbe5d 100644 --- a/crates/router/src/types/api/admin.rs +++ b/crates/router/src/types/api/admin.rs @@ -16,7 +16,7 @@ pub use api_models::{ }, }; use common_utils::{ext_traits::ValueExt, types::keymanager as km_types}; -use diesel_models::organization::OrganizationBridge; +use diesel_models::{business_profile::CardTestingGuardConfig, organization::OrganizationBridge}; use error_stack::ResultExt; use hyperswitch_domain_models::merchant_key_store::MerchantKeyStore; use masking::{ExposeInterface, PeekInterface, Secret}; @@ -141,6 +141,10 @@ impl ForeignTryFrom for ProfileResponse { let masked_outgoing_webhook_custom_http_headers = outgoing_webhook_custom_http_headers.map(MaskedHeaders::from_headers); + let card_testing_guard_config = item + .card_testing_guard_config + .or(Some(CardTestingGuardConfig::default())); + Ok(Self { merchant_id: item.merchant_id, profile_id, @@ -186,9 +190,7 @@ impl ForeignTryFrom for ProfileResponse { always_request_extended_authorization: item.always_request_extended_authorization, is_click_to_pay_enabled: item.is_click_to_pay_enabled, authentication_product_ids: item.authentication_product_ids, - card_testing_guard_config: item - .card_testing_guard_config - .map(ForeignInto::foreign_into), + card_testing_guard_config: card_testing_guard_config.map(ForeignInto::foreign_into), is_clear_pan_retries_enabled: item.is_clear_pan_retries_enabled, force_3ds_challenge: item.force_3ds_challenge, is_debit_routing_enabled: Some(item.is_debit_routing_enabled), @@ -224,6 +226,10 @@ impl ForeignTryFrom for ProfileResponse { let masked_outgoing_webhook_custom_http_headers = outgoing_webhook_custom_http_headers.map(MaskedHeaders::from_headers); + let card_testing_guard_config = item + .card_testing_guard_config + .or(Some(CardTestingGuardConfig::default())); + Ok(Self { merchant_id: item.merchant_id, id, @@ -264,9 +270,7 @@ impl ForeignTryFrom for ProfileResponse { is_network_tokenization_enabled: item.is_network_tokenization_enabled, is_click_to_pay_enabled: item.is_click_to_pay_enabled, authentication_product_ids: item.authentication_product_ids, - card_testing_guard_config: item - .card_testing_guard_config - .map(ForeignInto::foreign_into), + card_testing_guard_config: card_testing_guard_config.map(ForeignInto::foreign_into), is_clear_pan_retries_enabled: item.is_clear_pan_retries_enabled, is_debit_routing_enabled: Some(item.is_debit_routing_enabled), merchant_business_country: item.merchant_business_country, @@ -335,25 +339,10 @@ pub async fn create_profile_from_merchant_account( "fs", ))); - let card_testing_guard_config = match request.card_testing_guard_config { - Some(card_testing_guard_config) => Some(CardTestingGuardConfig::foreign_from( - card_testing_guard_config, - )), - None => Some(CardTestingGuardConfig { - is_card_ip_blocking_enabled: common_utils::consts::DEFAULT_CARD_IP_BLOCKING_STATUS, - card_ip_blocking_threshold: common_utils::consts::DEFAULT_CARD_IP_BLOCKING_THRESHOLD, - is_guest_user_card_blocking_enabled: - common_utils::consts::DEFAULT_GUEST_USER_CARD_BLOCKING_STATUS, - guest_user_card_blocking_threshold: - common_utils::consts::DEFAULT_GUEST_USER_CARD_BLOCKING_THRESHOLD, - is_customer_id_blocking_enabled: - common_utils::consts::DEFAULT_CUSTOMER_ID_BLOCKING_STATUS, - customer_id_blocking_threshold: - common_utils::consts::DEFAULT_CUSTOMER_ID_BLOCKING_THRESHOLD, - card_testing_guard_expiry: - common_utils::consts::DEFAULT_CARD_TESTING_GUARD_EXPIRY_IN_SECS, - }), - }; + let card_testing_guard_config = request + .card_testing_guard_config + .map(CardTestingGuardConfig::foreign_from) + .or(Some(CardTestingGuardConfig::default())); Ok(domain::Profile::from(domain::ProfileSetter { profile_id,