1
0
mirror of https://github.com/bitwarden/server.git synced 2024-11-21 12:05:42 +01:00

[PM-8830] Billing Enums Rename (#4180)

* Renamed ProductType to ProductTierType

* Renamed Product properties to ProductTier

* Moved ProductTierType to Bit.Core.Billing.Enums namespace from Bit.Core.Enums

* Moved PlanType enum to Bit.Core.Billing.Enums

* Moved StaticStore to Bit.Core.Billing.Models.StaticStore namespace

* Added ProductType enum

* dotnet format
This commit is contained in:
Conner Turnbull 2024-06-14 15:34:47 -04:00 committed by GitHub
parent 41ed38080f
commit 721d2969d4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
101 changed files with 219 additions and 147 deletions

View File

@ -5,6 +5,7 @@ using Bit.Core.AdminConsole.Providers.Interfaces;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.AdminConsole.Services; using Bit.Core.AdminConsole.Services;
using Bit.Core.Billing.Entities; using Bit.Core.Billing.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Repositories; using Bit.Core.Billing.Repositories;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;

View File

@ -7,6 +7,7 @@ using Bit.Core.AdminConsole.Models.Business.Provider;
using Bit.Core.AdminConsole.Models.Business.Tokenables; using Bit.Core.AdminConsole.Models.Business.Tokenables;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.AdminConsole.Services; using Bit.Core.AdminConsole.Services;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Extensions; using Bit.Core.Billing.Extensions;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;

View File

@ -8,6 +8,7 @@ using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Billing; using Bit.Core.Billing;
using Bit.Core.Billing.Constants; using Bit.Core.Billing.Constants;
using Bit.Core.Billing.Entities; using Bit.Core.Billing.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Extensions; using Bit.Core.Billing.Extensions;
using Bit.Core.Billing.Models; using Bit.Core.Billing.Models;
using Bit.Core.Billing.Repositories; using Bit.Core.Billing.Repositories;

View File

@ -1,4 +1,4 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.SecretsManager.Queries.Projects.Interfaces; using Bit.Core.SecretsManager.Queries.Projects.Interfaces;

View File

@ -5,6 +5,7 @@ using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Billing.Constants; using Bit.Core.Billing.Constants;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Services; using Bit.Core.Billing.Services;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;

View File

@ -7,6 +7,7 @@ using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.AdminConsole.Models.Business.Provider; using Bit.Core.AdminConsole.Models.Business.Provider;
using Bit.Core.AdminConsole.Models.Business.Tokenables; using Bit.Core.AdminConsole.Models.Business.Tokenables;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Billing.Enums;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;

View File

@ -10,6 +10,7 @@ using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Billing; using Bit.Core.Billing;
using Bit.Core.Billing.Constants; using Bit.Core.Billing.Constants;
using Bit.Core.Billing.Entities; using Bit.Core.Billing.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Models; using Bit.Core.Billing.Models;
using Bit.Core.Billing.Repositories; using Bit.Core.Billing.Repositories;
using Bit.Core.Billing.Services; using Bit.Core.Billing.Services;

View File

@ -1,6 +1,6 @@
using Bit.Commercial.Core.SecretsManager.Queries.Projects; using Bit.Commercial.Core.SecretsManager.Queries.Projects;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.SecretsManager.Repositories; using Bit.Core.SecretsManager.Repositories;

View File

@ -10,6 +10,7 @@ using Bit.Core.AdminConsole.Providers.Interfaces;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.AdminConsole.Services; using Bit.Core.AdminConsole.Services;
using Bit.Core.Billing.Entities; using Bit.Core.Billing.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Extensions; using Bit.Core.Billing.Extensions;
using Bit.Core.Billing.Repositories; using Bit.Core.Billing.Repositories;
using Bit.Core.Enums; using Bit.Core.Enums;

View File

@ -3,6 +3,7 @@ using System.Net;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Entities.Provider; using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Models; using Bit.Core.Billing.Models;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
@ -22,8 +23,8 @@ public class OrganizationEditModel : OrganizationViewModel
{ {
Provider = provider; Provider = provider;
BillingEmail = provider.Type == ProviderType.Reseller ? provider.BillingEmail : string.Empty; BillingEmail = provider.Type == ProviderType.Reseller ? provider.BillingEmail : string.Empty;
PlanType = Core.Enums.PlanType.TeamsMonthly; PlanType = Core.Billing.Enums.PlanType.TeamsMonthly;
Plan = Core.Enums.PlanType.TeamsMonthly.GetDisplayAttribute()?.GetName(); Plan = Core.Billing.Enums.PlanType.TeamsMonthly.GetDisplayAttribute()?.GetName();
LicenseKey = RandomLicenseKey; LicenseKey = RandomLicenseKey;
} }

View File

@ -2,6 +2,7 @@
using Bit.Core.AdminConsole.Entities.Provider; using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Models.Data.Provider; using Bit.Core.AdminConsole.Models.Data.Provider;
using Bit.Core.Billing.Entities; using Bit.Core.Billing.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
namespace Bit.Admin.AdminConsole.Models; namespace Bit.Admin.AdminConsole.Models;

View File

@ -1,5 +1,6 @@
@using Bit.Admin.Enums; @using Bit.Admin.Enums;
@using Bit.Admin.Models @using Bit.Admin.Models
@using Bit.Core.Billing.Enums
@using Bit.Core.Enums @using Bit.Core.Enums
@inject Bit.Admin.Services.IAccessControlService AccessControlService @inject Bit.Admin.Services.IAccessControlService AccessControlService
@model OrganizationEditModel @model OrganizationEditModel

View File

@ -1,6 +1,7 @@
@using Bit.Admin.Enums; @using Bit.Admin.Enums;
@using Bit.Core.Enums @using Bit.Core.Enums
@using Bit.Core.AdminConsole.Enums.Provider @using Bit.Core.AdminConsole.Enums.Provider
@using Bit.Core.Billing.Enums
@using Bit.SharedWeb.Utilities @using Bit.SharedWeb.Utilities
@inject Bit.Admin.Services.IAccessControlService AccessControlService; @inject Bit.Admin.Services.IAccessControlService AccessControlService;

View File

@ -1,5 +1,6 @@
@inject IWebHostEnvironment HostingEnvironment @inject IWebHostEnvironment HostingEnvironment
@using Bit.Admin.Utilities @using Bit.Admin.Utilities
@using Bit.Core.Billing.Enums
@using Bit.Core.Enums @using Bit.Core.Enums
@model OrganizationEditModel @model OrganizationEditModel

View File

@ -149,7 +149,7 @@
<th>Id</th> <th>Id</th>
<th>Customer Email</th> <th>Customer Email</th>
<th>Status</th> <th>Status</th>
<th>Product</th> <th>Product Tier</th>
<th>Current Period End</th> <th>Current Period End</th>
</tr> </tr>
</thead> </thead>

View File

@ -18,6 +18,7 @@ using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Repositories; using Bit.Core.Auth.Repositories;
using Bit.Core.Auth.Services; using Bit.Core.Auth.Services;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Extensions; using Bit.Core.Billing.Extensions;
using Bit.Core.Billing.Services; using Bit.Core.Billing.Services;
using Bit.Core.Context; using Bit.Core.Context;
@ -355,7 +356,7 @@ public class OrganizationsController : Controller
{ {
// Non-enterprise orgs should not be able to create or view an apikey of billing sync/scim key types // Non-enterprise orgs should not be able to create or view an apikey of billing sync/scim key types
var plan = StaticStore.GetPlan(organization.PlanType); var plan = StaticStore.GetPlan(organization.PlanType);
if (plan.Product != ProductType.Enterprise) if (plan.ProductTier != ProductTierType.Enterprise)
{ {
throw new NotFoundException(); throw new NotFoundException();
} }

View File

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;

View File

@ -1,5 +1,5 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
namespace Bit.Api.AdminConsole.Models.Request.Organizations; namespace Bit.Api.AdminConsole.Models.Request.Organizations;

View File

@ -1,7 +1,7 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Bit.Api.Models.Response; using Bit.Api.Models.Response;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.Api; using Bit.Core.Models.Api;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Utilities; using Bit.Core.Utilities;

View File

@ -2,6 +2,7 @@
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models.Data; using Bit.Core.Auth.Models.Data;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Api; using Bit.Core.Models.Api;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;
@ -33,7 +34,7 @@ public class ProfileOrganizationResponseModel : ResponseModel
UsePasswordManager = organization.UsePasswordManager; UsePasswordManager = organization.UsePasswordManager;
UsersGetPremium = organization.UsersGetPremium; UsersGetPremium = organization.UsersGetPremium;
UseCustomPermissions = organization.UseCustomPermissions; UseCustomPermissions = organization.UseCustomPermissions;
UseActivateAutofillPolicy = StaticStore.GetPlan(organization.PlanType).Product == ProductType.Enterprise; UseActivateAutofillPolicy = StaticStore.GetPlan(organization.PlanType).ProductTier == ProductTierType.Enterprise;
SelfHost = organization.SelfHost; SelfHost = organization.SelfHost;
Seats = organization.Seats; Seats = organization.Seats;
MaxCollections = organization.MaxCollections; MaxCollections = organization.MaxCollections;
@ -56,7 +57,7 @@ public class ProfileOrganizationResponseModel : ResponseModel
FamilySponsorshipAvailable = FamilySponsorshipFriendlyName == null && FamilySponsorshipAvailable = FamilySponsorshipFriendlyName == null &&
StaticStore.GetSponsoredPlan(PlanSponsorshipType.FamiliesForEnterprise) StaticStore.GetSponsoredPlan(PlanSponsorshipType.FamiliesForEnterprise)
.UsersCanSponsor(organization); .UsersCanSponsor(organization);
PlanProductType = StaticStore.GetPlan(organization.PlanType).Product; ProductTierType = StaticStore.GetPlan(organization.PlanType).ProductTier;
FamilySponsorshipLastSyncDate = organization.FamilySponsorshipLastSyncDate; FamilySponsorshipLastSyncDate = organization.FamilySponsorshipLastSyncDate;
FamilySponsorshipToDelete = organization.FamilySponsorshipToDelete; FamilySponsorshipToDelete = organization.FamilySponsorshipToDelete;
FamilySponsorshipValidUntil = organization.FamilySponsorshipValidUntil; FamilySponsorshipValidUntil = organization.FamilySponsorshipValidUntil;
@ -147,7 +148,7 @@ public class ProfileOrganizationResponseModel : ResponseModel
public ProviderType? ProviderType { get; set; } public ProviderType? ProviderType { get; set; }
public string FamilySponsorshipFriendlyName { get; set; } public string FamilySponsorshipFriendlyName { get; set; }
public bool FamilySponsorshipAvailable { get; set; } public bool FamilySponsorshipAvailable { get; set; }
public ProductType PlanProductType { get; set; } public ProductTierType ProductTierType { get; set; }
public bool KeyConnectorEnabled { get; set; } public bool KeyConnectorEnabled { get; set; }
public string KeyConnectorUrl { get; set; } public string KeyConnectorUrl { get; set; }
public DateTime? FamilySponsorshipLastSyncDate { get; set; } public DateTime? FamilySponsorshipLastSyncDate { get; set; }

View File

@ -1,4 +1,5 @@
using Bit.Core.AdminConsole.Models.Data.Provider; using Bit.Core.AdminConsole.Models.Data.Provider;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;
using Bit.Core.Utilities; using Bit.Core.Utilities;
@ -25,7 +26,7 @@ public class ProfileProviderOrganizationResponseModel : ProfileOrganizationRespo
UseResetPassword = organization.UseResetPassword; UseResetPassword = organization.UseResetPassword;
UsersGetPremium = organization.UsersGetPremium; UsersGetPremium = organization.UsersGetPremium;
UseCustomPermissions = organization.UseCustomPermissions; UseCustomPermissions = organization.UseCustomPermissions;
UseActivateAutofillPolicy = StaticStore.GetPlan(organization.PlanType).Product == ProductType.Enterprise; UseActivateAutofillPolicy = StaticStore.GetPlan(organization.PlanType).ProductTier == ProductTierType.Enterprise;
SelfHost = organization.SelfHost; SelfHost = organization.SelfHost;
Seats = organization.Seats; Seats = organization.Seats;
MaxCollections = organization.MaxCollections; MaxCollections = organization.MaxCollections;
@ -42,7 +43,7 @@ public class ProfileProviderOrganizationResponseModel : ProfileOrganizationRespo
UserId = organization.UserId; UserId = organization.UserId;
ProviderId = organization.ProviderId; ProviderId = organization.ProviderId;
ProviderName = organization.ProviderName; ProviderName = organization.ProviderName;
PlanProductType = StaticStore.GetPlan(organization.PlanType).Product; ProductTierType = StaticStore.GetPlan(organization.PlanType).ProductTier;
LimitCollectionCreationDeletion = organization.LimitCollectionCreationDeletion; LimitCollectionCreationDeletion = organization.LimitCollectionCreationDeletion;
AllowAdminAccessToAllCollectionItems = organization.AllowAdminAccessToAllCollectionItems; AllowAdminAccessToAllCollectionItems = organization.AllowAdminAccessToAllCollectionItems;
FlexibleCollections = organization.FlexibleCollections; FlexibleCollections = organization.FlexibleCollections;

View File

@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using Bit.Api.Utilities; using Bit.Api.Utilities;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
namespace Bit.Api.Billing.Models.Requests; namespace Bit.Api.Billing.Models.Requests;

View File

@ -1,4 +1,4 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.Api; using Bit.Core.Models.Api;
using Bit.Core.Models.StaticStore; using Bit.Core.Models.StaticStore;
@ -15,7 +15,7 @@ public class PlanResponseModel : ResponseModel
} }
Type = plan.Type; Type = plan.Type;
Product = plan.Product; ProductTier = plan.ProductTier;
Name = plan.Name; Name = plan.Name;
IsAnnual = plan.IsAnnual; IsAnnual = plan.IsAnnual;
NameLocalizationKey = plan.NameLocalizationKey; NameLocalizationKey = plan.NameLocalizationKey;
@ -45,7 +45,7 @@ public class PlanResponseModel : ResponseModel
} }
public PlanType Type { get; set; } public PlanType Type { get; set; }
public ProductType Product { get; set; } public ProductTierType ProductTier { get; set; }
public string Name { get; set; } public string Name { get; set; }
public bool IsAnnual { get; set; } public bool IsAnnual { get; set; }
public string NameLocalizationKey { get; set; } public string NameLocalizationKey { get; set; }

