revert: fix(core): add validation for all the connector auth_type (#1833)

This commit is contained in:
Amisha Prabhat
2023-08-04 18:58:43 +05:30
committed by GitHub
parent 80579805f9
commit ae3d25e689
51 changed files with 287 additions and 451 deletions

View File

@ -1,4 +1,4 @@
use api_models::admin::PrimaryBusinessDetails;
use api_models::{admin::PrimaryBusinessDetails, enums as api_enums};
use common_utils::{
crypto::{generate_cryptographically_secure_random_string, OptionalSecretValue},
date_time,
@ -16,11 +16,10 @@ use crate::{
payments::helpers,
},
db::StorageInterface,
routes::{metrics, AppState},
routes::metrics,
services::{self, api as service_api},
types::{
self,
api::{self, ConnectorData},
self, api,
domain::{
self,
types::{self as domain_types, AsyncLift},
@ -395,16 +394,12 @@ fn validate_certificate_in_mca_metadata(
}
pub async fn create_payment_connector(
state: &AppState,
store: &dyn StorageInterface,
req: api::MerchantConnectorCreate,
merchant_id: &String,
) -> RouterResponse<api_models::admin::MerchantConnectorResponse> {
let key_store = state
.store
.get_merchant_key_store_by_merchant_id(
merchant_id,
&state.store.get_master_key().to_vec().into(),
)
let key_store = store
.get_merchant_key_store_by_merchant_id(merchant_id, &store.get_master_key().to_vec().into())
.await
.to_not_found_response(errors::ApiErrorResponse::MerchantAccountNotFound)?;
@ -413,8 +408,7 @@ pub async fn create_payment_connector(
.map(validate_certificate_in_mca_metadata)
.transpose()?;
let merchant_account = state
.store
let merchant_account = store
.find_merchant_account_by_merchant_id(merchant_id, &key_store)
.await
.to_not_found_response(errors::ApiErrorResponse::MerchantAccountNotFound)?;
@ -458,13 +452,17 @@ pub async fn create_payment_connector(
expected_format: "auth_type and api_key".to_string(),
})?;
let conn_name =
ConnectorData::convert_connector(&state.conf.connectors, &req.connector_name.to_string())?;
conn_name.validate_auth_type(&auth).change_context(
errors::ApiErrorResponse::InvalidRequestData {
message: "The auth type is not supported for connector".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(),
})
}
})?;
let frm_configs = get_frm_config_as_secret(req.frm_configs);
@ -510,8 +508,7 @@ pub async fn create_payment_connector(
},
};
let mca = state
.store
let mca = store
.insert_merchant_connector_account(merchant_connector_account, &key_store)
.await
.to_duplicate_response(
@ -832,3 +829,197 @@ pub fn get_frm_config_as_secret(
None => None,
}
}
pub(crate) fn validate_auth_type(
connector_name: api_models::enums::Connector,
val: &types::ConnectorAuthType,
) -> Result<(), error_stack::Report<errors::ConnectorError>> {
use crate::connector::*;
match connector_name {
#[cfg(feature = "dummy_connector")]
api_enums::Connector::DummyConnector1
| api_enums::Connector::DummyConnector2
| api_enums::Connector::DummyConnector3
| api_enums::Connector::DummyConnector4
| api_enums::Connector::DummyConnector5
| api_enums::Connector::DummyConnector6
| api_enums::Connector::DummyConnector7 => {
dummyconnector::transformers::DummyConnectorAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Aci => {
aci::transformers::AciAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Adyen => {
adyen::transformers::AdyenAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Airwallex => {
airwallex::transformers::AirwallexAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Authorizedotnet => {
authorizedotnet::transformers::AuthorizedotnetAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Bitpay => {
bitpay::transformers::BitpayAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Bambora => {
bambora::transformers::BamboraAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Boku => {
boku::transformers::BokuAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Bluesnap => {
bluesnap::transformers::BluesnapAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Braintree => {
braintree::transformers::BraintreeAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Cashtocode => {
cashtocode::transformers::CashtocodeAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Checkout => {
checkout::transformers::CheckoutAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Coinbase => {
coinbase::transformers::CoinbaseAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Cryptopay => {
cryptopay::transformers::CryptopayAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Cybersource => {
cybersource::transformers::CybersourceAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Dlocal => {
dlocal::transformers::DlocalAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Fiserv => {
fiserv::transformers::FiservAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Forte => {
forte::transformers::ForteAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Globalpay => {
globalpay::transformers::GlobalpayAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Globepay => {
globepay::transformers::GlobepayAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Iatapay => {
iatapay::transformers::IatapayAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Klarna => {
klarna::transformers::KlarnaAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Mollie => {
mollie::transformers::MollieAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Multisafepay => {
multisafepay::transformers::MultisafepayAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Nexinets => {
nexinets::transformers::NexinetsAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Nmi => {
nmi::transformers::NmiAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Noon => {
noon::transformers::NoonAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Nuvei => {
nuvei::transformers::NuveiAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Opennode => {
opennode::transformers::OpennodeAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Payme => {
payme::transformers::PaymeAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Paypal => {
paypal::transformers::PaypalAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Payu => {
payu::transformers::PayuAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Powertranz => {
powertranz::transformers::PowertranzAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Rapyd => {
rapyd::transformers::RapydAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Shift4 => {
shift4::transformers::Shift4AuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Stax => {
stax::transformers::StaxAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Stripe => {
stripe::transformers::StripeAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Trustpay => {
trustpay::transformers::TrustpayAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Tsys => {
tsys::transformers::TsysAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Wise => {
wise::transformers::WiseAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Worldline => {
worldline::transformers::WorldlineAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Worldpay => {
worldpay::transformers::WorldpayAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Zen => {
zen::transformers::ZenAuthType::try_from(val)?;
Ok(())
}
api_enums::Connector::Signifyd => {
Err(report!(errors::ConnectorError::InvalidConnectorName)
.attach_printable(format!("invalid connector name: {connector_name}")))
}
}
}