mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-01 11:06:50 +08:00
fix(router/webhooks): map webhook event type not found errors to 422 (#1340)
Co-authored-by: Sampras Lopes <lsampras@protonmail.com>
This commit is contained in:
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -3058,7 +3058,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "opentelemetry"
|
name = "opentelemetry"
|
||||||
version = "0.18.0"
|
version = "0.18.0"
|
||||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"opentelemetry_api",
|
"opentelemetry_api",
|
||||||
"opentelemetry_sdk",
|
"opentelemetry_sdk",
|
||||||
@ -3067,7 +3067,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "opentelemetry-otlp"
|
name = "opentelemetry-otlp"
|
||||||
version = "0.11.0"
|
version = "0.11.0"
|
||||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"futures",
|
"futures",
|
||||||
@ -3084,7 +3084,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "opentelemetry-proto"
|
name = "opentelemetry-proto"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures",
|
"futures",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@ -3096,7 +3096,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "opentelemetry_api"
|
name = "opentelemetry_api"
|
||||||
version = "0.18.0"
|
version = "0.18.0"
|
||||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fnv",
|
"fnv",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
@ -3111,7 +3111,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "opentelemetry_sdk"
|
name = "opentelemetry_sdk"
|
||||||
version = "0.18.0"
|
version = "0.18.0"
|
||||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
|
|||||||
@ -507,7 +507,8 @@ impl From<errors::ApiErrorResponse> for StripeErrorCode {
|
|||||||
errors::ApiErrorResponse::WebhookBadRequest
|
errors::ApiErrorResponse::WebhookBadRequest
|
||||||
| errors::ApiErrorResponse::WebhookResourceNotFound
|
| errors::ApiErrorResponse::WebhookResourceNotFound
|
||||||
| errors::ApiErrorResponse::WebhookProcessingFailure
|
| errors::ApiErrorResponse::WebhookProcessingFailure
|
||||||
| errors::ApiErrorResponse::WebhookAuthenticationFailed => Self::WebhookProcessingError,
|
| errors::ApiErrorResponse::WebhookAuthenticationFailed
|
||||||
|
| errors::ApiErrorResponse::WebhookUnprocessableEntity => Self::WebhookProcessingError,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -194,6 +194,8 @@ pub enum ApiErrorResponse {
|
|||||||
WebhookBadRequest,
|
WebhookBadRequest,
|
||||||
#[error(error_type = ErrorType::RouterError, code = "WE_03", message = "There was some issue processing the webhook")]
|
#[error(error_type = ErrorType::RouterError, code = "WE_03", message = "There was some issue processing the webhook")]
|
||||||
WebhookProcessingFailure,
|
WebhookProcessingFailure,
|
||||||
|
#[error(error_type = ErrorType::InvalidRequestError, code = "WE_05", message = "Unable to process the webhook body")]
|
||||||
|
WebhookUnprocessableEntity,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
@ -304,6 +306,7 @@ impl actix_web::ResponseError for ApiErrorResponse {
|
|||||||
Self::ReturnUrlUnavailable => StatusCode::SERVICE_UNAVAILABLE, // 503
|
Self::ReturnUrlUnavailable => StatusCode::SERVICE_UNAVAILABLE, // 503
|
||||||
Self::PaymentNotSucceeded => StatusCode::BAD_REQUEST, // 400
|
Self::PaymentNotSucceeded => StatusCode::BAD_REQUEST, // 400
|
||||||
Self::NotImplemented { .. } => StatusCode::NOT_IMPLEMENTED, // 501
|
Self::NotImplemented { .. } => StatusCode::NOT_IMPLEMENTED, // 501
|
||||||
|
Self::WebhookUnprocessableEntity => StatusCode::UNPROCESSABLE_ENTITY,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -538,6 +541,9 @@ impl common_utils::errors::ErrorSwitch<api_models::errors::types::ApiErrorRespon
|
|||||||
Self::WebhookProcessingFailure => {
|
Self::WebhookProcessingFailure => {
|
||||||
AER::InternalServerError(ApiError::new("WE", 3, "There was an issue processing the webhook", None))
|
AER::InternalServerError(ApiError::new("WE", 3, "There was an issue processing the webhook", None))
|
||||||
}
|
}
|
||||||
|
Self::WebhookUnprocessableEntity => {
|
||||||
|
AER::Unprocessable(ApiError::new("WE", 5, "There was an issue processing the webhook body", None))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -64,13 +64,16 @@ impl<T> WebhookApiErrorSwitch<T> for errors::CustomResult<T, errors::ConnectorEr
|
|||||||
|
|
||||||
errors::ConnectorError::WebhookSignatureNotFound
|
errors::ConnectorError::WebhookSignatureNotFound
|
||||||
| errors::ConnectorError::WebhookReferenceIdNotFound
|
| errors::ConnectorError::WebhookReferenceIdNotFound
|
||||||
| errors::ConnectorError::WebhookEventTypeNotFound
|
|
||||||
| errors::ConnectorError::WebhookResourceObjectNotFound
|
| errors::ConnectorError::WebhookResourceObjectNotFound
|
||||||
| errors::ConnectorError::WebhookBodyDecodingFailed
|
| errors::ConnectorError::WebhookBodyDecodingFailed
|
||||||
| errors::ConnectorError::WebhooksNotImplemented => {
|
| errors::ConnectorError::WebhooksNotImplemented => {
|
||||||
Err(e).change_context(errors::ApiErrorResponse::WebhookBadRequest)
|
Err(e).change_context(errors::ApiErrorResponse::WebhookBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
errors::ConnectorError::WebhookEventTypeNotFound => {
|
||||||
|
Err(e).change_context(errors::ApiErrorResponse::WebhookUnprocessableEntity)
|
||||||
|
}
|
||||||
|
|
||||||
_ => Err(e).change_context(errors::ApiErrorResponse::InternalServerError),
|
_ => Err(e).change_context(errors::ApiErrorResponse::InternalServerError),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user