View File

@ -1,6 +1,6 @@
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.Settings; using Bit.Core.Settings;
using Bit.Core.Utilities; using Bit.Core.Utilities;

View File

@ -5,6 +5,7 @@ using Bit.Core;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Billing.Constants; using Bit.Core.Billing.Constants;
using Bit.Core.Billing.Enums;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces; using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;

View File

@ -3,6 +3,7 @@ using System.Net;
using System.Text.Json; using System.Text.Json;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models; using Bit.Core.Auth.Models;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;

View File

@ -1,5 +1,6 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.Billing.Enums;
using Bit.Core.Utilities; using Bit.Core.Utilities;
namespace Bit.Core.Models.Data.Organizations.OrganizationUsers; namespace Bit.Core.Models.Data.Organizations.OrganizationUsers;
@ -33,7 +34,7 @@ public class OrganizationUserOrganizationDetails
public Enums.OrganizationUserStatusType Status { get; set; } public Enums.OrganizationUserStatusType Status { get; set; }
public Enums.OrganizationUserType Type { get; set; } public Enums.OrganizationUserType Type { get; set; }
public bool Enabled { get; set; } public bool Enabled { get; set; }
public Enums.PlanType PlanType { get; set; } public PlanType PlanType { get; set; }
public string SsoExternalId { get; set; } public string SsoExternalId { get; set; }
public string Identifier { get; set; } public string Identifier { get; set; }
public string Permissions { get; set; } public string Permissions { get; set; }

