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:
parent
41ed38080f
commit
721d2969d4
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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; }
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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; }
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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; }
|
||||||
|
@ -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; }
|
||||||
|
@ -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;
|
||||||
|
@ -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.");
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
{
|
{
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
11
src/Core/Billing/Enums/ProductType.cs
Normal file
11
src/Core/Billing/Enums/ProductType.cs
Normal 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,
|
||||||
|
}
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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; }
|
@ -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()
|
||||||
{
|
{
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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";
|
@ -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; }
|
||||||
}
|
}
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using Bit.Core.Enums;
|
using Bit.Core.Billing.Enums;
|
||||||
|
|
||||||
namespace Bit.Core.Models.Business;
|
namespace Bit.Core.Models.Business;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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.");
|
||||||
}
|
}
|
||||||
|
@ -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))
|
||||||
{
|
{
|
||||||
|
@ -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.");
|
||||||
}
|
}
|
||||||
|
@ -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.");
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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>()
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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>()
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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 =
|
||||||
|
@ -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
Loading…
Reference in New Issue
Block a user