diff --git a/src/Api/Utilities/ExceptionHandlerFilterAttribute.cs b/src/Api/Utilities/ExceptionHandlerFilterAttribute.cs index e7bf77175b..836719d804 100644 --- a/src/Api/Utilities/ExceptionHandlerFilterAttribute.cs +++ b/src/Api/Utilities/ExceptionHandlerFilterAttribute.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.IdentityModel.Tokens; +using Stripe; namespace Bit.Api.Utilities { @@ -24,6 +25,7 @@ namespace Bit.Api.Utilities } var badRequestException = exception as BadRequestException; + var stripeException = exception as StripeException; if(badRequestException != null) { context.HttpContext.Response.StatusCode = 400; @@ -37,6 +39,11 @@ namespace Bit.Api.Utilities errorModel.Message = badRequestException.Message; } } + else if(stripeException != null && stripeException?.StripeError?.ErrorType == "card_error") + { + context.HttpContext.Response.StatusCode = 400; + errorModel = new ErrorResponseModel(stripeException.StripeError.Parameter, stripeException.Message); + } else if(exception is ApplicationException) { context.HttpContext.Response.StatusCode = 402; diff --git a/src/Core/Models/Api/Response/ErrorResponseModel.cs b/src/Core/Models/Api/Response/ErrorResponseModel.cs index 13067d085e..52e56d300a 100644 --- a/src/Core/Models/Api/Response/ErrorResponseModel.cs +++ b/src/Core/Models/Api/Response/ErrorResponseModel.cs @@ -47,6 +47,25 @@ namespace Bit.Core.Models.Api } } + public ErrorResponseModel(Dictionary> errors) + : this("Errors have occurred.", errors) + { } + + public ErrorResponseModel(string errorKey, string errorValue) + : this(errorKey, new string[] { errorValue }) + { } + + public ErrorResponseModel(string errorKey, IEnumerable errorValues) + : this(new Dictionary> { { errorKey, errorValues } }) + { } + + public ErrorResponseModel(string message, Dictionary> errors) + : this() + { + Message = message; + ValidationErrors = errors; + } + public string Message { get; set; } public Dictionary> ValidationErrors { get; set; } // For use in development environments.