diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 1932243700..937074a2c5 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -61,7 +61,7 @@ - + diff --git a/src/ServiceControl.LicenseManagement/LicenseDetails.cs b/src/ServiceControl.LicenseManagement/LicenseDetails.cs index 64c68832ed..eab2cf5015 100644 --- a/src/ServiceControl.LicenseManagement/LicenseDetails.cs +++ b/src/ServiceControl.LicenseManagement/LicenseDetails.cs @@ -1,6 +1,8 @@ namespace ServiceControl.LicenseManagement { using System; + using System.Linq; + using System.Text.RegularExpressions; using Particular.Licensing; public class LicenseDetails @@ -24,6 +26,7 @@ public class LicenseDetails 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) { @@ -64,6 +67,8 @@ internal static LicenseDetails FromLicense(License license) 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(), ValidForServiceControl = license.ValidForApplication("ServiceControl"), DaysUntilSubscriptionExpires = license.GetDaysUntilLicenseExpires(), DaysUntilUpgradeProtectionExpires = license.GetDaysUntilUpgradeProtectionExpires(), @@ -95,4 +100,6 @@ static bool HasLicenseDateExpired(DateTime licenseDate) return oneDayGrace < DateTime.UtcNow.Date; } } + + public record LicensedProduct(string Name, int Quantity); } \ No newline at end of file diff --git a/src/ServiceControl/Licensing/LicenseController.cs b/src/ServiceControl/Licensing/LicenseController.cs index 15539d9db0..05029db055 100644 --- a/src/ServiceControl/Licensing/LicenseController.cs +++ b/src/ServiceControl/Licensing/LicenseController.cs @@ -6,6 +6,7 @@ using Monitoring.HeartbeatMonitoring; using Particular.ServiceControl.Licensing; using ServiceBus.Management.Infrastructure.Settings; + using ServiceControl.LicenseManagement; [ApiController] [Route("api")] @@ -31,6 +32,7 @@ public async Task> License(bool refresh, string client LicenseType = activeLicense.Details.LicenseType ?? string.Empty, InstanceName = settings.InstanceName ?? string.Empty, LicenseStatus = activeLicense.Details.Status, + Products = activeLicense.Details.Products, LicenseExtensionUrl = connectorHeartbeatStatus.LastHeartbeat == null ? $"https://particular.net/extend-your-trial?p={clientName}" : $"https://particular.net/license/mt?p={clientName}&t={(activeLicense.IsEvaluation ? 0 : 1)}" @@ -53,6 +55,8 @@ public class LicenseInfo public string Status { get; set; } + public LicensedProduct[] Products { get; set; } + public string LicenseType { get; set; } public string InstanceName { get; set; }