mirror of
https://github.com/bitwarden/server.git
synced 2025-06-10 21:20:35 -05:00
Moved expires/refresh/trial methods to extension methods to be reused later
This commit is contained in:
parent
ede86fea1f
commit
598259a785
@ -4,6 +4,7 @@ using System.Text;
|
|||||||
using Bit.Core.AdminConsole.Entities;
|
using Bit.Core.AdminConsole.Entities;
|
||||||
using Bit.Core.Billing.Enums;
|
using Bit.Core.Billing.Enums;
|
||||||
using Bit.Core.Billing.Licenses.Attributes;
|
using Bit.Core.Billing.Licenses.Attributes;
|
||||||
|
using Bit.Core.Entities;
|
||||||
using Bit.Core.Models.Business;
|
using Bit.Core.Models.Business;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
|
|
||||||
@ -11,75 +12,6 @@ namespace Bit.Core.Billing.Licenses.Extensions;
|
|||||||
|
|
||||||
public static class LicenseExtensions
|
public static class LicenseExtensions
|
||||||
{
|
{
|
||||||
public static DateTime CalculateFreshExpirationDate(this Organization org, SubscriptionInfo subscriptionInfo)
|
|
||||||
{
|
|
||||||
if (subscriptionInfo?.Subscription == null)
|
|
||||||
{
|
|
||||||
if (org.PlanType == PlanType.Custom && org.ExpirationDate.HasValue)
|
|
||||||
{
|
|
||||||
return org.ExpirationDate.Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return DateTime.UtcNow.AddDays(7);
|
|
||||||
}
|
|
||||||
|
|
||||||
var subscription = subscriptionInfo.Subscription;
|
|
||||||
|
|
||||||
if (subscription.TrialEndDate > DateTime.UtcNow)
|
|
||||||
{
|
|
||||||
return subscription.TrialEndDate.Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (org.ExpirationDate.HasValue && org.ExpirationDate.Value < DateTime.UtcNow)
|
|
||||||
{
|
|
||||||
return org.ExpirationDate.Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (subscription.PeriodEndDate.HasValue && subscription.PeriodDuration > TimeSpan.FromDays(180))
|
|
||||||
{
|
|
||||||
return subscription.PeriodEndDate
|
|
||||||
.Value
|
|
||||||
.AddDays(Bit.Core.Constants.OrganizationSelfHostSubscriptionGracePeriodDays);
|
|
||||||
}
|
|
||||||
|
|
||||||
return org.ExpirationDate?.AddMonths(11) ?? DateTime.UtcNow.AddYears(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DateTime CalculateFreshRefreshDate(this Organization org, SubscriptionInfo subscriptionInfo, DateTime expirationDate)
|
|
||||||
{
|
|
||||||
if (subscriptionInfo?.Subscription == null ||
|
|
||||||
subscriptionInfo.Subscription.TrialEndDate > DateTime.UtcNow ||
|
|
||||||
org.ExpirationDate < DateTime.UtcNow)
|
|
||||||
{
|
|
||||||
return expirationDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
return subscriptionInfo.Subscription.PeriodDuration > TimeSpan.FromDays(180) ||
|
|
||||||
DateTime.UtcNow - expirationDate > TimeSpan.FromDays(30)
|
|
||||||
? DateTime.UtcNow.AddDays(30)
|
|
||||||
: expirationDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DateTime CalculateFreshExpirationDateWithoutGracePeriod(this Organization org, SubscriptionInfo subscriptionInfo, DateTime expirationDate)
|
|
||||||
{
|
|
||||||
if (subscriptionInfo?.Subscription is null)
|
|
||||||
{
|
|
||||||
return expirationDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
var subscription = subscriptionInfo.Subscription;
|
|
||||||
|
|
||||||
if (subscription.TrialEndDate <= DateTime.UtcNow &&
|
|
||||||
org.ExpirationDate >= DateTime.UtcNow &&
|
|
||||||
subscription.PeriodEndDate.HasValue &&
|
|
||||||
subscription.PeriodDuration > TimeSpan.FromDays(180))
|
|
||||||
{
|
|
||||||
return subscription.PeriodEndDate.Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return expirationDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte[] GetDataBytesWithAttributes(this ILicense license, bool forHash = false)
|
public static byte[] GetDataBytesWithAttributes(this ILicense license, bool forHash = false)
|
||||||
{
|
{
|
||||||
var props = license.GetType()
|
var props = license.GetType()
|
||||||
@ -181,3 +113,93 @@ public static class LicenseExtensions
|
|||||||
return (T)Convert.ChangeType(claim.Value, underlyingType);
|
return (T)Convert.ChangeType(claim.Value, underlyingType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class OrganizationLicenseExtensions
|
||||||
|
{
|
||||||
|
public static DateTime CalculateFreshExpirationDate(this Organization org, SubscriptionInfo subscriptionInfo)
|
||||||
|
{
|
||||||
|
if (subscriptionInfo?.Subscription == null)
|
||||||
|
{
|
||||||
|
if (org.PlanType == PlanType.Custom && org.ExpirationDate.HasValue)
|
||||||
|
{
|
||||||
|
return org.ExpirationDate.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DateTime.UtcNow.AddDays(7);
|
||||||
|
}
|
||||||
|
|
||||||
|
var subscription = subscriptionInfo.Subscription;
|
||||||
|
|
||||||
|
if (subscription.TrialEndDate > DateTime.UtcNow)
|
||||||
|
{
|
||||||
|
return subscription.TrialEndDate.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (org.ExpirationDate.HasValue && org.ExpirationDate.Value < DateTime.UtcNow)
|
||||||
|
{
|
||||||
|
return org.ExpirationDate.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (subscription.PeriodEndDate.HasValue && subscription.PeriodDuration > TimeSpan.FromDays(180))
|
||||||
|
{
|
||||||
|
return subscription.PeriodEndDate
|
||||||
|
.Value
|
||||||
|
.AddDays(Bit.Core.Constants.OrganizationSelfHostSubscriptionGracePeriodDays);
|
||||||
|
}
|
||||||
|
|
||||||
|
return org.ExpirationDate?.AddMonths(11) ?? DateTime.UtcNow.AddYears(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DateTime CalculateFreshRefreshDate(this Organization org, SubscriptionInfo subscriptionInfo, DateTime expirationDate)
|
||||||
|
{
|
||||||
|
if (subscriptionInfo?.Subscription == null ||
|
||||||
|
subscriptionInfo.Subscription.TrialEndDate > DateTime.UtcNow ||
|
||||||
|
org.ExpirationDate < DateTime.UtcNow)
|
||||||
|
{
|
||||||
|
return expirationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
return subscriptionInfo.Subscription.PeriodDuration > TimeSpan.FromDays(180) ||
|
||||||
|
DateTime.UtcNow - expirationDate > TimeSpan.FromDays(30)
|
||||||
|
? DateTime.UtcNow.AddDays(30)
|
||||||
|
: expirationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DateTime CalculateFreshExpirationDateWithoutGracePeriod(this Organization org, SubscriptionInfo subscriptionInfo, DateTime expirationDate)
|
||||||
|
{
|
||||||
|
if (subscriptionInfo?.Subscription is null)
|
||||||
|
{
|
||||||
|
return expirationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
var subscription = subscriptionInfo.Subscription;
|
||||||
|
|
||||||
|
if (subscription.TrialEndDate <= DateTime.UtcNow &&
|
||||||
|
org.ExpirationDate >= DateTime.UtcNow &&
|
||||||
|
subscription.PeriodEndDate.HasValue &&
|
||||||
|
subscription.PeriodDuration > TimeSpan.FromDays(180))
|
||||||
|
{
|
||||||
|
return subscription.PeriodEndDate.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return expirationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsTrialing(this Organization org, SubscriptionInfo subscriptionInfo) =>
|
||||||
|
subscriptionInfo?.Subscription is null
|
||||||
|
? org.PlanType != PlanType.Custom || !org.ExpirationDate.HasValue
|
||||||
|
: subscriptionInfo.Subscription.TrialEndDate > DateTime.UtcNow;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class UserLicenseExtensions
|
||||||
|
{
|
||||||
|
public static DateTime? CalculateFreshExpirationDate(this User user, SubscriptionInfo subscriptionInfo) =>
|
||||||
|
subscriptionInfo?.UpcomingInvoice?.Date?.AddDays(7) ?? user.PremiumExpirationDate?.AddDays(7);
|
||||||
|
|
||||||
|
public static DateTime? CalculateFreshRefreshDate(this User user, SubscriptionInfo subscriptionInfo) =>
|
||||||
|
subscriptionInfo?.UpcomingInvoice?.Date ?? user.PremiumExpirationDate;
|
||||||
|
|
||||||
|
public static bool IsTrialing(this User user, SubscriptionInfo subscriptionInfo) =>
|
||||||
|
(subscriptionInfo?.Subscription?.TrialEndDate.HasValue ?? false) &&
|
||||||
|
subscriptionInfo.Subscription.TrialEndDate.Value > DateTime.UtcNow;
|
||||||
|
}
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using Bit.Core.AdminConsole.Entities;
|
using Bit.Core.AdminConsole.Entities;
|
||||||
using Bit.Core.Billing.Enums;
|
|
||||||
using Bit.Core.Billing.Licenses.Extensions;
|
using Bit.Core.Billing.Licenses.Extensions;
|
||||||
using Bit.Core.Billing.Licenses.Models;
|
using Bit.Core.Billing.Licenses.Models;
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
using Bit.Core.Models.Business;
|
|
||||||
|
|
||||||
namespace Bit.Core.Billing.Licenses.Services.Implementations;
|
namespace Bit.Core.Billing.Licenses.Services.Implementations;
|
||||||
|
|
||||||
@ -17,7 +15,7 @@ public class OrganizationLicenseClaimsFactory : ILicenseClaimsFactory<Organizati
|
|||||||
var expires = entity.CalculateFreshExpirationDate(subscriptionInfo);
|
var expires = entity.CalculateFreshExpirationDate(subscriptionInfo);
|
||||||
var refresh = entity.CalculateFreshRefreshDate(subscriptionInfo, expires);
|
var refresh = entity.CalculateFreshRefreshDate(subscriptionInfo, expires);
|
||||||
var expirationWithoutGracePeriod = entity.CalculateFreshExpirationDateWithoutGracePeriod(subscriptionInfo, expires);
|
var expirationWithoutGracePeriod = entity.CalculateFreshExpirationDateWithoutGracePeriod(subscriptionInfo, expires);
|
||||||
var trial = IsTrialing(entity, subscriptionInfo);
|
var trial = entity.IsTrialing(subscriptionInfo);
|
||||||
|
|
||||||
var claims = new List<Claim>
|
var claims = new List<Claim>
|
||||||
{
|
{
|
||||||
@ -115,9 +113,4 @@ public class OrganizationLicenseClaimsFactory : ILicenseClaimsFactory<Organizati
|
|||||||
|
|
||||||
return Task.FromResult(claims);
|
return Task.FromResult(claims);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool IsTrialing(Organization org, SubscriptionInfo subscriptionInfo) =>
|
|
||||||
subscriptionInfo?.Subscription is null
|
|
||||||
? org.PlanType != PlanType.Custom || !org.ExpirationDate.HasValue
|
|
||||||
: subscriptionInfo.Subscription.TrialEndDate > DateTime.UtcNow;
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
|
using Bit.Core.Billing.Licenses.Extensions;
|
||||||
using Bit.Core.Billing.Licenses.Models;
|
using Bit.Core.Billing.Licenses.Models;
|
||||||
using Bit.Core.Entities;
|
using Bit.Core.Entities;
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
@ -12,10 +13,9 @@ public class UserLicenseClaimsFactory : ILicenseClaimsFactory<User>
|
|||||||
{
|
{
|
||||||
var subscriptionInfo = licenseContext.SubscriptionInfo;
|
var subscriptionInfo = licenseContext.SubscriptionInfo;
|
||||||
|
|
||||||
var expires = subscriptionInfo?.UpcomingInvoice?.Date?.AddDays(7) ?? entity.PremiumExpirationDate?.AddDays(7);
|
var expires = entity.CalculateFreshExpirationDate(subscriptionInfo);
|
||||||
var refresh = subscriptionInfo?.UpcomingInvoice?.Date ?? entity.PremiumExpirationDate;
|
var refresh = entity.CalculateFreshRefreshDate(subscriptionInfo);
|
||||||
var trial = (subscriptionInfo?.Subscription?.TrialEndDate.HasValue ?? false) &&
|
var trial = entity.IsTrialing(subscriptionInfo);
|
||||||
subscriptionInfo.Subscription.TrialEndDate.Value > DateTime.UtcNow;
|
|
||||||
|
|
||||||
var claims = new List<Claim>
|
var claims = new List<Claim>
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user