mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-02 04:04:43 +08:00
revert: fix(core): add validation for all the connector auth_type (#1833)
This commit is contained in:
@ -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}")))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user