feat: add support for merchant to pass public key and ttl for encrypting payload (#4456)

This commit is contained in:
Chethan Rao
2024-05-01 16:06:33 +05:30
committed by GitHub
parent bda749d097
commit b562e62ac8
8 changed files with 42 additions and 0 deletions

View File

@ -1042,6 +1042,9 @@ pub struct BusinessProfileUpdate {
/// External 3DS authentication details
pub authentication_connector_details: Option<AuthenticationConnectorDetails>,
/// Merchant's config to support extended card info feature
pub extended_card_info_config: Option<ExtendedCardInfoConfig>,
}
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, PartialEq, ToSchema)]
@ -1095,3 +1098,9 @@ pub struct ExtendedCardInfoChoice {
}
impl common_utils::events::ApiEventMetric for ExtendedCardInfoChoice {}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct ExtendedCardInfoConfig {
pub public_key: Secret<String>,
pub ttl_in_secs: u16,
}

View File

@ -36,6 +36,7 @@ pub struct BusinessProfile {
pub session_expiry: Option<i64>,
pub authentication_connector_details: Option<serde_json::Value>,
pub is_extended_card_info_enabled: Option<bool>,
pub extended_card_info_config: Option<pii::SecretSerdeValue>,
}
#[derive(Clone, Debug, Insertable, router_derive::DebugAsDisplay)]
@ -63,6 +64,7 @@ pub struct BusinessProfileNew {
pub session_expiry: Option<i64>,
pub authentication_connector_details: Option<serde_json::Value>,
pub is_extended_card_info_enabled: Option<bool>,
pub extended_card_info_config: Option<pii::SecretSerdeValue>,
}
#[derive(Clone, Debug, Default, AsChangeset, router_derive::DebugAsDisplay)]
@ -87,6 +89,7 @@ pub struct BusinessProfileUpdateInternal {
pub session_expiry: Option<i64>,
pub authentication_connector_details: Option<serde_json::Value>,
pub is_extended_card_info_enabled: Option<bool>,
pub extended_card_info_config: Option<pii::SecretSerdeValue>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
@ -109,6 +112,7 @@ pub enum BusinessProfileUpdate {
payment_link_config: Option<serde_json::Value>,
session_expiry: Option<i64>,
authentication_connector_details: Option<serde_json::Value>,
extended_card_info_config: Option<pii::SecretSerdeValue>,
},
ExtendedCardInfoUpdate {
is_extended_card_info_enabled: Option<bool>,
@ -136,6 +140,7 @@ impl From<BusinessProfileUpdate> for BusinessProfileUpdateInternal {
payment_link_config,
session_expiry,
authentication_connector_details,
extended_card_info_config,
} => Self {
profile_name,
modified_at,
@ -154,6 +159,7 @@ impl From<BusinessProfileUpdate> for BusinessProfileUpdateInternal {
payment_link_config,
session_expiry,
authentication_connector_details,
extended_card_info_config,
..Default::default()
},
BusinessProfileUpdate::ExtendedCardInfoUpdate {
@ -190,6 +196,7 @@ impl From<BusinessProfileNew> for BusinessProfile {
session_expiry: new.session_expiry,
authentication_connector_details: new.authentication_connector_details,
is_extended_card_info_enabled: new.is_extended_card_info_enabled,
extended_card_info_config: new.extended_card_info_config,
}
}
}
@ -215,6 +222,7 @@ impl BusinessProfileUpdate {
session_expiry,
authentication_connector_details,
is_extended_card_info_enabled,
extended_card_info_config,
} = self.into();
BusinessProfile {
profile_name: profile_name.unwrap_or(source.profile_name),
@ -237,6 +245,7 @@ impl BusinessProfileUpdate {
session_expiry,
authentication_connector_details,
is_extended_card_info_enabled,
extended_card_info_config,
..source
}
}

View File

@ -194,6 +194,7 @@ diesel::table! {
session_expiry -> Nullable<Int8>,
authentication_connector_details -> Nullable<Jsonb>,
is_extended_card_info_enabled -> Nullable<Bool>,
extended_card_info_config -> Nullable<Jsonb>,
}
}

View File

@ -439,6 +439,7 @@ pub async fn update_business_profile_cascade(
payment_link_config: None,
session_expiry: None,
authentication_connector_details: None,
extended_card_info_config: None,
};
let update_futures = business_profiles.iter().map(|business_profile| async {
@ -1648,6 +1649,19 @@ pub async fn update_business_profile(
})
.transpose()?;
let extended_card_info_config = request
.extended_card_info_config
.as_ref()
.map(|config| {
config
.encode_to_value()
.change_context(errors::ApiErrorResponse::InvalidDataValue {
field_name: "extended_card_info_config",
})
})
.transpose()?
.map(Secret::new);
let business_profile_update = storage::business_profile::BusinessProfileUpdate::Update {
profile_name: request.profile_name,
modified_at: Some(date_time::now()),
@ -1676,6 +1690,7 @@ pub async fn update_business_profile(
.change_context(errors::ApiErrorResponse::InvalidDataValue {
field_name: "authentication_connector_details",
})?,
extended_card_info_config,
};
let updated_business_profile = db

View File

@ -263,6 +263,7 @@ pub async fn update_business_profile_active_algorithm_ref(
payment_link_config: None,
session_expiry: None,
authentication_connector_details: None,
extended_card_info_config: None,
};
db.update_business_profile_by_profile_id(current_business_profile, business_profile_update)
.await

View File

@ -176,6 +176,7 @@ impl ForeignTryFrom<(domain::MerchantAccount, BusinessProfileCreate)>
field_name: "authentication_connector_details",
})?,
is_extended_card_info_enabled: None,
extended_card_info_config: None,
})
}
}

View File

@ -0,0 +1,3 @@
-- This file should undo anything in `up.sql`
ALTER TABLE business_profile DROP COLUMN IF EXISTS extended_card_info_config;

View File

@ -0,0 +1,3 @@
-- Your SQL goes here
ALTER TABLE business_profile ADD COLUMN IF NOT EXISTS extended_card_info_config JSONB DEFAULT NULL;