1
0
mirror of https://github.com/bitwarden/server.git synced 2025-04-09 07:08:15 -05:00
bitwarden/src/Core/Models/Business/SubscriptionCreateOptions.cs
2025-01-10 16:39:02 +01:00

148 lines
4.4 KiB
C#

using Bit.Core.AdminConsole.Entities;
using Stripe;
using Plan = Bit.Core.Models.StaticStore.Plan;
namespace Bit.Core.Models.Business;
public class OrganizationSubscriptionOptionsBase : SubscriptionCreateOptions
{
public OrganizationSubscriptionOptionsBase(
Organization org,
Plan plan,
TaxInfo taxInfo,
int additionalSeats,
int additionalStorageGb,
bool premiumAccessAddon,
bool useSecretsManager,
int additionalSmSeats,
int additionalServiceAccounts)
{
Items = new List<SubscriptionItemOptions>();
Metadata = new Dictionary<string, string>
{
[org.GatewayIdField()] = org.Id.ToString()
};
AddPlanIdToSubscription(plan);
if (useSecretsManager)
{
AddSecretsManagerSeat(plan, additionalSmSeats);
AddServiceAccount(plan, additionalServiceAccounts);
}
AddPremiumAccessAddon(plan, premiumAccessAddon);
AddPasswordManagerSeat(plan, additionalSeats);
AddAdditionalStorage(plan, additionalStorageGb);
}
private void AddSecretsManagerSeat(Plan plan, int additionalSmSeats)
{
if (additionalSmSeats > 0 && plan.SecretsManager.StripeSeatPlanId != null)
{
Items.Add(new SubscriptionItemOptions
{
Plan = plan.SecretsManager.StripeSeatPlanId,
Quantity = additionalSmSeats
});
}
}
private void AddPasswordManagerSeat(Plan plan, int additionalSeats)
{
if (additionalSeats > 0 && plan.PasswordManager.StripeSeatPlanId != null)
{
Items.Add(new SubscriptionItemOptions
{
Plan = plan.PasswordManager.StripeSeatPlanId,
Quantity = additionalSeats
});
}
}
private void AddServiceAccount(Plan plan, int additionalServiceAccounts)
{
if (additionalServiceAccounts > 0 && plan.SecretsManager.StripeServiceAccountPlanId != null)
{
Items.Add(new SubscriptionItemOptions
{
Plan = plan.SecretsManager.StripeServiceAccountPlanId,
Quantity = additionalServiceAccounts
});
}
}
private void AddAdditionalStorage(Plan plan, int additionalStorageGb)
{
if (additionalStorageGb > 0)
{
Items.Add(new SubscriptionItemOptions
{
Plan = plan.PasswordManager.StripeStoragePlanId,
Quantity = additionalStorageGb
});
}
}
private void AddPremiumAccessAddon(Plan plan, bool premiumAccessAddon)
{
if (premiumAccessAddon && plan.PasswordManager.StripePremiumAccessPlanId != null)
{
Items.Add(new SubscriptionItemOptions
{
Plan = plan.PasswordManager.StripePremiumAccessPlanId,
Quantity = 1
});
}
}
private void AddPlanIdToSubscription(Plan plan)
{
if (plan.PasswordManager.StripePlanId != null)
{
Items.Add(new SubscriptionItemOptions
{
Plan = plan.PasswordManager.StripePlanId,
Quantity = 1
});
}
}
}
public class OrganizationPurchaseSubscriptionOptions : OrganizationSubscriptionOptionsBase
{
public OrganizationPurchaseSubscriptionOptions(
Organization org,
Plan plan,
TaxInfo taxInfo,
int additionalSeats,
int additionalStorageGb,
bool premiumAccessAddon,
int additionalSmSeats,
int additionalServiceAccounts) :
base(org, plan, taxInfo, additionalSeats,
additionalStorageGb, premiumAccessAddon,
org.UseSecretsManager, additionalSmSeats,
additionalServiceAccounts)
{
OffSession = true;
TrialPeriodDays = plan.TrialPeriodDays;
}
}
public class OrganizationUpgradeSubscriptionOptions : OrganizationSubscriptionOptionsBase
{
public OrganizationUpgradeSubscriptionOptions(
string customerId,
Organization org,
Plan plan,
OrganizationUpgrade upgrade) :
base(org, plan, upgrade.TaxInfo, upgrade.AdditionalSeats,
upgrade.AdditionalStorageGb, upgrade.PremiumAccessAddon,
upgrade.UseSecretsManager, upgrade.AdditionalSmSeats.GetValueOrDefault(),
upgrade.AdditionalServiceAccounts.GetValueOrDefault())
{
Customer = customerId;
}
}