From 4bd9cd400fa046af17e8468d576ff6c094ea4d8f Mon Sep 17 00:00:00 2001 From: "dependencyupdates[bot]" <218638057+dependencyupdates[bot]@users.noreply.github.com> Date: Tue, 14 Jul 2026 17:59:35 +0000 Subject: [PATCH 1/2] Update dependency Particular.Licensing.Sources to v7 --- src/Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 65989624cd..c353458ebe 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -61,7 +61,7 @@ - + From 5a2b52fa9a3f412a853a545ae1035d0b33f22f34 Mon Sep 17 00:00:00 2001 From: Brandon Ording Date: Tue, 14 Jul 2026 17:27:51 -0400 Subject: [PATCH 2/2] Adjust code for upgrade protection changes --- .../UI/License/LicenseComponentFactory.cs | 26 ------------------- .../DetectedLicense.cs | 2 ++ .../LicenseDetails.cs | 23 +++++++++------- .../LicenseManager.cs | 4 +-- .../Validation/AbstractCommandChecks.cs | 7 +++-- 5 files changed, 20 insertions(+), 42 deletions(-) diff --git a/src/ServiceControl.Config/UI/License/LicenseComponentFactory.cs b/src/ServiceControl.Config/UI/License/LicenseComponentFactory.cs index 345a524e7e..75d18b5272 100644 --- a/src/ServiceControl.Config/UI/License/LicenseComponentFactory.cs +++ b/src/ServiceControl.Config/UI/License/LicenseComponentFactory.cs @@ -6,7 +6,6 @@ static class LicenseComponentFactory { - const string UpgradeProtectionLicenseText = "Please extend your upgrade protection so that we can continue to provide you with support and new versions of the Particular Service Platform."; const string SubscriptionLicenseText = "Please extend your license to continue using the Particular Service Platform."; static readonly CountInflector DaysInflector = new() @@ -74,31 +73,6 @@ static LicenseComponent SubscriptionExpiryComponent(LicenseDetails details) static LicenseComponent UpgradeProtectionExpiryComponent(LicenseDetails details) { - if (details.WarnUserUpgradeProtectionHasExpired) - { - return new LicenseComponent - { - Label = "Upgrade protection expiry date:", - Value = $"{details.UpgradeProtectionExpiration:d} - expired", - Importance = Importance.Warning, - ShortText = "Platform license expired", - WarningText = UpgradeProtectionLicenseText - }; - } - - if (details.WarnUserUpgradeProtectionIsExpiring) - { - var daysRemain = DaysInflector.Inflect(details.DaysUntilUpgradeProtectionExpires ?? 0); - return new LicenseComponent - { - Label = "Upgrade protection expiry date:", - Value = $"{details.UpgradeProtectionExpiration:d} - {daysRemain} left", - Importance = Importance.Warning, - ShortText = $"Warning: Upgrade protection expiring in {daysRemain}", - WarningText = UpgradeProtectionLicenseText - }; - } - return new LicenseComponent { Label = "Upgrade protection expiry date:", diff --git a/src/ServiceControl.LicenseManagement/DetectedLicense.cs b/src/ServiceControl.LicenseManagement/DetectedLicense.cs index 27567994a3..507df8fd30 100644 --- a/src/ServiceControl.LicenseManagement/DetectedLicense.cs +++ b/src/ServiceControl.LicenseManagement/DetectedLicense.cs @@ -9,7 +9,9 @@ public DetectedLicense(string licensePath, LicenseDetails details) } public string Location { get; } + public LicenseDetails Details { get; } + public bool IsEvaluationLicense { get; init; } } } \ No newline at end of file diff --git a/src/ServiceControl.LicenseManagement/LicenseDetails.cs b/src/ServiceControl.LicenseManagement/LicenseDetails.cs index eab2cf5015..970b65e1cb 100644 --- a/src/ServiceControl.LicenseManagement/LicenseDetails.cs +++ b/src/ServiceControl.LicenseManagement/LicenseDetails.cs @@ -8,24 +8,35 @@ public class LicenseDetails { 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 int? DaysUntilUpgradeProtectionExpires { 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 bool WarnUserUpgradeProtectionIsExpiring { get; private init; } - public bool WarnUserUpgradeProtectionHasExpired { get; private init; } + public string Status { get; private init; } + public LicensedProduct[] Products { get; private init; } public static LicenseDetails TrialFromEndDate(DateOnly endDate) @@ -71,11 +82,8 @@ internal static LicenseDetails FromLicense(License license) Products = license.LicensedEndpoints?.Select(le => new LicensedProduct(le.Size.EndsWith("U") ? "Unlimited" : Regex.Replace(le.Size, @"^\D*", ""), le.Quantity)).ToArray(), ValidForServiceControl = license.ValidForApplication("ServiceControl"), DaysUntilSubscriptionExpires = license.GetDaysUntilLicenseExpires(), - DaysUntilUpgradeProtectionExpires = license.GetDaysUntilUpgradeProtectionExpires(), - WarnUserUpgradeProtectionHasExpired = licenseStatus is LicenseStatus.ValidWithExpiredUpgradeProtection or LicenseStatus.InvalidDueToExpiredUpgradeProtection, WarnUserTrialIsExpiring = licenseStatus == LicenseStatus.ValidWithExpiringTrial, WarnUserSubscriptionIsExpiring = licenseStatus == LicenseStatus.ValidWithExpiringSubscription, - WarnUserUpgradeProtectionIsExpiring = licenseStatus == LicenseStatus.ValidWithExpiringUpgradeProtection, WarnUserTrialHasExpired = licenseStatus == LicenseStatus.InvalidDueToExpiredTrial, WarnUserSubscriptionHasExpired = licenseStatus == LicenseStatus.InvalidDueToExpiredSubscription, Status = licenseStatus.ToString() @@ -85,9 +93,6 @@ internal static LicenseDetails FromLicense(License license) public bool HasLicenseExpired() => ExpirationDate.HasValue && HasLicenseDateExpired(ExpirationDate.Value); - public bool ReleaseNotCoveredByMaintenance(DateTime buildTimeStamp) => - buildTimeStamp > UpgradeProtectionExpiration; - static bool HasLicenseDateExpired(DateTime licenseDate) { var oneDayGrace = licenseDate; diff --git a/src/ServiceControl.LicenseManagement/LicenseManager.cs b/src/ServiceControl.LicenseManagement/LicenseManager.cs index 4b00afded9..558ae70e16 100644 --- a/src/ServiceControl.LicenseManagement/LicenseManager.cs +++ b/src/ServiceControl.LicenseManagement/LicenseManager.cs @@ -8,7 +8,7 @@ public class LicenseManager public static DetectedLicense FindLicense() { var sources = LicenseSource.GetStandardLicenseSources(); - var result = ActiveLicense.Find("ServiceControl", sources.ToArray()); + var result = ActiveLicense.Find("ServiceControl", [.. sources]); var detectedLicense = new DetectedLicense(result.Location, LicenseDetails.FromLicense(result.License)) { @@ -50,7 +50,5 @@ public static bool TryImportLicense(string licenseFile, out string errorMessage) errorMessage = null; return true; } - - public static DateTime GetReleaseDate() => ReleaseDateReader.GetReleaseDate(); } } diff --git a/src/ServiceControlInstaller.Engine/Validation/AbstractCommandChecks.cs b/src/ServiceControlInstaller.Engine/Validation/AbstractCommandChecks.cs index 2c4804b62c..9f4e2771b4 100644 --- a/src/ServiceControlInstaller.Engine/Validation/AbstractCommandChecks.cs +++ b/src/ServiceControlInstaller.Engine/Validation/AbstractCommandChecks.cs @@ -222,11 +222,9 @@ CheckLicenseResult CheckLicenseIsValid() return new CheckLicenseResult(false, "This license edition does not include ServiceControl"); } - var releaseDate = LicenseManager.GetReleaseDate(); - - if (license.Details.ReleaseNotCoveredByMaintenance(releaseDate)) + if (license.Details.Status.Contains("InvalidDueToUpgradeProtectionNoLongerBeingSupported", StringComparison.OrdinalIgnoreCase)) { - return new CheckLicenseResult(false, "License does not cover this release of ServiceControl Monitoring. Upgrade protection expired."); + return new CheckLicenseResult(false, "Licenses with upgrade protection are no longer supported."); } return new CheckLicenseResult(true); @@ -241,6 +239,7 @@ public CheckLicenseResult(bool valid, string message = null) } public bool Valid { get; private set; } + public string Message { get; private set; } } }