View File

@ -1,5 +1,6 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.Billing.Enums;
using Bit.Core.Utilities; using Bit.Core.Utilities;
namespace Bit.Core.AdminConsole.Models.Data.Provider; namespace Bit.Core.AdminConsole.Models.Data.Provider;
@ -38,7 +39,7 @@ public class ProviderUserOrganizationDetails
public Guid? ProviderUserId { get; set; } public Guid? ProviderUserId { get; set; }
[JsonConverter(typeof(HtmlEncodingStringConverter))] [JsonConverter(typeof(HtmlEncodingStringConverter))]
public string ProviderName { get; set; } public string ProviderName { get; set; }
public Core.Enums.PlanType PlanType { get; set; } public PlanType PlanType { get; set; }
public bool LimitCollectionCreationDeletion { get; set; } public bool LimitCollectionCreationDeletion { get; set; }
public bool AllowAdminAccessToAllCollectionItems { get; set; } public bool AllowAdminAccessToAllCollectionItems { get; set; }
public bool FlexibleCollections { get; set; } public bool FlexibleCollections { get; set; }

View File

@ -1,6 +1,7 @@
using Bit.Core.AdminConsole.Enums; using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.Services; using Bit.Core.AdminConsole.Services;
using Bit.Core.Auth.Models.Business.Tokenables; using Bit.Core.Auth.Models.Business.Tokenables;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;

View File

