mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 01:27:31 +08:00
feat: add support for merchant to pass public key and ttl for encrypting payload (#4456)
This commit is contained in:
@ -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,
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@ -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>,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,3 @@
|
||||
-- This file should undo anything in `up.sql`
|
||||
|
||||
ALTER TABLE business_profile DROP COLUMN IF EXISTS extended_card_info_config;
|
||||
@ -0,0 +1,3 @@
|
||||
-- Your SQL goes here
|
||||
|
||||
ALTER TABLE business_profile ADD COLUMN IF NOT EXISTS extended_card_info_config JSONB DEFAULT NULL;
|
||||
Reference in New Issue
Block a user