mirror of
https://github.com/bitwarden/server.git
synced 2024-11-24 12:35:25 +01:00
[PM-14275] Add IsManaged to OrganizationMetadata (#4957)
* Add IsManaged to OrganizationMetadata * Remove subscription requirement from self-host eligibility check * Remove unused service * Run dotnet format
This commit is contained in:
parent
2893ca729f
commit
249c39e71e
@ -4,10 +4,12 @@ namespace Bit.Api.Billing.Models.Responses;
|
|||||||
|
|
||||||
public record OrganizationMetadataResponse(
|
public record OrganizationMetadataResponse(
|
||||||
bool IsEligibleForSelfHost,
|
bool IsEligibleForSelfHost,
|
||||||
|
bool IsManaged,
|
||||||
bool IsOnSecretsManagerStandalone)
|
bool IsOnSecretsManagerStandalone)
|
||||||
{
|
{
|
||||||
public static OrganizationMetadataResponse From(OrganizationMetadata metadata)
|
public static OrganizationMetadataResponse From(OrganizationMetadata metadata)
|
||||||
=> new(
|
=> new(
|
||||||
metadata.IsEligibleForSelfHost,
|
metadata.IsEligibleForSelfHost,
|
||||||
|
metadata.IsManaged,
|
||||||
metadata.IsOnSecretsManagerStandalone);
|
metadata.IsOnSecretsManagerStandalone);
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,5 @@
|
|||||||
|
|
||||||
public record OrganizationMetadata(
|
public record OrganizationMetadata(
|
||||||
bool IsEligibleForSelfHost,
|
bool IsEligibleForSelfHost,
|
||||||
bool IsOnSecretsManagerStandalone)
|
bool IsManaged,
|
||||||
{
|
bool IsOnSecretsManagerStandalone);
|
||||||
public static OrganizationMetadata Default() => new(
|
|
||||||
IsEligibleForSelfHost: false,
|
|
||||||
IsOnSecretsManagerStandalone: false);
|
|
||||||
}
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using Bit.Core.AdminConsole.Entities;
|
using Bit.Core.AdminConsole.Entities;
|
||||||
using Bit.Core.AdminConsole.Repositories;
|
|
||||||
using Bit.Core.Billing.Caches;
|
using Bit.Core.Billing.Caches;
|
||||||
using Bit.Core.Billing.Constants;
|
using Bit.Core.Billing.Constants;
|
||||||
using Bit.Core.Billing.Models;
|
using Bit.Core.Billing.Models;
|
||||||
@ -27,7 +26,6 @@ public class OrganizationBillingService(
|
|||||||
IGlobalSettings globalSettings,
|
IGlobalSettings globalSettings,
|
||||||
ILogger<OrganizationBillingService> logger,
|
ILogger<OrganizationBillingService> logger,
|
||||||
IOrganizationRepository organizationRepository,
|
IOrganizationRepository organizationRepository,
|
||||||
IProviderRepository providerRepository,
|
|
||||||
ISetupIntentCache setupIntentCache,
|
ISetupIntentCache setupIntentCache,
|
||||||
IStripeAdapter stripeAdapter,
|
IStripeAdapter stripeAdapter,
|
||||||
ISubscriberService subscriberService) : IOrganizationBillingService
|
ISubscriberService subscriberService) : IOrganizationBillingService
|
||||||
@ -71,11 +69,11 @@ public class OrganizationBillingService(
|
|||||||
|
|
||||||
var subscription = await subscriberService.GetSubscription(organization);
|
var subscription = await subscriberService.GetSubscription(organization);
|
||||||
|
|
||||||
var isEligibleForSelfHost = await IsEligibleForSelfHost(organization, subscription);
|
var isEligibleForSelfHost = IsEligibleForSelfHost(organization);
|
||||||
|
var isManaged = organization.Status == OrganizationStatusType.Managed;
|
||||||
var isOnSecretsManagerStandalone = IsOnSecretsManagerStandalone(organization, customer, subscription);
|
var isOnSecretsManagerStandalone = IsOnSecretsManagerStandalone(organization, customer, subscription);
|
||||||
|
|
||||||
return new OrganizationMetadata(isEligibleForSelfHost, isOnSecretsManagerStandalone);
|
return new OrganizationMetadata(isEligibleForSelfHost, isManaged, isOnSecretsManagerStandalone);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task UpdatePaymentMethod(
|
public async Task UpdatePaymentMethod(
|
||||||
@ -339,26 +337,12 @@ public class OrganizationBillingService(
|
|||||||
return await stripeAdapter.SubscriptionCreateAsync(subscriptionCreateOptions);
|
return await stripeAdapter.SubscriptionCreateAsync(subscriptionCreateOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<bool> IsEligibleForSelfHost(
|
private static bool IsEligibleForSelfHost(
|
||||||
Organization organization,
|
Organization organization)
|
||||||
Subscription? organizationSubscription)
|
|
||||||
{
|
{
|
||||||
if (organization.Status != OrganizationStatusType.Managed)
|
var eligibleSelfHostPlans = StaticStore.Plans.Where(plan => plan.HasSelfHost).Select(plan => plan.Type);
|
||||||
{
|
|
||||||
return organization.Plan.Contains("Families") ||
|
|
||||||
organization.Plan.Contains("Enterprise") && IsActive(organizationSubscription);
|
|
||||||
}
|
|
||||||
|
|
||||||
var provider = await providerRepository.GetByOrganizationIdAsync(organization.Id);
|
return eligibleSelfHostPlans.Contains(organization.PlanType);
|
||||||
|
|
||||||
var providerSubscription = await subscriberService.GetSubscriptionOrThrow(provider);
|
|
||||||
|
|
||||||
return organization.Plan.Contains("Enterprise") && IsActive(providerSubscription);
|
|
||||||
|
|
||||||
bool IsActive(Subscription? subscription) => subscription?.Status is
|
|
||||||
StripeConstants.SubscriptionStatus.Active or
|
|
||||||
StripeConstants.SubscriptionStatus.Trialing or
|
|
||||||
StripeConstants.SubscriptionStatus.PastDue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool IsOnSecretsManagerStandalone(
|
private static bool IsOnSecretsManagerStandalone(
|
||||||
|
@ -52,16 +52,17 @@ public class OrganizationBillingControllerTests
|
|||||||
{
|
{
|
||||||
sutProvider.GetDependency<ICurrentContext>().AccessMembersTab(organizationId).Returns(true);
|
sutProvider.GetDependency<ICurrentContext>().AccessMembersTab(organizationId).Returns(true);
|
||||||
sutProvider.GetDependency<IOrganizationBillingService>().GetMetadata(organizationId)
|
sutProvider.GetDependency<IOrganizationBillingService>().GetMetadata(organizationId)
|
||||||
.Returns(new OrganizationMetadata(true, true));
|
.Returns(new OrganizationMetadata(true, true, true));
|
||||||
|
|
||||||
var result = await sutProvider.Sut.GetMetadataAsync(organizationId);
|
var result = await sutProvider.Sut.GetMetadataAsync(organizationId);
|
||||||
|
|
||||||
Assert.IsType<Ok<OrganizationMetadataResponse>>(result);
|
Assert.IsType<Ok<OrganizationMetadataResponse>>(result);
|
||||||
|
|
||||||
var organizationMetadataResponse = ((Ok<OrganizationMetadataResponse>)result).Value;
|
var response = ((Ok<OrganizationMetadataResponse>)result).Value;
|
||||||
|
|
||||||
Assert.True(organizationMetadataResponse.IsEligibleForSelfHost);
|
Assert.True(response.IsEligibleForSelfHost);
|
||||||
Assert.True(organizationMetadataResponse.IsOnSecretsManagerStandalone);
|
Assert.True(response.IsManaged);
|
||||||
|
Assert.True(response.IsOnSecretsManagerStandalone);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Theory, BitAutoData]
|
[Theory, BitAutoData]
|
||||||
|
Loading…
Reference in New Issue
Block a user