diff --git a/src/Core/Models/Business/BaseLicense.cs b/src/Core/Models/Business/BaseLicense.cs index ef04f2813a..a0b0b27c01 100644 --- a/src/Core/Models/Business/BaseLicense.cs +++ b/src/Core/Models/Business/BaseLicense.cs @@ -1,26 +1,52 @@ using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text.Json.Serialization; +using Bit.Core.Billing.Licenses.Attributes; using Bit.Core.Enums; namespace Bit.Core.Models.Business; public abstract class BaseLicense : ILicense { + [LicenseVersion(1)] public string LicenseKey { get; set; } + + [LicenseVersion(1)] public Guid Id { get; set; } + + [LicenseVersion(1)] public string Name { get; set; } + + [LicenseVersion(1)] public int Version { get; set; } + + [LicenseIgnore(includeInHash: false)] public DateTime Issued { get; set; } + + [LicenseIgnore(includeInHash: false)] public DateTime? Refresh { get; set; } + + [LicenseVersion(1)] public DateTime? Expires { get; set; } + + [LicenseVersion(1)] public bool Trial { get; set; } + + [LicenseIgnore] public LicenseType? LicenseType { get; set; } + + [LicenseIgnore(includeInHash: false)] public string Hash { get; set; } + + [LicenseVersion(1)] + [LicenseIgnore] public string Signature { get; set; } + + [LicenseIgnore] public string Token { get; set; } [JsonIgnore] + [LicenseIgnore] public byte[] SignatureBytes => Convert.FromBase64String(Signature); public abstract byte[] GetDataBytes(bool forHash = false); diff --git a/src/Core/Models/Business/OrganizationLicense.cs b/src/Core/Models/Business/OrganizationLicense.cs index ed0ab67189..9365129192 100644 --- a/src/Core/Models/Business/OrganizationLicense.cs +++ b/src/Core/Models/Business/OrganizationLicense.cs @@ -3,6 +3,7 @@ using System.Security.Claims; using System.Text; using Bit.Core.AdminConsole.Entities; using Bit.Core.Billing.Enums; +using Bit.Core.Billing.Licenses.Attributes; using Bit.Core.Billing.Licenses.Extensions; using Bit.Core.Enums; using Bit.Core.Services; @@ -136,42 +137,105 @@ public class OrganizationLicense : BaseLicense Signature = Convert.ToBase64String(licenseService.SignLicense(this)); } + [LicenseVersion(1)] public Guid InstallationId { get; set; } + + [LicenseVersion(1)] public string BillingEmail { get; set; } + + [LicenseVersion(1)] public string BusinessName { get; set; } + + [LicenseVersion(1)] public bool Enabled { get; set; } + + [LicenseVersion(1)] public string Plan { get; set; } + + [LicenseVersion(1)] public PlanType PlanType { get; set; } + + [LicenseVersion(1)] public int? Seats { get; set; } + + [LicenseVersion(1)] public short? MaxCollections { get; set; } + + [LicenseVersion(6)] public bool UsePolicies { get; set; } + + [LicenseVersion(7)] public bool UseSso { get; set; } + + [LicenseVersion(9)] public bool UseKeyConnector { get; set; } + + [LicenseVersion(10)] public bool UseScim { get; set; } + + [LicenseVersion(1)] public bool UseGroups { get; set; } + + [LicenseVersion(3)] public bool UseEvents { get; set; } + + [LicenseVersion(1)] public bool UseDirectory { get; set; } + + [LicenseVersion(1)] public bool UseTotp { get; set; } + + [LicenseVersion(4)] public bool Use2fa { get; set; } + + [LicenseVersion(5)] public bool UseApi { get; set; } + + [LicenseVersion(8)] public bool UseResetPassword { get; set; } + + [LicenseVersion(1)] public short? MaxStorageGb { get; set; } + + [LicenseVersion(1)] public bool SelfHost { get; set; } + + [LicenseVersion(2)] public bool UsersGetPremium { get; set; } + + [LicenseVersion(11)] public bool UseCustomPermissions { get; set; } + + [LicenseVersion(12)] public DateTime? ExpirationWithoutGracePeriod { get; set; } + + [LicenseVersion(13)] public bool UsePasswordManager { get; set; } + + [LicenseVersion(13)] public bool UseSecretsManager { get; set; } + + [LicenseVersion(13)] public int? SmSeats { get; set; } + + [LicenseVersion(13)] public int? SmServiceAccounts { get; set; } + + [LicenseIgnore] public bool UseRiskInsights { get; set; } // Deprecated. Left for backwards compatibility with old license versions. + [LicenseVersion(14)] public bool LimitCollectionCreationDeletion { get; set; } = true; + + [LicenseVersion(15)] public bool AllowAdminAccessToAllCollectionItems { get; set; } = true; // + [LicenseVersion(16)] public bool UseOrganizationDomains { get; set; } + + [LicenseIgnore] public bool UseAdminSponsoredFamilies { get; set; } /// @@ -181,6 +245,7 @@ public class OrganizationLicense : BaseLicense /// getting out of date license errors /// public const int CurrentLicenseFileVersion = 15; + private bool ValidLicenseVersion { get => Version is >= 1 and <= 16; diff --git a/src/Core/Models/Business/UserLicense.cs b/src/Core/Models/Business/UserLicense.cs index ee6376cfd3..5244f80a1d 100644 --- a/src/Core/Models/Business/UserLicense.cs +++ b/src/Core/Models/Business/UserLicense.cs @@ -1,6 +1,7 @@ using System.Reflection; using System.Security.Claims; using System.Text; +using Bit.Core.Billing.Licenses.Attributes; using Bit.Core.Billing.Licenses.Extensions; using Bit.Core.Entities; using Bit.Core.Services; @@ -54,8 +55,13 @@ public class UserLicense : BaseLicense Signature = Convert.ToBase64String(licenseService.SignLicense(this)); } + [LicenseVersion(1)] public string Email { get; set; } + + [LicenseVersion(1)] public bool Premium { get; set; } + + [LicenseVersion(1)] public short? MaxStorageGb { get; set; } public override byte[] GetDataBytes(bool forHash = false)