fix(connector): [braintree] add 3ds redirection error mapping and metadata validation (#2552)

This commit is contained in:
SamraatBansal
2023-10-12 19:05:37 +05:30
committed by GitHub
parent efa53204e8
commit 28d02f94c6
5 changed files with 150 additions and 71 deletions

View File

@ -3,6 +3,7 @@ use common_utils::{
crypto::{generate_cryptographically_secure_random_string, OptionalSecretValue},
date_time,
ext_traits::{AsyncExt, ConfigExt, Encode, ValueExt},
pii,
};
use data_models::MerchantStorageScheme;
use error_stack::{report, FutureExt, ResultExt};
@ -656,15 +657,26 @@ pub async fn create_payment_connector(
expected_format: "auth_type and api_key".to_string(),
})?;
validate_auth_type(req.connector_name, &auth).map_err(|err| {
if err.current_context() == &errors::ConnectorError::InvalidConnectorName {
err.change_context(errors::ApiErrorResponse::InvalidRequestData {
message: "The connector name is invalid".to_string(),
})
} else {
err.change_context(errors::ApiErrorResponse::InvalidRequestData {
message: "The auth type is invalid for the connector".to_string(),
})
validate_auth_and_metadata_type(req.connector_name, &auth, &req.metadata).map_err(|err| {
match *err.current_context() {
errors::ConnectorError::InvalidConnectorName => {
err.change_context(errors::ApiErrorResponse::InvalidRequestData {
message: "The connector name is invalid".to_string(),
})
}
errors::ConnectorError::InvalidConfig { field_name } => {
err.change_context(errors::ApiErrorResponse::InvalidRequestData {
message: format!("The {} is invalid", field_name),
})
}
errors::ConnectorError::FailedToObtainAuthType => {
err.change_context(errors::ApiErrorResponse::InvalidRequestData {
message: "The auth type is invalid for the connector".to_string(),
})
}
_ => err.change_context(errors::ApiErrorResponse::InvalidRequestData {
message: "The request body is invalid".to_string(),
}),
}
})?;
@ -1250,9 +1262,10 @@ pub async fn update_business_profile(
))
}
pub(crate) fn validate_auth_type(
pub(crate) fn validate_auth_and_metadata_type(
connector_name: api_models::enums::Connector,
val: &types::ConnectorAuthType,
connector_meta_data: &Option<pii::SecretSerdeValue>,
) -> Result<(), error_stack::Report<errors::ConnectorError>> {
use crate::connector::*;
@ -1302,6 +1315,9 @@ pub(crate) fn validate_auth_type(
}
api_enums::Connector::Braintree => {
braintree::transformers::BraintreeAuthType::try_from(val)?;
braintree::braintree_graphql_transformers::BraintreeMeta::try_from(
connector_meta_data,
)?;
Ok(())
}
api_enums::Connector::Cashtocode => {