mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-03 05:17:02 +08:00
feat(pm_list): handle client secret check (#759)
This commit is contained in:
@ -406,7 +406,8 @@ impl From<errors::ApiErrorResponse> for StripeErrorCode {
|
|||||||
errors::ApiErrorResponse::CustomerNotFound => Self::CustomerNotFound,
|
errors::ApiErrorResponse::CustomerNotFound => Self::CustomerNotFound,
|
||||||
errors::ApiErrorResponse::PaymentNotFound => Self::PaymentNotFound,
|
errors::ApiErrorResponse::PaymentNotFound => Self::PaymentNotFound,
|
||||||
errors::ApiErrorResponse::PaymentMethodNotFound => Self::PaymentMethodNotFound,
|
errors::ApiErrorResponse::PaymentMethodNotFound => Self::PaymentMethodNotFound,
|
||||||
errors::ApiErrorResponse::ClientSecretNotGiven => Self::ClientSecretNotFound,
|
errors::ApiErrorResponse::ClientSecretNotGiven
|
||||||
|
| errors::ApiErrorResponse::ClientSecretExpired => Self::ClientSecretNotFound,
|
||||||
errors::ApiErrorResponse::MerchantAccountNotFound => Self::MerchantAccountNotFound,
|
errors::ApiErrorResponse::MerchantAccountNotFound => Self::MerchantAccountNotFound,
|
||||||
errors::ApiErrorResponse::ResourceIdNotFound => Self::ResourceIdNotFound,
|
errors::ApiErrorResponse::ResourceIdNotFound => Self::ResourceIdNotFound,
|
||||||
errors::ApiErrorResponse::MerchantConnectorAccountNotFound => {
|
errors::ApiErrorResponse::MerchantConnectorAccountNotFound => {
|
||||||
|
|||||||
@ -49,6 +49,8 @@ pub enum ApiErrorResponse {
|
|||||||
InvalidDataValue { field_name: &'static str },
|
InvalidDataValue { field_name: &'static str },
|
||||||
#[error(error_type = ErrorType::InvalidRequestError, code = "IR_08", message = "Client secret was not provided")]
|
#[error(error_type = ErrorType::InvalidRequestError, code = "IR_08", message = "Client secret was not provided")]
|
||||||
ClientSecretNotGiven,
|
ClientSecretNotGiven,
|
||||||
|
#[error(error_type = ErrorType::InvalidRequestError, code = "IR_08", message = "Client secret has expired")]
|
||||||
|
ClientSecretExpired,
|
||||||
#[error(error_type = ErrorType::InvalidRequestError, code = "IR_09", message = "The client_secret provided does not match the client_secret associated with the Payment")]
|
#[error(error_type = ErrorType::InvalidRequestError, code = "IR_09", message = "The client_secret provided does not match the client_secret associated with the Payment")]
|
||||||
ClientSecretInvalid,
|
ClientSecretInvalid,
|
||||||
#[error(error_type = ErrorType::InvalidRequestError, code = "IR_10", message = "Customer has active mandate/subsciption")]
|
#[error(error_type = ErrorType::InvalidRequestError, code = "IR_10", message = "Customer has active mandate/subsciption")]
|
||||||
@ -233,6 +235,7 @@ impl actix_web::ResponseError for ApiErrorResponse {
|
|||||||
| Self::MerchantConnectorAccountNotFound
|
| Self::MerchantConnectorAccountNotFound
|
||||||
| Self::MandateNotFound
|
| Self::MandateNotFound
|
||||||
| Self::ClientSecretNotGiven
|
| Self::ClientSecretNotGiven
|
||||||
|
| Self::ClientSecretExpired
|
||||||
| Self::ClientSecretInvalid
|
| Self::ClientSecretInvalid
|
||||||
| Self::SuccessfulPaymentNotFound
|
| Self::SuccessfulPaymentNotFound
|
||||||
| Self::IncorrectConnectorNameGiven
|
| Self::IncorrectConnectorNameGiven
|
||||||
@ -316,7 +319,7 @@ impl common_utils::errors::ErrorSwitch<api_models::errors::types::ApiErrorRespon
|
|||||||
Self::ClientSecretNotGiven => AER::BadRequest(ApiError::new(
|
Self::ClientSecretNotGiven => AER::BadRequest(ApiError::new(
|
||||||
"IR",
|
"IR",
|
||||||
8,
|
8,
|
||||||
"Client secret was not provided", None
|
"client_secret was not provided", None
|
||||||
)),
|
)),
|
||||||
Self::ClientSecretInvalid => {
|
Self::ClientSecretInvalid => {
|
||||||
AER::BadRequest(ApiError::new("IR", 9, "The client_secret provided does not match the client_secret associated with the Payment", None))
|
AER::BadRequest(ApiError::new("IR", 9, "The client_secret provided does not match the client_secret associated with the Payment", None))
|
||||||
@ -344,7 +347,12 @@ impl common_utils::errors::ErrorSwitch<api_models::errors::types::ApiErrorRespon
|
|||||||
Self::InvalidJwtToken => AER::Unauthorized(ApiError::new("IR", 17, "Access forbidden, invalid JWT token was used", None)),
|
Self::InvalidJwtToken => AER::Unauthorized(ApiError::new("IR", 17, "Access forbidden, invalid JWT token was used", None)),
|
||||||
Self::GenericUnauthorized { message } => {
|
Self::GenericUnauthorized { message } => {
|
||||||
AER::Unauthorized(ApiError::new("IR", 18, message.to_string(), None))
|
AER::Unauthorized(ApiError::new("IR", 18, message.to_string(), None))
|
||||||
}
|
},
|
||||||
|
Self::ClientSecretExpired => AER::BadRequest(ApiError::new(
|
||||||
|
"IR",
|
||||||
|
19,
|
||||||
|
"The provided client_secret has expired", None
|
||||||
|
)),
|
||||||
Self::ExternalConnectorError {
|
Self::ExternalConnectorError {
|
||||||
code,
|
code,
|
||||||
message,
|
message,
|
||||||
|
|||||||
@ -1179,9 +1179,11 @@ pub(crate) fn authenticate_client_secret(
|
|||||||
payment_intent_client_secret: Option<&String>,
|
payment_intent_client_secret: Option<&String>,
|
||||||
) -> Result<(), errors::ApiErrorResponse> {
|
) -> Result<(), errors::ApiErrorResponse> {
|
||||||
match (request_client_secret, payment_intent_client_secret) {
|
match (request_client_secret, payment_intent_client_secret) {
|
||||||
(Some(req_cs), Some(pi_cs)) => utils::when(req_cs.ne(pi_cs), || {
|
(Some(req_cs), Some(pi_cs)) if req_cs != pi_cs => {
|
||||||
Err(errors::ApiErrorResponse::ClientSecretInvalid)
|
Err(errors::ApiErrorResponse::ClientSecretInvalid)
|
||||||
}),
|
}
|
||||||
|
// If there is no client in payment intent, then it has expired
|
||||||
|
(Some(_), None) => Err(errors::ApiErrorResponse::ClientSecretExpired),
|
||||||
_ => Ok(()),
|
_ => Ok(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user