mirror of
https://github.com/bitwarden/server.git
synced 2024-11-25 12:45:18 +01:00
Resolve RisksSubscriptionFailure bugs (#3790)
This commit is contained in:
parent
696883c5e0
commit
eb1eb0554c
@ -261,19 +261,19 @@ public class OrganizationsController : Controller
|
||||
return new OrganizationAutoEnrollStatusResponseModel(organization.Id, data?.AutoEnrollEnabled ?? false);
|
||||
}
|
||||
|
||||
[HttpGet("{id}/risks-subscription-failure")]
|
||||
public async Task<OrganizationRisksSubscriptionFailureResponseModel> RisksSubscriptionFailure(Guid id)
|
||||
[HttpGet("{id}/billing-status")]
|
||||
public async Task<OrganizationBillingStatusResponseModel> GetBillingStatus(Guid id)
|
||||
{
|
||||
if (!await _currentContext.EditPaymentMethods(id))
|
||||
{
|
||||
return new OrganizationRisksSubscriptionFailureResponseModel(id, false);
|
||||
throw new NotFoundException();
|
||||
}
|
||||
|
||||
var organization = await _organizationRepository.GetByIdAsync(id);
|
||||
|
||||
var risksSubscriptionFailure = await _paymentService.RisksSubscriptionFailure(organization);
|
||||
|
||||
return new OrganizationRisksSubscriptionFailureResponseModel(id, risksSubscriptionFailure);
|
||||
return new OrganizationBillingStatusResponseModel(organization, risksSubscriptionFailure);
|
||||
}
|
||||
|
||||
[HttpPost("")]
|
||||
|
@ -0,0 +1,13 @@
|
||||
using Bit.Core.AdminConsole.Entities;
|
||||
using Bit.Core.Models.Api;
|
||||
|
||||
namespace Bit.Api.AdminConsole.Models.Response.Organizations;
|
||||
|
||||
public class OrganizationBillingStatusResponseModel(
|
||||
Organization organization,
|
||||
bool risksSubscriptionFailure) : ResponseModel("organizationBillingStatus")
|
||||
{
|
||||
public Guid OrganizationId { get; } = organization.Id;
|
||||
public string OrganizationName { get; } = organization.Name;
|
||||
public bool RisksSubscriptionFailure { get; } = risksSubscriptionFailure;
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
using Bit.Core.Models.Api;
|
||||
|
||||
namespace Bit.Api.AdminConsole.Models.Response.Organizations;
|
||||
|
||||
public class OrganizationRisksSubscriptionFailureResponseModel : ResponseModel
|
||||
{
|
||||
public Guid OrganizationId { get; }
|
||||
public bool RisksSubscriptionFailure { get; }
|
||||
|
||||
public OrganizationRisksSubscriptionFailureResponseModel(
|
||||
Guid organizationId,
|
||||
bool risksSubscriptionFailure) : base("organizationRisksSubscriptionFailure")
|
||||
{
|
||||
OrganizationId = organizationId;
|
||||
RisksSubscriptionFailure = risksSubscriptionFailure;
|
||||
}
|
||||
}
|
@ -133,6 +133,7 @@ public static class FeatureFlagKeys
|
||||
public const string PM5766AutomaticTax = "PM-5766-automatic-tax";
|
||||
public const string PM5864DollarThreshold = "PM-5864-dollar-threshold";
|
||||
public const string AC2101UpdateTrialInitiationEmail = "AC-2101-update-trial-initiation-email";
|
||||
public const string ShowPaymentMethodWarningBanners = "show-payment-method-warning-banners";
|
||||
|
||||
public static List<string> GetAllKeys()
|
||||
{
|
||||
|
@ -42,6 +42,7 @@ public class SubscriptionInfo
|
||||
{
|
||||
Items = sub.Items.Data.Select(i => new BillingSubscriptionItem(i));
|
||||
}
|
||||
CollectionMethod = sub.CollectionMethod;
|
||||
}
|
||||
|
||||
public DateTime? TrialStartDate { get; set; }
|
||||
@ -54,6 +55,7 @@ public class SubscriptionInfo
|
||||
public string Status { get; set; }
|
||||
public bool Cancelled { get; set; }
|
||||
public IEnumerable<BillingSubscriptionItem> Items { get; set; } = new List<BillingSubscriptionItem>();
|
||||
public string CollectionMethod { get; set; }
|
||||
|
||||
public class BillingSubscriptionItem
|
||||
{
|
||||
|
@ -1738,13 +1738,17 @@ public class StripePaymentService : IPaymentService
|
||||
{
|
||||
var subscriptionInfo = await GetSubscriptionAsync(organization);
|
||||
|
||||
if (subscriptionInfo.Subscription is not { Status: "active" or "trialing" or "past_due" } ||
|
||||
subscriptionInfo.UpcomingInvoice == null)
|
||||
if (subscriptionInfo.Subscription is not
|
||||
{
|
||||
Status: "active" or "trialing" or "past_due",
|
||||
CollectionMethod: "charge_automatically"
|
||||
}
|
||||
|| subscriptionInfo.UpcomingInvoice == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var customer = await GetCustomerAsync(organization.GatewayCustomerId);
|
||||
var customer = await GetCustomerAsync(organization.GatewayCustomerId, GetCustomerPaymentOptions());
|
||||
|
||||
var paymentSource = await GetBillingPaymentSourceAsync(customer);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user