-
Notifications
You must be signed in to change notification settings - Fork 51
Expand file tree
/
Copy pathLicenseDetails.cs
More file actions
115 lines (89 loc) · 4.55 KB
/
Copy pathLicenseDetails.cs
File metadata and controls
115 lines (89 loc) · 4.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
namespace ServiceControl.LicenseManagement
{
using System;
using System.Linq;
using System.Text.RegularExpressions;
using Particular.Licensing;
public class LicenseDetails
{
public string Id { get; private init; }
public DateTime? ExpirationDate { get; private init; }
public DateTime? UpgradeProtectionExpiration { get; private init; }
public bool IsTrialLicense { get; private init; }
public bool IsCommercialLicense { get; private init; }
public bool IsExtendedTrial { get; private init; }
public string LicenseType { get; private init; }
public string Edition { get; private init; }
public string RegisteredTo { get; private init; }
public bool ValidForServiceControl { get; private init; }
public int? DaysUntilSubscriptionExpires { get; private init; }
public bool WarnUserTrialIsExpiring { get; private init; }
public bool WarnUserTrialHasExpired { get; private init; }
public bool WarnUserSubscriptionIsExpiring { get; private init; }
public bool WarnUserSubscriptionHasExpired { get; private init; }
public string Status { get; private init; }
public LicensedProduct[] Products { get; private init; }
public bool HasEndpointMetadata { get; private init; }
public static LicenseDetails TrialFromEndDate(DateOnly endDate)
{
return FromLicense(new License
{
LicenseType = "Trial",
ExpirationDate = endDate.ToDateTime(TimeOnly.MinValue),
IsExtendedTrial = false,
ValidApplications = ["All"]
});
}
public static LicenseDetails TrialExpired()
{
return FromLicense(new License
{
LicenseType = "Trial",
ExpirationDate = DateTime.UtcNow.Date.AddDays(-2), //HasLicenseDateExpired uses a grace period of 1 day
IsExtendedTrial = false,
ValidApplications = ["All"]
});
}
internal static LicenseDetails FromLicense(License license)
{
LicenseStatus licenseStatus = license.GetLicenseStatus();
var details = new LicenseDetails
{
Id = license.LicenseId,
UpgradeProtectionExpiration = license.UpgradeProtectionExpiration,
//If expiration date is greater that 50 years treat is as no expiration date
ExpirationDate = license.ExpirationDate.HasValue
? license.ExpirationDate.Value > DateTime.UtcNow.AddYears(50) ? null : license.ExpirationDate
: license.ExpirationDate,
RegisteredTo = license.RegisteredTo,
IsCommercialLicense = license.IsCommercialLicense,
IsExtendedTrial = license.IsExtendedTrial,
IsTrialLicense = license.IsTrialLicense,
LicenseType = license.LicenseType,
Edition = license.Edition,
//strip any internal prefix from what gets displayed to the customer
Products = license.LicensedEndpoints?.Select(le => new LicensedProduct(le.Size.EndsWith("U") ? "Unlimited" : Regex.Replace(le.Size, @"^\D*", ""), le.Quantity)).ToArray(),
HasEndpointMetadata = license.Capabilities.Contains("EndpointMetadataFile"),
ValidForServiceControl = license.ValidForApplication("ServiceControl"),
DaysUntilSubscriptionExpires = license.GetDaysUntilLicenseExpires(),
WarnUserTrialIsExpiring = licenseStatus == LicenseStatus.ValidWithExpiringTrial,
WarnUserSubscriptionIsExpiring = licenseStatus == LicenseStatus.ValidWithExpiringSubscription,
WarnUserTrialHasExpired = licenseStatus == LicenseStatus.InvalidDueToExpiredTrial,
WarnUserSubscriptionHasExpired = licenseStatus == LicenseStatus.InvalidDueToExpiredSubscription,
Status = licenseStatus.ToString()
};
return details;
}
public bool HasLicenseExpired() => ExpirationDate.HasValue && HasLicenseDateExpired(ExpirationDate.Value);
static bool HasLicenseDateExpired(DateTime licenseDate)
{
var oneDayGrace = licenseDate;
if (licenseDate < DateTime.MaxValue.AddDays(-1))
{
oneDayGrace = licenseDate.AddDays(1);
}
return oneDayGrace < DateTime.UtcNow.Date;
}
}
public record LicensedProduct(string Name, int Quantity);
}