mirror of
https://github.com/bitwarden/server.git
synced 2025-02-18 02:11:22 +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);
|
return new OrganizationAutoEnrollStatusResponseModel(organization.Id, data?.AutoEnrollEnabled ?? false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("{id}/risks-subscription-failure")]
|
[HttpGet("{id}/billing-status")]
|
||||||
public async Task<OrganizationRisksSubscriptionFailureResponseModel> RisksSubscriptionFailure(Guid id)
|
public async Task<OrganizationBillingStatusResponseModel> GetBillingStatus(Guid id)
|
||||||
{
|
{
|
||||||
if (!await _currentContext.EditPaymentMethods(id))
|
if (!await _currentContext.EditPaymentMethods(id))
|
||||||
{
|
{
|
||||||
return new OrganizationRisksSubscriptionFailureResponseModel(id, false);
|
throw new NotFoundException();
|
||||||
}
|
}
|
||||||
|
|
||||||
var organization = await _organizationRepository.GetByIdAsync(id);
|
var organization = await _organizationRepository.GetByIdAsync(id);
|
||||||
|
|
||||||
var risksSubscriptionFailure = await _paymentService.RisksSubscriptionFailure(organization);
|
var risksSubscriptionFailure = await _paymentService.RisksSubscriptionFailure(organization);
|
||||||
|
|
||||||
return new OrganizationRisksSubscriptionFailureResponseModel(id, risksSubscriptionFailure);
|
return new OrganizationBillingStatusResponseModel(organization, risksSubscriptionFailure);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("")]
|
[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 PM5766AutomaticTax = "PM-5766-automatic-tax";
|
||||||
public const string PM5864DollarThreshold = "PM-5864-dollar-threshold";
|
public const string PM5864DollarThreshold = "PM-5864-dollar-threshold";
|
||||||
public const string AC2101UpdateTrialInitiationEmail = "AC-2101-update-trial-initiation-email";
|
public const string AC2101UpdateTrialInitiationEmail = "AC-2101-update-trial-initiation-email";
|
||||||
|
public const string ShowPaymentMethodWarningBanners = "show-payment-method-warning-banners";
|
||||||
|
|
||||||
public static List<string> GetAllKeys()
|
public static List<string> GetAllKeys()
|
||||||
{
|
{
|
||||||
|
@ -42,6 +42,7 @@ public class SubscriptionInfo
|
|||||||
{
|
{
|
||||||
Items = sub.Items.Data.Select(i => new BillingSubscriptionItem(i));
|
Items = sub.Items.Data.Select(i => new BillingSubscriptionItem(i));
|
||||||
}
|
}
|
||||||
|
CollectionMethod = sub.CollectionMethod;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DateTime? TrialStartDate { get; set; }
|
public DateTime? TrialStartDate { get; set; }
|
||||||
@ -54,6 +55,7 @@ public class SubscriptionInfo
|
|||||||
public string Status { get; set; }
|
public string Status { get; set; }
|
||||||
public bool Cancelled { get; set; }
|
public bool Cancelled { get; set; }
|
||||||
public IEnumerable<BillingSubscriptionItem> Items { get; set; } = new List<BillingSubscriptionItem>();
|
public IEnumerable<BillingSubscriptionItem> Items { get; set; } = new List<BillingSubscriptionItem>();
|
||||||
|
public string CollectionMethod { get; set; }
|
||||||
|
|
||||||
public class BillingSubscriptionItem
|
public class BillingSubscriptionItem
|
||||||
{
|
{
|
||||||
|
@ -1738,13 +1738,17 @@ public class StripePaymentService : IPaymentService
|
|||||||
{
|
{
|
||||||
var subscriptionInfo = await GetSubscriptionAsync(organization);
|
var subscriptionInfo = await GetSubscriptionAsync(organization);
|
||||||
|
|
||||||
if (subscriptionInfo.Subscription is not { Status: "active" or "trialing" or "past_due" } ||
|
if (subscriptionInfo.Subscription is not
|
||||||
subscriptionInfo.UpcomingInvoice == null)
|
{
|
||||||
|
Status: "active" or "trialing" or "past_due",
|
||||||
|
CollectionMethod: "charge_automatically"
|
||||||
|
}
|
||||||
|
|| subscriptionInfo.UpcomingInvoice == null)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var customer = await GetCustomerAsync(organization.GatewayCustomerId);
|
var customer = await GetCustomerAsync(organization.GatewayCustomerId, GetCustomerPaymentOptions());
|
||||||
|
|
||||||
var paymentSource = await GetBillingPaymentSourceAsync(customer);
|
var paymentSource = await GetBillingPaymentSourceAsync(customer);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user