@ -13,6 +13,7 @@ using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models.Business; using Bit.Core.Auth.Models.Business;
using Bit.Core.Auth.Models.Business.Tokenables; using Bit.Core.Auth.Models.Business.Tokenables;
using Bit.Core.Auth.Repositories; using Bit.Core.Auth.Repositories;
using Bit.Core.Billing.Enums;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
@ -2054,9 +2055,9 @@ public class OrganizationService : IOrganizationService
throw new BadRequestException("Plan does not allow additional Machine Accounts."); throw new BadRequestException("Plan does not allow additional Machine Accounts.");
} }
if ((plan.Product == ProductType.TeamsStarter && if ((plan.ProductTier == ProductTierType.TeamsStarter &&
upgrade.AdditionalSmSeats.GetValueOrDefault() > plan.PasswordManager.BaseSeats) || upgrade.AdditionalSmSeats.GetValueOrDefault() > plan.PasswordManager.BaseSeats) ||
(plan.Product != ProductType.TeamsStarter && (plan.ProductTier != ProductTierType.TeamsStarter &&
upgrade.AdditionalSmSeats.GetValueOrDefault() > upgrade.AdditionalSeats)) upgrade.AdditionalSmSeats.GetValueOrDefault() > upgrade.AdditionalSeats))
{ {
throw new BadRequestException("You cannot have more Secrets Manager seats than Password Manager seats."); throw new BadRequestException("You cannot have more Secrets Manager seats than Password Manager seats.");

View File

@ -1,5 +1,5 @@
using Bit.Core.Entities; using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Entities;
using Bit.Core.Utilities; using Bit.Core.Utilities;
namespace Bit.Core.Billing.Entities; namespace Bit.Core.Billing.Entities;

View File

@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Bit.Core.Enums; namespace Bit.Core.Billing.Enums;
public enum PlanType : byte public enum PlanType : byte
{ {

View File

@ -1,8 +1,8 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace Bit.Core.Enums; namespace Bit.Core.Billing.Enums;
public enum ProductType : byte public enum ProductTierType : byte
{ {
[Display(Name = "Free")] [Display(Name = "Free")]
Free = 0, Free = 0,
@ -15,4 +15,3 @@ public enum ProductType : byte
[Display(Name = "Teams Starter")] [Display(Name = "Teams Starter")]
TeamsStarter = 4, TeamsStarter = 4,
} }

View File

@ -0,0 +1,11 @@
using System.ComponentModel.DataAnnotations;
namespace Bit.Core.Billing.Enums;
public enum ProductType
{
[Display(Name = "Password Manager")]
PasswordManager = 0,
[Display(Name = "Secrets Manager")]
SecretsManager = 1,
}

View File

@ -1,6 +1,7 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Entities.Provider; using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
using Stripe; using Stripe;

View File

@ -1,5 +1,5 @@
using Bit.Core.Billing.Entities; using Bit.Core.Billing.Entities;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
namespace Bit.Core.Billing.Models; namespace Bit.Core.Billing.Models;

View File

@ -1,11 +1,11 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
namespace Bit.Core.Models.StaticStore; namespace Bit.Core.Models.StaticStore;
public abstract record Plan public abstract record Plan
{ {
public PlanType Type { get; protected init; } public PlanType Type { get; protected init; }
public ProductType Product { get; protected init; } public ProductTierType ProductTier { get; protected init; }
public string Name { get; protected init; } public string Name { get; protected init; }
public bool IsAnnual { get; protected init; } public bool IsAnnual { get; protected init; }
public string NameLocalizationKey { get; protected init; } public string NameLocalizationKey { get; protected init; }

View File

@ -1,8 +1,9 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record CustomPlan : Models.StaticStore.Plan public record CustomPlan : Plan
{ {
public CustomPlan() public CustomPlan()
{ {

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record Enterprise2019Plan : Models.StaticStore.Plan public record Enterprise2019Plan : Plan
{ {
public Enterprise2019Plan(bool isAnnual) public Enterprise2019Plan(bool isAnnual)
{ {
Type = isAnnual ? PlanType.EnterpriseAnnually2019 : PlanType.EnterpriseMonthly2019; Type = isAnnual ? PlanType.EnterpriseAnnually2019 : PlanType.EnterpriseMonthly2019;
Product = ProductType.Enterprise; ProductTier = ProductTierType.Enterprise;
Name = isAnnual ? "Enterprise (Annually) 2019" : "Enterprise (Monthly) 2019"; Name = isAnnual ? "Enterprise (Annually) 2019" : "Enterprise (Monthly) 2019";
IsAnnual = isAnnual; IsAnnual = isAnnual;
NameLocalizationKey = "planNameEnterprise"; NameLocalizationKey = "planNameEnterprise";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record Enterprise2020Plan : Models.StaticStore.Plan public record Enterprise2020Plan : Plan
{ {
public Enterprise2020Plan(bool isAnnual) public Enterprise2020Plan(bool isAnnual)
{ {
Type = isAnnual ? PlanType.EnterpriseAnnually2020 : PlanType.EnterpriseMonthly2020; Type = isAnnual ? PlanType.EnterpriseAnnually2020 : PlanType.EnterpriseMonthly2020;
Product = ProductType.Enterprise; ProductTier = ProductTierType.Enterprise;
Name = isAnnual ? "Enterprise (Annually) 2020" : "Enterprise (Monthly) 2020"; Name = isAnnual ? "Enterprise (Annually) 2020" : "Enterprise (Monthly) 2020";
IsAnnual = isAnnual; IsAnnual = isAnnual;
NameLocalizationKey = "planNameEnterprise"; NameLocalizationKey = "planNameEnterprise";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record EnterprisePlan : Plan public record EnterprisePlan : Plan
{ {
public EnterprisePlan(bool isAnnual) public EnterprisePlan(bool isAnnual)
{ {
Type = isAnnual ? PlanType.EnterpriseAnnually : PlanType.EnterpriseMonthly; Type = isAnnual ? PlanType.EnterpriseAnnually : PlanType.EnterpriseMonthly;
Product = ProductType.Enterprise; ProductTier = ProductTierType.Enterprise;
Name = isAnnual ? "Enterprise (Annually)" : "Enterprise (Monthly)"; Name = isAnnual ? "Enterprise (Annually)" : "Enterprise (Monthly)";
IsAnnual = isAnnual; IsAnnual = isAnnual;
NameLocalizationKey = "planNameEnterprise"; NameLocalizationKey = "planNameEnterprise";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record Enterprise2023Plan : Plan public record Enterprise2023Plan : Plan
{ {
public Enterprise2023Plan(bool isAnnual) public Enterprise2023Plan(bool isAnnual)
{ {
Type = isAnnual ? PlanType.EnterpriseAnnually2023 : PlanType.EnterpriseMonthly2023; Type = isAnnual ? PlanType.EnterpriseAnnually2023 : PlanType.EnterpriseMonthly2023;
Product = ProductType.Enterprise; ProductTier = ProductTierType.Enterprise;
Name = isAnnual ? "Enterprise (Annually)" : "Enterprise (Monthly)"; Name = isAnnual ? "Enterprise (Annually)" : "Enterprise (Monthly)";
IsAnnual = isAnnual; IsAnnual = isAnnual;
NameLocalizationKey = "planNameEnterprise"; NameLocalizationKey = "planNameEnterprise";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record Families2019Plan : Models.StaticStore.Plan public record Families2019Plan : Plan
{ {
public Families2019Plan() public Families2019Plan()
{ {
Type = PlanType.FamiliesAnnually2019; Type = PlanType.FamiliesAnnually2019;
Product = ProductType.Families; ProductTier = ProductTierType.Families;
Name = "Families 2019"; Name = "Families 2019";
IsAnnual = true; IsAnnual = true;
NameLocalizationKey = "planNameFamilies"; NameLocalizationKey = "planNameFamilies";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record FamiliesPlan : Models.StaticStore.Plan public record FamiliesPlan : Plan
{ {
public FamiliesPlan() public FamiliesPlan()
{ {
Type = PlanType.FamiliesAnnually; Type = PlanType.FamiliesAnnually;
Product = ProductType.Families; ProductTier = ProductTierType.Families;
Name = "Families"; Name = "Families";
IsAnnual = true; IsAnnual = true;
NameLocalizationKey = "planNameFamilies"; NameLocalizationKey = "planNameFamilies";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record FreePlan : Models.StaticStore.Plan public record FreePlan : Plan
{ {
public FreePlan() public FreePlan()
{ {
Type = PlanType.Free; Type = PlanType.Free;
Product = ProductType.Free; ProductTier = ProductTierType.Free;
Name = "Free"; Name = "Free";
NameLocalizationKey = "planNameFree"; NameLocalizationKey = "planNameFree";
DescriptionLocalizationKey = "planDescFree"; DescriptionLocalizationKey = "planDescFree";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record Teams2019Plan : Models.StaticStore.Plan public record Teams2019Plan : Plan
{ {
public Teams2019Plan(bool isAnnual) public Teams2019Plan(bool isAnnual)
{ {
Type = isAnnual ? PlanType.TeamsAnnually2019 : PlanType.TeamsMonthly2019; Type = isAnnual ? PlanType.TeamsAnnually2019 : PlanType.TeamsMonthly2019;
Product = ProductType.Teams; ProductTier = ProductTierType.Teams;
Name = isAnnual ? "Teams (Annually) 2019" : "Teams (Monthly) 2019"; Name = isAnnual ? "Teams (Annually) 2019" : "Teams (Monthly) 2019";
IsAnnual = isAnnual; IsAnnual = isAnnual;
NameLocalizationKey = "planNameTeams"; NameLocalizationKey = "planNameTeams";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record Teams2020Plan : Models.StaticStore.Plan public record Teams2020Plan : Plan
{ {
public Teams2020Plan(bool isAnnual) public Teams2020Plan(bool isAnnual)
{ {
Type = isAnnual ? PlanType.TeamsAnnually2020 : PlanType.TeamsMonthly2020; Type = isAnnual ? PlanType.TeamsAnnually2020 : PlanType.TeamsMonthly2020;
Product = ProductType.Teams; ProductTier = ProductTierType.Teams;
Name = isAnnual ? "Teams (Annually) 2020" : "Teams (Monthly) 2020"; Name = isAnnual ? "Teams (Annually) 2020" : "Teams (Monthly) 2020";
IsAnnual = isAnnual; IsAnnual = isAnnual;
NameLocalizationKey = "planNameTeams"; NameLocalizationKey = "planNameTeams";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record TeamsPlan : Plan public record TeamsPlan : Plan
{ {
public TeamsPlan(bool isAnnual) public TeamsPlan(bool isAnnual)
{ {
Type = isAnnual ? PlanType.TeamsAnnually : PlanType.TeamsMonthly; Type = isAnnual ? PlanType.TeamsAnnually : PlanType.TeamsMonthly;
Product = ProductType.Teams; ProductTier = ProductTierType.Teams;
Name = isAnnual ? "Teams (Annually)" : "Teams (Monthly)"; Name = isAnnual ? "Teams (Annually)" : "Teams (Monthly)";
IsAnnual = isAnnual; IsAnnual = isAnnual;
NameLocalizationKey = "planNameTeams"; NameLocalizationKey = "planNameTeams";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record Teams2023Plan : Plan public record Teams2023Plan : Plan
{ {
public Teams2023Plan(bool isAnnual) public Teams2023Plan(bool isAnnual)
{ {
Type = isAnnual ? PlanType.TeamsAnnually2023 : PlanType.TeamsMonthly2023; Type = isAnnual ? PlanType.TeamsAnnually2023 : PlanType.TeamsMonthly2023;
Product = ProductType.Teams; ProductTier = ProductTierType.Teams;
Name = isAnnual ? "Teams (Annually)" : "Teams (Monthly)"; Name = isAnnual ? "Teams (Annually)" : "Teams (Monthly)";
IsAnnual = isAnnual; IsAnnual = isAnnual;
NameLocalizationKey = "planNameTeams"; NameLocalizationKey = "planNameTeams";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record TeamsStarterPlan : Plan public record TeamsStarterPlan : Plan
{ {
public TeamsStarterPlan() public TeamsStarterPlan()
{ {
Type = PlanType.TeamsStarter; Type = PlanType.TeamsStarter;
Product = ProductType.TeamsStarter; ProductTier = ProductTierType.TeamsStarter;
Name = "Teams (Starter)"; Name = "Teams (Starter)";
NameLocalizationKey = "planNameTeamsStarter"; NameLocalizationKey = "planNameTeamsStarter";
DescriptionLocalizationKey = "planDescTeams"; DescriptionLocalizationKey = "planDescTeams";

View File

@ -1,13 +1,14 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.StaticStore;
namespace Bit.Core.Models.StaticStore.Plans; namespace Bit.Core.Billing.Models.StaticStore.Plans;
public record TeamsStarterPlan2023 : Plan public record TeamsStarterPlan2023 : Plan
{ {
public TeamsStarterPlan2023() public TeamsStarterPlan2023()
{ {
Type = PlanType.TeamsStarter2023; Type = PlanType.TeamsStarter2023;
Product = ProductType.TeamsStarter; ProductTier = ProductTierType.TeamsStarter;
Name = "Teams (Starter)"; Name = "Teams (Starter)";
NameLocalizationKey = "planNameTeamsStarter"; NameLocalizationKey = "planNameTeamsStarter";
DescriptionLocalizationKey = "planDescTeams"; DescriptionLocalizationKey = "planDescTeams";

View File

@ -1,4 +1,5 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Enums;
using Bit.Core.Models.Data.Organizations.OrganizationUsers; using Bit.Core.Models.Data.Organizations.OrganizationUsers;
namespace Bit.Core.Models.StaticStore; namespace Bit.Core.Models.StaticStore;
@ -6,8 +7,8 @@ namespace Bit.Core.Models.StaticStore;
public class SponsoredPlan public class SponsoredPlan
{ {
public PlanSponsorshipType PlanSponsorshipType { get; set; } public PlanSponsorshipType PlanSponsorshipType { get; set; }
public ProductType SponsoredProductType { get; set; } public ProductTierType SponsoredProductTierType { get; set; }
public ProductType SponsoringProductType { get; set; } public ProductTierType SponsoringProductTierType { get; set; }
public string StripePlanId { get; set; } public string StripePlanId { get; set; }
public Func<OrganizationUserOrganizationDetails, bool> UsersCanSponsor { get; set; } public Func<OrganizationUserOrganizationDetails, bool> UsersCanSponsor { get; set; }
} }

View File

@ -1,8 +1,8 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Entities.Provider; using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Models; using Bit.Core.Billing.Models;
using Bit.Core.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
namespace Bit.Core.Billing.Services; namespace Bit.Core.Billing.Services;

View File

@ -4,6 +4,7 @@ using System.Security.Cryptography.X509Certificates;
using System.Text; using System.Text;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Services; using Bit.Core.Services;
using Bit.Core.Settings; using Bit.Core.Settings;

View File

@ -1,4 +1,4 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
namespace Bit.Core.Models.Business; namespace Bit.Core.Models.Business;

View File

@ -1,5 +1,5 @@
using Bit.Core.Billing.Extensions; using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Billing.Extensions;
using Stripe; using Stripe;
using static Bit.Core.Billing.Utilities; using static Bit.Core.Billing.Utilities;

View File

@ -1,4 +1,4 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Stripe; using Stripe;
namespace Bit.Core.Models.Business; namespace Bit.Core.Models.Business;

View File

@ -1,7 +1,7 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Auth.Models.Business; using Bit.Core.Auth.Models.Business;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums;
namespace Bit.Core.Models.Mail; namespace Bit.Core.Models.Mail;
public class OrganizationInvitesInfo public class OrganizationInvitesInfo

View File

@ -53,9 +53,9 @@ public class CloudSyncSponsorshipsCommand : ICloudSyncSponsorshipsCommand
foreach (var selfHostedSponsorship in sponsorshipsData) foreach (var selfHostedSponsorship in sponsorshipsData)
{ {
var requiredSponsoringProductType = StaticStore.GetSponsoredPlan(selfHostedSponsorship.PlanSponsorshipType)?.SponsoringProductType; var requiredSponsoringProductType = StaticStore.GetSponsoredPlan(selfHostedSponsorship.PlanSponsorshipType)?.SponsoringProductTierType;
if (requiredSponsoringProductType == null if (requiredSponsoringProductType == null
|| StaticStore.GetPlan(sponsoringOrg.PlanType).Product != requiredSponsoringProductType.Value) || StaticStore.GetPlan(sponsoringOrg.PlanType).ProductTier != requiredSponsoringProductType.Value)
{ {
continue; // prevent unsupported sponsorships continue; // prevent unsupported sponsorships
} }

View File

@ -49,10 +49,10 @@ public class SetUpSponsorshipCommand : ISetUpSponsorshipCommand
} }
// Check org to sponsor's product type // Check org to sponsor's product type
var requiredSponsoredProductType = StaticStore.GetSponsoredPlan(sponsorship.PlanSponsorshipType.Value)?.SponsoredProductType; var requiredSponsoredProductType = StaticStore.GetSponsoredPlan(sponsorship.PlanSponsorshipType.Value)?.SponsoredProductTierType;
if (requiredSponsoredProductType == null || if (requiredSponsoredProductType == null ||
sponsoredOrganization == null || sponsoredOrganization == null ||
StaticStore.GetPlan(sponsoredOrganization.PlanType).Product != requiredSponsoredProductType.Value) StaticStore.GetPlan(sponsoredOrganization.PlanType).ProductTier != requiredSponsoredProductType.Value)
{ {
throw new BadRequestException("Can only redeem sponsorship offer on families organizations."); throw new BadRequestException("Can only redeem sponsorship offer on families organizations.");
} }

View File

@ -59,7 +59,7 @@ public class ValidateSponsorshipCommand : CancelSponsorshipCommand, IValidateSpo
var sponsoringOrgPlan = Utilities.StaticStore.GetPlan(sponsoringOrganization.PlanType); var sponsoringOrgPlan = Utilities.StaticStore.GetPlan(sponsoringOrganization.PlanType);
if (OrgDisabledForMoreThanGracePeriod(sponsoringOrganization) || if (OrgDisabledForMoreThanGracePeriod(sponsoringOrganization) ||
sponsoredPlan.SponsoringProductType != sponsoringOrgPlan.Product || sponsoredPlan.SponsoringProductTierType != sponsoringOrgPlan.ProductTier ||
existingSponsorship.ToDelete || existingSponsorship.ToDelete ||
SponsorshipIsSelfHostedOutOfSync(existingSponsorship)) SponsorshipIsSelfHostedOutOfSync(existingSponsorship))
{ {

View File

@ -30,10 +30,10 @@ public class CreateSponsorshipCommand : ICreateSponsorshipCommand
throw new BadRequestException("Cannot offer a Families Organization Sponsorship to yourself. Choose a different email."); throw new BadRequestException("Cannot offer a Families Organization Sponsorship to yourself. Choose a different email.");
} }
var requiredSponsoringProductType = StaticStore.GetSponsoredPlan(sponsorshipType)?.SponsoringProductType; var requiredSponsoringProductType = StaticStore.GetSponsoredPlan(sponsorshipType)?.SponsoringProductTierType;
if (requiredSponsoringProductType == null || if (requiredSponsoringProductType == null ||
sponsoringOrg == null || sponsoringOrg == null ||
StaticStore.GetPlan(sponsoringOrg.PlanType).Product != requiredSponsoringProductType.Value) StaticStore.GetPlan(sponsoringOrg.PlanType).ProductTier != requiredSponsoringProductType.Value)
{ {
throw new BadRequestException("Specified Organization cannot sponsor other organizations."); throw new BadRequestException("Specified Organization cannot sponsor other organizations.");
} }

View File

@ -1,7 +1,7 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.OrganizationFeatures.OrganizationSubscriptions.Interface; using Bit.Core.OrganizationFeatures.OrganizationSubscriptions.Interface;
@ -34,7 +34,7 @@ public class AddSecretsManagerSubscriptionCommand : IAddSecretsManagerSubscripti
var signup = SetOrganizationUpgrade(organization, additionalSmSeats, additionalServiceAccounts); var signup = SetOrganizationUpgrade(organization, additionalSmSeats, additionalServiceAccounts);
_organizationService.ValidateSecretsManagerPlan(plan, signup); _organizationService.ValidateSecretsManagerPlan(plan, signup);
if (plan.Product != ProductType.Free) if (plan.ProductTier != ProductTierType.Free)
{ {
await _paymentService.AddSecretsManagerToSubscription(organization, plan, additionalSmSeats, additionalServiceAccounts); await _paymentService.AddSecretsManagerToSubscription(organization, plan, additionalSmSeats, additionalServiceAccounts);
} }
@ -74,12 +74,12 @@ public class AddSecretsManagerSubscriptionCommand : IAddSecretsManagerSubscripti
} }
var plan = StaticStore.Plans.FirstOrDefault(p => p.Type == organization.PlanType && p.SupportsSecretsManager); var plan = StaticStore.Plans.FirstOrDefault(p => p.Type == organization.PlanType && p.SupportsSecretsManager);
if (string.IsNullOrWhiteSpace(organization.GatewayCustomerId) && plan.Product != ProductType.Free) if (string.IsNullOrWhiteSpace(organization.GatewayCustomerId) && plan.ProductTier != ProductTierType.Free)
{ {
throw new BadRequestException("No payment method found."); throw new BadRequestException("No payment method found.");
} }
if (string.IsNullOrWhiteSpace(organization.GatewaySubscriptionId) && plan.Product != ProductType.Free) if (string.IsNullOrWhiteSpace(organization.GatewaySubscriptionId) && plan.ProductTier != ProductTierType.Free)
{ {
throw new BadRequestException("No subscription found."); throw new BadRequestException("No subscription found.");
} }

View File

@ -1,4 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
@ -165,7 +166,7 @@ public class UpdateSecretsManagerSubscriptionCommand : IUpdateSecretsManagerSubs
throw new BadRequestException("Organization has no access to Secrets Manager."); throw new BadRequestException("Organization has no access to Secrets Manager.");
} }
if (update.Plan.Product == ProductType.Free) if (update.Plan.ProductTier == ProductTierType.Free)
{ {
// No need to check the organization is set up with Stripe // No need to check the organization is set up with Stripe
return; return;

View File

@ -4,6 +4,7 @@ using Bit.Core.AdminConsole.Models.OrganizationConnectionConfigs;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Repositories; using Bit.Core.Auth.Repositories;
using Bit.Core.Billing.Enums;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
@ -279,7 +280,7 @@ public class UpgradeOrganizationPlanCommand : IUpgradeOrganizationPlanCommand
if (success) if (success)
{ {
var upgradePath = GetUpgradePath(existingPlan.Product, newPlan.Product); var upgradePath = GetUpgradePath(existingPlan.ProductTier, newPlan.ProductTier);
await _referenceEventService.RaiseEventAsync( await _referenceEventService.RaiseEventAsync(
new ReferenceEvent(ReferenceEventType.UpgradePlan, organization, _currentContext) new ReferenceEvent(ReferenceEventType.UpgradePlan, organization, _currentContext)
{ {
@ -342,25 +343,25 @@ public class UpgradeOrganizationPlanCommand : IUpgradeOrganizationPlanCommand
return await _organizationRepository.GetByIdAsync(id); return await _organizationRepository.GetByIdAsync(id);
} }
private static string GetUpgradePath(ProductType oldProductType, ProductType newProductType) private static string GetUpgradePath(ProductTierType oldProductTierType, ProductTierType newProductTierType)
{ {
var oldDescription = _upgradePath.TryGetValue(oldProductType, out var description) var oldDescription = _upgradePath.TryGetValue(oldProductTierType, out var description)
? description ? description
: $"{oldProductType:G}"; : $"{oldProductTierType:G}";
var newDescription = _upgradePath.TryGetValue(newProductType, out description) var newDescription = _upgradePath.TryGetValue(newProductTierType, out description)
? description ? description
: $"{newProductType:G}"; : $"{newProductTierType:G}";
return $"{oldDescription} → {newDescription}"; return $"{oldDescription} → {newDescription}";
} }
private static readonly Dictionary<ProductType, string> _upgradePath = new() private static readonly Dictionary<ProductTierType, string> _upgradePath = new()
{ {
[ProductType.Free] = "2-person org", [ProductTierType.Free] = "2-person org",
[ProductType.Families] = "Families", [ProductTierType.Families] = "Families",
[ProductType.TeamsStarter] = "Teams Starter", [ProductTierType.TeamsStarter] = "Teams Starter",
[ProductType.Teams] = "Teams", [ProductTierType.Teams] = "Teams",
[ProductType.Enterprise] = "Enterprise" [ProductTierType.Enterprise] = "Enterprise"
}; };
} }

View File

@ -1,8 +1,8 @@
#nullable enable #nullable enable
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Bit.Core.Billing.Enums;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Enums;
using Bit.Core.Tools.Entities; using Bit.Core.Tools.Entities;
using Bit.Core.Tools.Enums; using Bit.Core.Tools.Enums;

View File

@ -13,9 +13,9 @@ using Azure.Storage.Queues.Models;
using Bit.Core.AdminConsole.Context; using Bit.Core.AdminConsole.Context;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Billing.Enums;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums;
using Bit.Core.Identity; using Bit.Core.Identity;
using Bit.Core.Settings; using Bit.Core.Settings;
using IdentityModel; using IdentityModel;

View File

@ -1,8 +1,9 @@
using System.Collections.Immutable; using System.Collections.Immutable;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Models.StaticStore.Plans;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Data.Organizations.OrganizationUsers; using Bit.Core.Models.Data.Organizations.OrganizationUsers;
using Bit.Core.Models.StaticStore; using Bit.Core.Models.StaticStore;
using Bit.Core.Models.StaticStore.Plans;
namespace Bit.Core.Utilities; namespace Bit.Core.Utilities;
@ -142,11 +143,11 @@ public static class StaticStore
new SponsoredPlan new SponsoredPlan
{ {
PlanSponsorshipType = PlanSponsorshipType.FamiliesForEnterprise, PlanSponsorshipType = PlanSponsorshipType.FamiliesForEnterprise,
SponsoredProductType = ProductType.Families, SponsoredProductTierType = ProductTierType.Families,
SponsoringProductType = ProductType.Enterprise, SponsoringProductTierType = ProductTierType.Enterprise,
StripePlanId = "2021-family-for-enterprise-annually", StripePlanId = "2021-family-for-enterprise-annually",
UsersCanSponsor = (OrganizationUserOrganizationDetails org) => UsersCanSponsor = (OrganizationUserOrganizationDetails org) =>
GetPlan(org.PlanType).Product == ProductType.Enterprise, GetPlan(org.PlanType).ProductTier == ProductTierType.Enterprise,
} }
}; };

View File

@ -1,5 +1,6 @@
using AutoMapper; using AutoMapper;
using AutoMapper.QueryableExtensions; using AutoMapper.QueryableExtensions;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Data.Organizations; using Bit.Core.Models.Data.Organizations;
using Bit.Core.Repositories; using Bit.Core.Repositories;

View File

@ -1,4 +1,5 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Enums;
using Bit.Infrastructure.EntityFramework.Models; using Bit.Infrastructure.EntityFramework.Models;
namespace Bit.Infrastructure.EntityFramework.Repositories.Queries; namespace Bit.Infrastructure.EntityFramework.Repositories.Queries;

View File

@ -6,6 +6,7 @@ using Bit.Api.IntegrationTest.Factories;
using Bit.Api.IntegrationTest.Helpers; using Bit.Api.IntegrationTest.Helpers;
using Bit.Api.Models.Public.Response; using Bit.Api.Models.Public.Response;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Data; using Bit.Core.Models.Data;
using Bit.Core.Repositories; using Bit.Core.Repositories;

View File

@ -3,6 +3,7 @@ using Bit.Api.IntegrationTest.Factories;
using Bit.Api.IntegrationTest.Helpers; using Bit.Api.IntegrationTest.Helpers;
using Bit.Api.Models.Response; using Bit.Api.Models.Response;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Xunit; using Xunit;
namespace Bit.Api.IntegrationTest.Controllers; namespace Bit.Api.IntegrationTest.Controllers;
@ -77,7 +78,7 @@ public class ConfigControllerTests : IClassFixture<ApiApplicationFactory>, IAsyn
await _factory.LoginWithNewAccount(ownerEmail); await _factory.LoginWithNewAccount(ownerEmail);
Organization org; Organization org;
(org, _) = await OrganizationTestHelpers.SignUpAsync(_factory, plan: Core.Enums.PlanType.Free, ownerEmail: ownerEmail, (org, _) = await OrganizationTestHelpers.SignUpAsync(_factory, plan: PlanType.Free, ownerEmail: ownerEmail,
name: i.ToString(), billingEmail: ownerEmail, ownerKey: i.ToString()); name: i.ToString(), billingEmail: ownerEmail, ownerKey: i.ToString());
await OrganizationTestHelpers.CreateUserAsync(_factory, org.Id, _email, Core.Enums.OrganizationUserType.User); await OrganizationTestHelpers.CreateUserAsync(_factory, org.Id, _email, Core.Enums.OrganizationUserType.User);
} }

View File

@ -1,5 +1,6 @@
using Bit.Api.IntegrationTest.Factories; using Bit.Api.IntegrationTest.Factories;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;

View File

@ -13,6 +13,7 @@ using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models.Data; using Bit.Core.Auth.Models.Data;
using Bit.Core.Auth.Repositories; using Bit.Core.Auth.Repositories;
using Bit.Core.Auth.Services; using Bit.Core.Auth.Services;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Services; using Bit.Core.Billing.Services;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;

View File

@ -1,6 +1,7 @@
using Bit.Api.Billing.Controllers; using Bit.Api.Billing.Controllers;
using Bit.Api.Models.Request.Organizations; using Bit.Api.Models.Request.Organizations;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
@ -21,11 +22,11 @@ namespace Bit.Api.Test.Billing.Controllers;
public class OrganizationSponsorshipsControllerTests public class OrganizationSponsorshipsControllerTests
{ {
public static IEnumerable<object[]> EnterprisePlanTypes => public static IEnumerable<object[]> EnterprisePlanTypes =>
Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).Product == ProductType.Enterprise).Select(p => new object[] { p }); Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).ProductTier == ProductTierType.Enterprise).Select(p => new object[] { p });
public static IEnumerable<object[]> NonEnterprisePlanTypes => public static IEnumerable<object[]> NonEnterprisePlanTypes =>
Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).Product != ProductType.Enterprise).Select(p => new object[] { p }); Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).ProductTier != ProductTierType.Enterprise).Select(p => new object[] { p });
public static IEnumerable<object[]> NonFamiliesPlanTypes => public static IEnumerable<object[]> NonFamiliesPlanTypes =>
Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).Product != ProductType.Families).Select(p => new object[] { p }); Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).ProductTier != ProductTierType.Families).Select(p => new object[] { p });
public static IEnumerable<object[]> NonConfirmedOrganizationUsersStatuses => public static IEnumerable<object[]> NonConfirmedOrganizationUsersStatuses =>
Enum.GetValues<OrganizationUserStatusType>() Enum.GetValues<OrganizationUserStatusType>()

View File

@ -6,6 +6,7 @@ using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Billing.Constants; using Bit.Core.Billing.Constants;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Models; using Bit.Core.Billing.Models;
using Bit.Core.Billing.Services; using Bit.Core.Billing.Services;
using Bit.Core.Context; using Bit.Core.Context;

View File

@ -1,4 +1,5 @@
using Bit.Api.Utilities; using Bit.Api.Utilities;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
using Xunit; using Xunit;

View File

@ -306,8 +306,8 @@ public class SyncControllerTests
if (matchedProviderUserOrgDetails != null) if (matchedProviderUserOrgDetails != null)
{ {
var providerOrgProductType = StaticStore.GetPlan(matchedProviderUserOrgDetails.PlanType).Product; var providerOrgProductType = StaticStore.GetPlan(matchedProviderUserOrgDetails.PlanType).ProductTier;
Assert.Equal(providerOrgProductType, profProviderOrg.PlanProductType); Assert.Equal(providerOrgProductType, profProviderOrg.ProductTierType);
} }
} }
} }

View File

@ -4,6 +4,7 @@ using AutoFixture.Kernel;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models; using Bit.Core.Auth.Models;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;

View File

@ -4,6 +4,7 @@ using Bit.Core.AdminConsole.Models.OrganizationConnectionConfigs;
using Bit.Core.Auth.Entities; using Bit.Core.Auth.Entities;
using Bit.Core.Auth.Enums; using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models.Data; using Bit.Core.Auth.Models.Data;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;

View File

@ -10,6 +10,7 @@ using Bit.Core.Auth.Enums;
using Bit.Core.Auth.Models.Business.Tokenables; using Bit.Core.Auth.Models.Business.Tokenables;
using Bit.Core.Auth.Models.Data; using Bit.Core.Auth.Models.Data;
using Bit.Core.Auth.Repositories; using Bit.Core.Auth.Repositories;
using Bit.Core.Billing.Enums;
using Bit.Core.Context; using Bit.Core.Context;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;

View File

@ -1,5 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Test.AutoFixture.OrganizationFixtures; using Bit.Core.Test.AutoFixture.OrganizationFixtures;
using Bit.Core.Utilities; using Bit.Core.Utilities;

View File

@ -1,5 +1,6 @@
using System.Text.Json; using System.Text.Json;
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;

View File

@ -1,5 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Bit.Test.Common.AutoFixture.Attributes; using Bit.Test.Common.AutoFixture.Attributes;

View File

@ -1,5 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Test.AutoFixture.OrganizationFixtures; using Bit.Core.Test.AutoFixture.OrganizationFixtures;

View File

@ -1,5 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Bit.Test.Common.AutoFixture.Attributes; using Bit.Test.Common.AutoFixture.Attributes;

View File

@ -1,5 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Bit.Test.Common.AutoFixture.Attributes; using Bit.Test.Common.AutoFixture.Attributes;

View File

@ -1,4 +1,4 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Bit.Test.Common.AutoFixture.Attributes; using Bit.Test.Common.AutoFixture.Attributes;

View File

@ -1,4 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;

View File

@ -1,6 +1,6 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Cloud; using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Cloud;
using Bit.Core.Repositories; using Bit.Core.Repositories;

View File

@ -1,6 +1,6 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums;
using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Cloud; using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Cloud;
using Bit.Core.Repositories; using Bit.Core.Repositories;
using Bit.Core.Test.AutoFixture.OrganizationSponsorshipFixtures; using Bit.Core.Test.AutoFixture.OrganizationSponsorshipFixtures;

View File

@ -1,4 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;

View File

@ -1,4 +1,5 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Enums;
using Bit.Core.Utilities; using Bit.Core.Utilities;
namespace Bit.Core.Test.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise; namespace Bit.Core.Test.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise;
@ -6,16 +7,16 @@ namespace Bit.Core.Test.OrganizationFeatures.OrganizationSponsorships.FamiliesFo
public abstract class FamiliesForEnterpriseTestsBase public abstract class FamiliesForEnterpriseTestsBase
{ {
public static IEnumerable<object[]> EnterprisePlanTypes => public static IEnumerable<object[]> EnterprisePlanTypes =>
Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).Product == ProductType.Enterprise).Select(p => new object[] { p }); Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).ProductTier == ProductTierType.Enterprise).Select(p => new object[] { p });
public static IEnumerable<object[]> NonEnterprisePlanTypes => public static IEnumerable<object[]> NonEnterprisePlanTypes =>
Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).Product != ProductType.Enterprise).Select(p => new object[] { p }); Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).ProductTier != ProductTierType.Enterprise).Select(p => new object[] { p });
public static IEnumerable<object[]> FamiliesPlanTypes => public static IEnumerable<object[]> FamiliesPlanTypes =>
Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).Product == ProductType.Families).Select(p => new object[] { p }); Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).ProductTier == ProductTierType.Families).Select(p => new object[] { p });
public static IEnumerable<object[]> NonFamiliesPlanTypes => public static IEnumerable<object[]> NonFamiliesPlanTypes =>
Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).Product != ProductType.Families).Select(p => new object[] { p }); Enum.GetValues<PlanType>().Where(p => StaticStore.GetPlan(p).ProductTier != ProductTierType.Families).Select(p => new object[] { p });
public static IEnumerable<object[]> NonConfirmedOrganizationUsersStatuses => public static IEnumerable<object[]> NonConfirmedOrganizationUsersStatuses =>
Enum.GetValues<OrganizationUserStatusType>() Enum.GetValues<OrganizationUserStatusType>()

View File

@ -2,7 +2,7 @@
using Bit.Core.AdminConsole.Entities.Provider; using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Enums.Provider; using Bit.Core.AdminConsole.Enums.Provider;
using Bit.Core.AdminConsole.Repositories; using Bit.Core.AdminConsole.Repositories;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Models.StaticStore; using Bit.Core.Models.StaticStore;

View File

@ -1,5 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.Models.StaticStore; using Bit.Core.Models.StaticStore;

View File

@ -1,4 +1,4 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;
using Bit.Core.OrganizationFeatures.OrganizationSubscriptions; using Bit.Core.OrganizationFeatures.OrganizationSubscriptions;

View File

@ -1,4 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
using Bit.Core.Models.Business; using Bit.Core.Models.Business;

View File

@ -1,4 +1,4 @@
using Bit.Core.Enums; using Bit.Core.Billing.Enums;
using Bit.Core.Utilities; using Bit.Core.Utilities;
using Xunit; using Xunit;

View File

@ -1,4 +1,5 @@
using Bit.Core.AdminConsole.Entities; using Bit.Core.AdminConsole.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Exceptions; using Bit.Core.Exceptions;
@ -185,7 +186,7 @@ public class CipherServiceTests
sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organizationId) sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organizationId)
.Returns(new Organization .Returns(new Organization
{ {
PlanType = Enums.PlanType.EnterpriseAnnually, PlanType = PlanType.EnterpriseAnnually,
MaxStorageGb = 100 MaxStorageGb = 100
}); });
@ -672,7 +673,7 @@ public class CipherServiceTests
sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organization.Id) sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organization.Id)
.Returns(new Organization .Returns(new Organization
{ {
PlanType = Enums.PlanType.EnterpriseAnnually, PlanType = PlanType.EnterpriseAnnually,
MaxStorageGb = 100 MaxStorageGb = 100
}); });
@ -803,7 +804,7 @@ public class CipherServiceTests
{ {
sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organizationId).Returns(new Organization sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organizationId).Returns(new Organization
{ {
PlanType = Enums.PlanType.Free PlanType = PlanType.Free
}); });
ciphers.FirstOrDefault().Attachments = ciphers.FirstOrDefault().Attachments =
"{\"attachment1\":{\"Size\":\"250\",\"FileName\":\"superCoolFile\"," "{\"attachment1\":{\"Size\":\"250\",\"FileName\":\"superCoolFile\","
@ -825,7 +826,7 @@ public class CipherServiceTests
sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organizationId) sutProvider.GetDependency<IOrganizationRepository>().GetByIdAsync(organizationId)
.Returns(new Organization .Returns(new Organization
{ {
PlanType = Enums.PlanType.EnterpriseAnnually, PlanType = PlanType.EnterpriseAnnually,
MaxStorageGb = 100 MaxStorageGb = 100
}); });
ciphers.FirstOrDefault().Attachments = ciphers.FirstOrDefault().Attachments =

View File

@ -1,4 +1,5 @@
using AutoMapper; using AutoMapper;
using Bit.Core.Billing.Enums;
using Bit.Core.Entities; using Bit.Core.Entities;
using Bit.Core.Enums; using Bit.Core.Enums;
using Bit.Core.Models.Data.Organizations; using Bit.Core.Models.Data.Organizations;

Some files were not shown because too many files have changed in this diff Show More