From 6d251236da2dbbce3d992e455faa5770ad332699 Mon Sep 17 00:00:00 2001 From: Colton Hurst Date: Mon, 27 Feb 2023 10:14:50 -0500 Subject: [PATCH 1/6] SM-528: Fix SM Import / Export Error Messaging (#2734) * SM-528: Update SM Import & Export errors when non-admin * SM-528: Switch to not found exception --- .../Controllers/SecretsManagerPortingController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Api/SecretsManager/Controllers/SecretsManagerPortingController.cs b/src/Api/SecretsManager/Controllers/SecretsManagerPortingController.cs index d1e75a328b..d54ec3624d 100644 --- a/src/Api/SecretsManager/Controllers/SecretsManagerPortingController.cs +++ b/src/Api/SecretsManager/Controllers/SecretsManagerPortingController.cs @@ -33,7 +33,7 @@ public class SecretsManagerPortingController : Controller { if (!await _currentContext.OrganizationAdmin(organizationId)) { - throw new UnauthorizedAccessException(); + throw new NotFoundException(); } var userId = _userService.GetProperUserId(User).Value; @@ -53,7 +53,7 @@ public class SecretsManagerPortingController : Controller { if (!await _currentContext.OrganizationAdmin(organizationId)) { - throw new UnauthorizedAccessException(); + throw new NotFoundException(); } if (importRequest.Projects?.Count() > 1000 || importRequest.Secrets?.Count() > 6000) From 26c30f8854dea64ca895dbe4d30b48131725ad95 Mon Sep 17 00:00:00 2001 From: Justin Baur <19896123+justindbaur@users.noreply.github.com> Date: Thu, 2 Mar 2023 08:50:27 -0500 Subject: [PATCH 2/6] Add Sqlite Migration (#2760) --- .../20230302121757_DomainClaiming.Designer.cs | 2188 +++++++++++++++++ .../20230302121757_DomainClaiming.cs | 57 + .../DatabaseContextModelSnapshot.cs | 57 +- 3 files changed, 2301 insertions(+), 1 deletion(-) create mode 100644 util/SqliteMigrations/Migrations/20230302121757_DomainClaiming.Designer.cs create mode 100644 util/SqliteMigrations/Migrations/20230302121757_DomainClaiming.cs diff --git a/util/SqliteMigrations/Migrations/20230302121757_DomainClaiming.Designer.cs b/util/SqliteMigrations/Migrations/20230302121757_DomainClaiming.Designer.cs new file mode 100644 index 0000000000..4ab37cbf1f --- /dev/null +++ b/util/SqliteMigrations/Migrations/20230302121757_DomainClaiming.Designer.cs @@ -0,0 +1,2188 @@ +// +using System; +using Bit.Infrastructure.EntityFramework.Repositories; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Bit.SqliteMigrations.Migrations +{ + [DbContext(typeof(DatabaseContext))] + [Migration("20230302121757_DomainClaiming")] + partial class DomainClaiming + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "6.0.12"); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.AuthRequest", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("AccessCode") + .HasMaxLength(25) + .HasColumnType("TEXT"); + + b.Property("Approved") + .HasColumnType("INTEGER"); + + b.Property("AuthenticationDate") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Key") + .HasColumnType("TEXT"); + + b.Property("MasterPasswordHash") + .HasColumnType("TEXT"); + + b.Property("PublicKey") + .HasColumnType("TEXT"); + + b.Property("RequestDeviceIdentifier") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("RequestDeviceType") + .HasColumnType("INTEGER"); + + b.Property("RequestFingerprint") + .HasColumnType("TEXT"); + + b.Property("RequestIpAddress") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("ResponseDate") + .HasColumnType("TEXT"); + + b.Property("ResponseDeviceId") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ResponseDeviceId"); + + b.HasIndex("UserId"); + + b.ToTable("AuthRequest", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Cipher", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Attachments") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DeletedDate") + .HasColumnType("TEXT"); + + b.Property("Favorites") + .HasColumnType("TEXT"); + + b.Property("Folders") + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("Reprompt") + .HasColumnType("INTEGER"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.HasIndex("UserId"); + + b.ToTable("Cipher", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("ExternalId") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.ToTable("Collection", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionCipher", b => + { + b.Property("CollectionId") + .HasColumnType("TEXT"); + + b.Property("CipherId") + .HasColumnType("TEXT"); + + b.HasKey("CollectionId", "CipherId"); + + b.HasIndex("CipherId"); + + b.ToTable("CollectionCipher", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionGroup", b => + { + b.Property("CollectionId") + .HasColumnType("TEXT"); + + b.Property("GroupId") + .HasColumnType("TEXT"); + + b.Property("HidePasswords") + .HasColumnType("INTEGER"); + + b.Property("ReadOnly") + .HasColumnType("INTEGER"); + + b.HasKey("CollectionId", "GroupId"); + + b.HasIndex("GroupId"); + + b.ToTable("CollectionGroups"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionUser", b => + { + b.Property("CollectionId") + .HasColumnType("TEXT"); + + b.Property("OrganizationUserId") + .HasColumnType("TEXT"); + + b.Property("HidePasswords") + .HasColumnType("INTEGER"); + + b.Property("ReadOnly") + .HasColumnType("INTEGER"); + + b.HasKey("CollectionId", "OrganizationUserId"); + + b.HasIndex("OrganizationUserId"); + + b.ToTable("CollectionUsers"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Device", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Identifier") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("PushToken") + .HasMaxLength(255) + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Device", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.EmergencyAccess", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("GranteeId") + .HasColumnType("TEXT"); + + b.Property("GrantorId") + .HasColumnType("TEXT"); + + b.Property("KeyEncrypted") + .HasColumnType("TEXT"); + + b.Property("LastNotificationDate") + .HasColumnType("TEXT"); + + b.Property("RecoveryInitiatedDate") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Status") + .HasColumnType("INTEGER"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("WaitTimeDays") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("GranteeId"); + + b.HasIndex("GrantorId"); + + b.ToTable("EmergencyAccess", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Event", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ActingUserId") + .HasColumnType("TEXT"); + + b.Property("CipherId") + .HasColumnType("TEXT"); + + b.Property("CollectionId") + .HasColumnType("TEXT"); + + b.Property("Date") + .HasColumnType("TEXT"); + + b.Property("DeviceType") + .HasColumnType("INTEGER"); + + b.Property("DomainName") + .HasColumnType("TEXT"); + + b.Property("GroupId") + .HasColumnType("TEXT"); + + b.Property("InstallationId") + .HasColumnType("TEXT"); + + b.Property("IpAddress") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("OrganizationUserId") + .HasColumnType("TEXT"); + + b.Property("PolicyId") + .HasColumnType("TEXT"); + + b.Property("ProviderId") + .HasColumnType("TEXT"); + + b.Property("ProviderOrganizationId") + .HasColumnType("TEXT"); + + b.Property("ProviderUserId") + .HasColumnType("TEXT"); + + b.Property("SecretId") + .HasColumnType("TEXT"); + + b.Property("ServiceAccountId") + .HasColumnType("TEXT"); + + b.Property("SystemUser") + .HasColumnType("INTEGER"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Event", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Folder", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Folder", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Grant", b => + { + b.Property("Key") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("ClientId") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("ConsumedDate") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("ExpirationDate") + .HasColumnType("TEXT"); + + b.Property("SessionId") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("SubjectId") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.HasKey("Key"); + + b.ToTable("Grant", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("AccessAll") + .HasColumnType("INTEGER"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("ExternalId") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("Name") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.ToTable("Group", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.GroupUser", b => + { + b.Property("GroupId") + .HasColumnType("TEXT"); + + b.Property("OrganizationUserId") + .HasColumnType("TEXT"); + + b.HasKey("GroupId", "OrganizationUserId"); + + b.HasIndex("OrganizationUserId"); + + b.ToTable("GroupUser", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Installation", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("Enabled") + .HasColumnType("INTEGER"); + + b.Property("Key") + .HasMaxLength(150) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Installation", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Organization", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("BillingEmail") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("BusinessAddress1") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("BusinessAddress2") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("BusinessAddress3") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("BusinessCountry") + .HasMaxLength(2) + .HasColumnType("TEXT"); + + b.Property("BusinessName") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("BusinessTaxNumber") + .HasMaxLength(30) + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Enabled") + .HasColumnType("INTEGER"); + + b.Property("ExpirationDate") + .HasColumnType("TEXT"); + + b.Property("Gateway") + .HasColumnType("INTEGER"); + + b.Property("GatewayCustomerId") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("GatewaySubscriptionId") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Identifier") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("LicenseKey") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("MaxAutoscaleSeats") + .HasColumnType("INTEGER"); + + b.Property("MaxCollections") + .HasColumnType("INTEGER"); + + b.Property("MaxStorageGb") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("OwnersNotifiedOfAutoscaling") + .HasColumnType("TEXT"); + + b.Property("Plan") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("PlanType") + .HasColumnType("INTEGER"); + + b.Property("PrivateKey") + .HasColumnType("TEXT"); + + b.Property("PublicKey") + .HasColumnType("TEXT"); + + b.Property("ReferenceData") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Seats") + .HasColumnType("INTEGER"); + + b.Property("SelfHost") + .HasColumnType("INTEGER"); + + b.Property("Storage") + .HasColumnType("INTEGER"); + + b.Property("TwoFactorProviders") + .HasColumnType("TEXT"); + + b.Property("Use2fa") + .HasColumnType("INTEGER"); + + b.Property("UseApi") + .HasColumnType("INTEGER"); + + b.Property("UseCustomPermissions") + .HasColumnType("INTEGER"); + + b.Property("UseDirectory") + .HasColumnType("INTEGER"); + + b.Property("UseEvents") + .HasColumnType("INTEGER"); + + b.Property("UseGroups") + .HasColumnType("INTEGER"); + + b.Property("UseKeyConnector") + .HasColumnType("INTEGER"); + + b.Property("UsePolicies") + .HasColumnType("INTEGER"); + + b.Property("UseResetPassword") + .HasColumnType("INTEGER"); + + b.Property("UseScim") + .HasColumnType("INTEGER"); + + b.Property("UseSecretsManager") + .HasColumnType("INTEGER"); + + b.Property("UseSso") + .HasColumnType("INTEGER"); + + b.Property("UseTotp") + .HasColumnType("INTEGER"); + + b.Property("UsersGetPremium") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Organization", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationApiKey", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ApiKey") + .HasMaxLength(30) + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.ToTable("OrganizationApiKey", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationConnection", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Config") + .HasColumnType("TEXT"); + + b.Property("Enabled") + .HasColumnType("INTEGER"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.ToTable("OrganizationConnection", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationDomain", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("DomainName") + .HasMaxLength(255) + .HasColumnType("TEXT"); + + b.Property("JobRunCount") + .HasColumnType("INTEGER"); + + b.Property("LastCheckedDate") + .HasColumnType("TEXT"); + + b.Property("NextRunDate") + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("Txt") + .HasColumnType("TEXT"); + + b.Property("VerifiedDate") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.ToTable("OrganizationDomain", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationSponsorship", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("FriendlyName") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("LastSyncDate") + .HasColumnType("TEXT"); + + b.Property("OfferedToEmail") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("PlanSponsorshipType") + .HasColumnType("INTEGER"); + + b.Property("SponsoredOrganizationId") + .HasColumnType("TEXT"); + + b.Property("SponsoringOrganizationId") + .HasColumnType("TEXT"); + + b.Property("SponsoringOrganizationUserId") + .HasColumnType("TEXT"); + + b.Property("ToDelete") + .HasColumnType("INTEGER"); + + b.Property("ValidUntil") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("SponsoredOrganizationId"); + + b.HasIndex("SponsoringOrganizationId"); + + b.ToTable("OrganizationSponsorship", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("AccessAll") + .HasColumnType("INTEGER"); + + b.Property("AccessSecretsManager") + .HasColumnType("INTEGER"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("ExternalId") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("Key") + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("Permissions") + .HasColumnType("TEXT"); + + b.Property("ResetPasswordKey") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Status") + .HasColumnType("INTEGER"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.HasIndex("UserId"); + + b.ToTable("OrganizationUser", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Policy", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("Enabled") + .HasColumnType("INTEGER"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.ToTable("Policy", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Provider", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("BillingEmail") + .HasColumnType("TEXT"); + + b.Property("BillingPhone") + .HasColumnType("TEXT"); + + b.Property("BusinessAddress1") + .HasColumnType("TEXT"); + + b.Property("BusinessAddress2") + .HasColumnType("TEXT"); + + b.Property("BusinessAddress3") + .HasColumnType("TEXT"); + + b.Property("BusinessCountry") + .HasColumnType("TEXT"); + + b.Property("BusinessName") + .HasColumnType("TEXT"); + + b.Property("BusinessTaxNumber") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Enabled") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Status") + .HasColumnType("INTEGER"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("UseEvents") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("Provider", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.ProviderOrganization", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Key") + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("ProviderId") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Settings") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.HasIndex("ProviderId"); + + b.ToTable("ProviderOrganization", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.ProviderUser", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Email") + .HasColumnType("TEXT"); + + b.Property("Key") + .HasColumnType("TEXT"); + + b.Property("Permissions") + .HasColumnType("TEXT"); + + b.Property("ProviderId") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Status") + .HasColumnType("INTEGER"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProviderId"); + + b.HasIndex("UserId"); + + b.ToTable("ProviderUser", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Send", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("AccessCount") + .HasColumnType("INTEGER"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("DeletionDate") + .HasColumnType("TEXT"); + + b.Property("Disabled") + .HasColumnType("INTEGER"); + + b.Property("ExpirationDate") + .HasColumnType("TEXT"); + + b.Property("HideEmail") + .HasColumnType("INTEGER"); + + b.Property("Key") + .HasColumnType("TEXT"); + + b.Property("MaxAccessCount") + .HasColumnType("INTEGER"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("Password") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.HasIndex("UserId"); + + b.ToTable("Send", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.SsoConfig", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Data") + .HasColumnType("TEXT"); + + b.Property("Enabled") + .HasColumnType("INTEGER"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.ToTable("SsoConfig", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.SsoUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("ExternalId") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.HasIndex("UserId"); + + b.ToTable("SsoUser", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.TaxRate", b => + { + b.Property("Id") + .HasMaxLength(40) + .HasColumnType("TEXT"); + + b.Property("Active") + .HasColumnType("INTEGER"); + + b.Property("Country") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("PostalCode") + .HasMaxLength(10) + .HasColumnType("TEXT"); + + b.Property("Rate") + .HasColumnType("TEXT"); + + b.Property("State") + .HasMaxLength(2) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("TaxRate", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Transaction", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("Amount") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Details") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("Gateway") + .HasColumnType("INTEGER"); + + b.Property("GatewayId") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("PaymentMethodType") + .HasColumnType("INTEGER"); + + b.Property("Refunded") + .HasColumnType("INTEGER"); + + b.Property("RefundedAmount") + .HasColumnType("TEXT"); + + b.Property("Type") + .HasColumnType("INTEGER"); + + b.Property("UserId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.HasIndex("UserId"); + + b.ToTable("Transaction", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("AccountRevisionDate") + .HasColumnType("TEXT"); + + b.Property("ApiKey") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("TEXT"); + + b.Property("AvatarColor") + .HasMaxLength(7) + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Culture") + .HasMaxLength(10) + .HasColumnType("TEXT"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property("EmailVerified") + .HasColumnType("INTEGER"); + + b.Property("EquivalentDomains") + .HasColumnType("TEXT"); + + b.Property("ExcludedGlobalEquivalentDomains") + .HasColumnType("TEXT"); + + b.Property("FailedLoginCount") + .HasColumnType("INTEGER"); + + b.Property("ForcePasswordReset") + .HasColumnType("INTEGER"); + + b.Property("Gateway") + .HasColumnType("INTEGER"); + + b.Property("GatewayCustomerId") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("GatewaySubscriptionId") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Kdf") + .HasColumnType("INTEGER"); + + b.Property("KdfIterations") + .HasColumnType("INTEGER"); + + b.Property("KdfMemory") + .HasColumnType("INTEGER"); + + b.Property("KdfParallelism") + .HasColumnType("INTEGER"); + + b.Property("Key") + .HasColumnType("TEXT"); + + b.Property("LastEmailChangeDate") + .HasColumnType("TEXT"); + + b.Property("LastFailedLoginDate") + .HasColumnType("TEXT"); + + b.Property("LastKdfChangeDate") + .HasColumnType("TEXT"); + + b.Property("LastKeyRotationDate") + .HasColumnType("TEXT"); + + b.Property("LastPasswordChangeDate") + .HasColumnType("TEXT"); + + b.Property("LicenseKey") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("MasterPassword") + .HasMaxLength(300) + .HasColumnType("TEXT"); + + b.Property("MasterPasswordHint") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("MaxStorageGb") + .HasColumnType("INTEGER"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Premium") + .HasColumnType("INTEGER"); + + b.Property("PremiumExpirationDate") + .HasColumnType("TEXT"); + + b.Property("PrivateKey") + .HasColumnType("TEXT"); + + b.Property("PublicKey") + .HasColumnType("TEXT"); + + b.Property("ReferenceData") + .HasColumnType("TEXT"); + + b.Property("RenewalReminderDate") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Storage") + .HasColumnType("INTEGER"); + + b.Property("TwoFactorProviders") + .HasColumnType("TEXT"); + + b.Property("TwoFactorRecoveryCode") + .HasMaxLength(32) + .HasColumnType("TEXT"); + + b.Property("UsesKeyConnector") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.ToTable("User", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Read") + .HasColumnType("INTEGER"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Write") + .HasColumnType("INTEGER"); + + b.HasKey("Id") + .HasAnnotation("SqlServer:Clustered", true); + + b.ToTable("AccessPolicy", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("AccessPolicy"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ApiKey", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("ClientSecret") + .HasMaxLength(30) + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("EncryptedPayload") + .HasMaxLength(4000) + .HasColumnType("TEXT"); + + b.Property("ExpireAt") + .HasColumnType("TEXT"); + + b.Property("Key") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Scope") + .HasMaxLength(4000) + .HasColumnType("TEXT"); + + b.Property("ServiceAccountId") + .HasColumnType("TEXT"); + + b.HasKey("Id") + .HasAnnotation("SqlServer:Clustered", true); + + b.HasIndex("ServiceAccountId") + .HasAnnotation("SqlServer:Clustered", false); + + b.ToTable("ApiKey", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("DeletedDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.HasKey("Id") + .HasAnnotation("SqlServer:Clustered", true); + + b.HasIndex("DeletedDate") + .HasAnnotation("SqlServer:Clustered", false); + + b.HasIndex("OrganizationId") + .HasAnnotation("SqlServer:Clustered", false); + + b.ToTable("Project", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("DeletedDate") + .HasColumnType("TEXT"); + + b.Property("Key") + .HasColumnType("TEXT"); + + b.Property("Note") + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.Property("Value") + .HasColumnType("TEXT"); + + b.HasKey("Id") + .HasAnnotation("SqlServer:Clustered", true); + + b.HasIndex("DeletedDate") + .HasAnnotation("SqlServer:Clustered", false); + + b.HasIndex("OrganizationId") + .HasAnnotation("SqlServer:Clustered", false); + + b.ToTable("Secret", (string)null); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("RevisionDate") + .HasColumnType("TEXT"); + + b.HasKey("Id") + .HasAnnotation("SqlServer:Clustered", true); + + b.HasIndex("OrganizationId") + .HasAnnotation("SqlServer:Clustered", false); + + b.ToTable("ServiceAccount", (string)null); + }); + + modelBuilder.Entity("ProjectSecret", b => + { + b.Property("ProjectsId") + .HasColumnType("TEXT"); + + b.Property("SecretsId") + .HasColumnType("TEXT"); + + b.HasKey("ProjectsId", "SecretsId"); + + b.HasIndex("SecretsId"); + + b.ToTable("ProjectSecret"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupProjectAccessPolicy", b => + { + b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); + + b.Property("GrantedProjectId") + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("TEXT") + .HasColumnName("GrantedProjectId"); + + b.Property("GroupId") + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("TEXT") + .HasColumnName("GroupId"); + + b.HasIndex("GrantedProjectId"); + + b.HasIndex("GroupId"); + + b.HasDiscriminator().HasValue("group_project"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupServiceAccountAccessPolicy", b => + { + b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); + + b.Property("GrantedServiceAccountId") + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("TEXT") + .HasColumnName("GrantedServiceAccountId"); + + b.Property("GroupId") + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("TEXT") + .HasColumnName("GroupId"); + + b.HasIndex("GrantedServiceAccountId"); + + b.HasIndex("GroupId"); + + b.HasDiscriminator().HasValue("group_service_account"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountProjectAccessPolicy", b => + { + b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); + + b.Property("GrantedProjectId") + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("TEXT") + .HasColumnName("GrantedProjectId"); + + b.Property("ServiceAccountId") + .HasColumnType("TEXT") + .HasColumnName("ServiceAccountId"); + + b.HasIndex("GrantedProjectId"); + + b.HasIndex("ServiceAccountId"); + + b.HasDiscriminator().HasValue("service_account_project"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserProjectAccessPolicy", b => + { + b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); + + b.Property("GrantedProjectId") + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("TEXT") + .HasColumnName("GrantedProjectId"); + + b.Property("OrganizationUserId") + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("TEXT") + .HasColumnName("OrganizationUserId"); + + b.HasIndex("GrantedProjectId"); + + b.HasIndex("OrganizationUserId"); + + b.HasDiscriminator().HasValue("user_project"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserServiceAccountAccessPolicy", b => + { + b.HasBaseType("Bit.Infrastructure.EntityFramework.SecretsManager.Models.AccessPolicy"); + + b.Property("GrantedServiceAccountId") + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("TEXT") + .HasColumnName("GrantedServiceAccountId"); + + b.Property("OrganizationUserId") + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("TEXT") + .HasColumnName("OrganizationUserId"); + + b.HasIndex("GrantedServiceAccountId"); + + b.HasIndex("OrganizationUserId"); + + b.HasDiscriminator().HasValue("user_service_account"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.AuthRequest", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Device", "ResponseDevice") + .WithMany() + .HasForeignKey("ResponseDeviceId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ResponseDevice"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Cipher", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("Ciphers") + .HasForeignKey("OrganizationId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") + .WithMany("Ciphers") + .HasForeignKey("UserId"); + + b.Navigation("Organization"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("Collections") + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionCipher", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Cipher", "Cipher") + .WithMany("CollectionCiphers") + .HasForeignKey("CipherId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") + .WithMany("CollectionCiphers") + .HasForeignKey("CollectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Cipher"); + + b.Navigation("Collection"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionGroup", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") + .WithMany("CollectionGroups") + .HasForeignKey("CollectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") + .WithMany() + .HasForeignKey("GroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Collection"); + + b.Navigation("Group"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionUser", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Collection", "Collection") + .WithMany("CollectionUsers") + .HasForeignKey("CollectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") + .WithMany("CollectionUsers") + .HasForeignKey("OrganizationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Collection"); + + b.Navigation("OrganizationUser"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Device", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.EmergencyAccess", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "Grantee") + .WithMany() + .HasForeignKey("GranteeId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "Grantor") + .WithMany() + .HasForeignKey("GrantorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Grantee"); + + b.Navigation("Grantor"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Folder", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") + .WithMany("Folders") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("Groups") + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.GroupUser", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") + .WithMany("GroupUsers") + .HasForeignKey("GroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") + .WithMany("GroupUsers") + .HasForeignKey("OrganizationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + + b.Navigation("OrganizationUser"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationApiKey", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("ApiKeys") + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationConnection", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("Connections") + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationDomain", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("Domains") + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationSponsorship", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "SponsoredOrganization") + .WithMany() + .HasForeignKey("SponsoredOrganizationId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "SponsoringOrganization") + .WithMany() + .HasForeignKey("SponsoringOrganizationId"); + + b.Navigation("SponsoredOrganization"); + + b.Navigation("SponsoringOrganization"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("OrganizationUsers") + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") + .WithMany("OrganizationUsers") + .HasForeignKey("UserId"); + + b.Navigation("Organization"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Policy", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("Policies") + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.ProviderOrganization", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany() + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + + b.Navigation("Provider"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.ProviderUser", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Provider", "Provider") + .WithMany() + .HasForeignKey("ProviderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") + .WithMany() + .HasForeignKey("UserId"); + + b.Navigation("Provider"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Send", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany() + .HasForeignKey("OrganizationId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") + .WithMany() + .HasForeignKey("UserId"); + + b.Navigation("Organization"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.SsoConfig", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("SsoConfigs") + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.SsoUser", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("SsoUsers") + .HasForeignKey("OrganizationId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") + .WithMany("SsoUsers") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Transaction", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("Transactions") + .HasForeignKey("OrganizationId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User") + .WithMany("Transactions") + .HasForeignKey("UserId"); + + b.Navigation("Organization"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ApiKey", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") + .WithMany() + .HasForeignKey("ServiceAccountId"); + + b.Navigation("ServiceAccount"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany() + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany() + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany() + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + + modelBuilder.Entity("ProjectSecret", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", null) + .WithMany() + .HasForeignKey("ProjectsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Secret", null) + .WithMany() + .HasForeignKey("SecretsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupProjectAccessPolicy", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") + .WithMany("GroupAccessPolicies") + .HasForeignKey("GrantedProjectId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") + .WithMany() + .HasForeignKey("GroupId"); + + b.Navigation("GrantedProject"); + + b.Navigation("Group"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.GroupServiceAccountAccessPolicy", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "GrantedServiceAccount") + .WithMany("GroupAccessPolicies") + .HasForeignKey("GrantedServiceAccountId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Group", "Group") + .WithMany() + .HasForeignKey("GroupId"); + + b.Navigation("GrantedServiceAccount"); + + b.Navigation("Group"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccountProjectAccessPolicy", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") + .WithMany("ServiceAccountAccessPolicies") + .HasForeignKey("GrantedProjectId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "ServiceAccount") + .WithMany() + .HasForeignKey("ServiceAccountId"); + + b.Navigation("GrantedProject"); + + b.Navigation("ServiceAccount"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserProjectAccessPolicy", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", "GrantedProject") + .WithMany("UserAccessPolicies") + .HasForeignKey("GrantedProjectId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") + .WithMany() + .HasForeignKey("OrganizationUserId"); + + b.Navigation("GrantedProject"); + + b.Navigation("OrganizationUser"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.UserServiceAccountAccessPolicy", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", "GrantedServiceAccount") + .WithMany("UserAccessPolicies") + .HasForeignKey("GrantedServiceAccountId"); + + b.HasOne("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", "OrganizationUser") + .WithMany() + .HasForeignKey("OrganizationUserId"); + + b.Navigation("GrantedServiceAccount"); + + b.Navigation("OrganizationUser"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Cipher", b => + { + b.Navigation("CollectionCiphers"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => + { + b.Navigation("CollectionCiphers"); + + b.Navigation("CollectionGroups"); + + b.Navigation("CollectionUsers"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b => + { + b.Navigation("GroupUsers"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Organization", b => + { + b.Navigation("ApiKeys"); + + b.Navigation("Ciphers"); + + b.Navigation("Collections"); + + b.Navigation("Connections"); + + b.Navigation("Domains"); + + b.Navigation("Groups"); + + b.Navigation("OrganizationUsers"); + + b.Navigation("Policies"); + + b.Navigation("SsoConfigs"); + + b.Navigation("SsoUsers"); + + b.Navigation("Transactions"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationUser", b => + { + b.Navigation("CollectionUsers"); + + b.Navigation("GroupUsers"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.User", b => + { + b.Navigation("Ciphers"); + + b.Navigation("Folders"); + + b.Navigation("OrganizationUsers"); + + b.Navigation("SsoUsers"); + + b.Navigation("Transactions"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.Project", b => + { + b.Navigation("GroupAccessPolicies"); + + b.Navigation("ServiceAccountAccessPolicies"); + + b.Navigation("UserAccessPolicies"); + }); + + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.SecretsManager.Models.ServiceAccount", b => + { + b.Navigation("GroupAccessPolicies"); + + b.Navigation("UserAccessPolicies"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/util/SqliteMigrations/Migrations/20230302121757_DomainClaiming.cs b/util/SqliteMigrations/Migrations/20230302121757_DomainClaiming.cs new file mode 100644 index 0000000000..ee0eb73de1 --- /dev/null +++ b/util/SqliteMigrations/Migrations/20230302121757_DomainClaiming.cs @@ -0,0 +1,57 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Bit.SqliteMigrations.Migrations; + +public partial class DomainClaiming : Migration +{ + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "DomainName", + table: "Event", + type: "TEXT", + nullable: true); + + migrationBuilder.CreateTable( + name: "OrganizationDomain", + columns: table => new + { + Id = table.Column(type: "TEXT", nullable: false), + OrganizationId = table.Column(type: "TEXT", nullable: false), + Txt = table.Column(type: "TEXT", nullable: true), + DomainName = table.Column(type: "TEXT", maxLength: 255, nullable: true), + CreationDate = table.Column(type: "TEXT", nullable: false), + VerifiedDate = table.Column(type: "TEXT", nullable: true), + NextRunDate = table.Column(type: "TEXT", nullable: false), + LastCheckedDate = table.Column(type: "TEXT", nullable: true), + JobRunCount = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_OrganizationDomain", x => x.Id); + table.ForeignKey( + name: "FK_OrganizationDomain_Organization_OrganizationId", + column: x => x.OrganizationId, + principalTable: "Organization", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_OrganizationDomain_OrganizationId", + table: "OrganizationDomain", + column: "OrganizationId"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "OrganizationDomain"); + + migrationBuilder.DropColumn( + name: "DomainName", + table: "Event"); + } +} diff --git a/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs b/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs index 4fda013404..59e8817bea 100644 --- a/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs +++ b/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs @@ -316,6 +316,9 @@ namespace Bit.SqliteMigrations.Migrations b.Property("DeviceType") .HasColumnType("INTEGER"); + b.Property("DomainName") + .HasColumnType("TEXT"); + b.Property("GroupId") .HasColumnType("TEXT"); @@ -706,6 +709,43 @@ namespace Bit.SqliteMigrations.Migrations b.ToTable("OrganizationConnection", (string)null); }); + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationDomain", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreationDate") + .HasColumnType("TEXT"); + + b.Property("DomainName") + .HasMaxLength(255) + .HasColumnType("TEXT"); + + b.Property("JobRunCount") + .HasColumnType("INTEGER"); + + b.Property("LastCheckedDate") + .HasColumnType("TEXT"); + + b.Property("NextRunDate") + .HasColumnType("TEXT"); + + b.Property("OrganizationId") + .HasColumnType("TEXT"); + + b.Property("Txt") + .HasColumnType("TEXT"); + + b.Property("VerifiedDate") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OrganizationId"); + + b.ToTable("OrganizationDomain", (string)null); + }); + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationSponsorship", b => { b.Property("Id") @@ -1625,7 +1665,7 @@ namespace Bit.SqliteMigrations.Migrations modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b => { b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") - .WithMany() + .WithMany("Collections") .HasForeignKey("OrganizationId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); @@ -1781,6 +1821,17 @@ namespace Bit.SqliteMigrations.Migrations b.Navigation("Organization"); }); + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationDomain", b => + { + b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "Organization") + .WithMany("Domains") + .HasForeignKey("OrganizationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organization"); + }); + modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.OrganizationSponsorship", b => { b.HasOne("Bit.Infrastructure.EntityFramework.Models.Organization", "SponsoredOrganization") @@ -2075,8 +2126,12 @@ namespace Bit.SqliteMigrations.Migrations b.Navigation("Ciphers"); + b.Navigation("Collections"); + b.Navigation("Connections"); + b.Navigation("Domains"); + b.Navigation("Groups"); b.Navigation("OrganizationUsers"); From 05f5d79938fea84cd5392cf9443ff2391d9dec1f Mon Sep 17 00:00:00 2001 From: Thomas Avery <43214426+Thomas-Avery@users.noreply.github.com> Date: Thu, 2 Mar 2023 09:02:42 -0600 Subject: [PATCH 3/6] [SM-572] Modify project endpoint to return current user's permission (#2752) * Add endpoints to check current user's permission * Swap to adding current user permission onto GET * Cleanup DI * Add ProjectPermissionDetails DTO and query * code review updates * Remove assert recent for longer running creates --- .../Repositories/ProjectRepository.cs | 26 ++++++++++++++++ .../Controllers/ProjectsController.cs | 30 +++++++++++++------ .../ProjectPermissionDetailsResponseModel.cs | 22 ++++++++++++++ .../Models/Response/ProjectResponseModel.cs | 4 +-- .../Models/Data/ProjectPermissionDetails.cs | 9 ++++++ .../Repositories/IProjectRepository.cs | 2 ++ .../AccessPoliciesControllerTest.cs | 2 -- .../Controllers/ProjectsControllerTest.cs | 4 ++- .../Controllers/ProjectsControllerTests.cs | 18 +++++------ 9 files changed, 94 insertions(+), 23 deletions(-) create mode 100644 src/Api/SecretsManager/Models/Response/ProjectPermissionDetailsResponseModel.cs create mode 100644 src/Core/SecretsManager/Models/Data/ProjectPermissionDetails.cs diff --git a/bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/ProjectRepository.cs b/bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/ProjectRepository.cs index 782486601c..f9bb3740d3 100644 --- a/bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/ProjectRepository.cs +++ b/bitwarden_license/src/Commercial.Infrastructure.EntityFramework/SecretsManager/Repositories/ProjectRepository.cs @@ -1,6 +1,7 @@ using System.Linq.Expressions; using AutoMapper; using Bit.Core.Enums; +using Bit.Core.SecretsManager.Models.Data; using Bit.Core.SecretsManager.Repositories; using Bit.Infrastructure.EntityFramework.Repositories; using Bit.Infrastructure.EntityFramework.SecretsManager.Models; @@ -27,6 +28,31 @@ public class ProjectRepository : Repository GetPermissionDetailsByIdAsync(Guid id, Guid userId) + { + using var scope = ServiceScopeFactory.CreateScope(); + var dbContext = GetDatabaseContext(scope); + + var project = await dbContext.Project + .Where(c => c.Id == id && c.DeletedDate == null) + .Select(p => new ProjectPermissionDetails + { + Id = p.Id, + OrganizationId = p.OrganizationId, + Name = p.Name, + CreationDate = p.CreationDate, + RevisionDate = p.RevisionDate, + DeletedDate = p.DeletedDate, + Read = p.UserAccessPolicies.Any(ap => ap.OrganizationUser.User.Id == userId && ap.Read) + || p.GroupAccessPolicies.Any(ap => + ap.Group.GroupUsers.Any(gu => gu.OrganizationUser.User.Id == userId && ap.Read)), + Write = p.UserAccessPolicies.Any(ap => ap.OrganizationUser.User.Id == userId && ap.Write) || + p.GroupAccessPolicies.Any(ap => + ap.Group.GroupUsers.Any(gu => gu.OrganizationUser.User.Id == userId && ap.Write)), + }).FirstOrDefaultAsync(); + return project; + } + public async Task> GetManyByOrganizationIdAsync(Guid organizationId, Guid userId, AccessClientType accessType) { using var scope = ServiceScopeFactory.CreateScope(); diff --git a/src/Api/SecretsManager/Controllers/ProjectsController.cs b/src/Api/SecretsManager/Controllers/ProjectsController.cs index 9dfb8f11cc..75738b9819 100644 --- a/src/Api/SecretsManager/Controllers/ProjectsController.cs +++ b/src/Api/SecretsManager/Controllers/ProjectsController.cs @@ -80,9 +80,10 @@ public class ProjectsController : Controller } [HttpGet("projects/{id}")] - public async Task GetAsync([FromRoute] Guid id) + public async Task GetAsync([FromRoute] Guid id) { - var project = await _projectRepository.GetByIdAsync(id); + var userId = _userService.GetProperUserId(User).Value; + var project = await _projectRepository.GetPermissionDetailsByIdAsync(id, userId); if (project == null) { throw new NotFoundException(); @@ -93,23 +94,34 @@ public class ProjectsController : Controller throw new NotFoundException(); } - var userId = _userService.GetProperUserId(User).Value; var orgAdmin = await _currentContext.OrganizationAdmin(project.OrganizationId); var accessClient = AccessClientHelper.ToAccessClient(_currentContext.ClientType, orgAdmin); - var hasAccess = accessClient switch + bool hasAccess; + var read = project.Read; + var write = project.Write; + + switch (accessClient) { - AccessClientType.NoAccessCheck => true, - AccessClientType.User => await _projectRepository.UserHasReadAccessToProject(id, userId), - _ => false, - }; + case AccessClientType.NoAccessCheck: + hasAccess = true; + write = true; + read = true; + break; + case AccessClientType.User: + hasAccess = project.Read; + break; + default: + hasAccess = false; + break; + } if (!hasAccess) { throw new NotFoundException(); } - return new ProjectResponseModel(project); + return new ProjectPermissionDetailsResponseModel(project, read, write); } [HttpPost("projects/delete")] diff --git a/src/Api/SecretsManager/Models/Response/ProjectPermissionDetailsResponseModel.cs b/src/Api/SecretsManager/Models/Response/ProjectPermissionDetailsResponseModel.cs new file mode 100644 index 0000000000..162ce2205c --- /dev/null +++ b/src/Api/SecretsManager/Models/Response/ProjectPermissionDetailsResponseModel.cs @@ -0,0 +1,22 @@ +using Bit.Core.SecretsManager.Entities; + +namespace Bit.Api.SecretsManager.Models.Response; + +public class ProjectPermissionDetailsResponseModel : ProjectResponseModel +{ + private const string _objectName = "projectPermissionDetails"; + + public ProjectPermissionDetailsResponseModel(Project project, bool read, bool write, string obj = _objectName) : base(project, obj) + { + Read = read; + Write = write; + } + + public ProjectPermissionDetailsResponseModel() + { + } + + public bool Read { get; set; } + + public bool Write { get; set; } +} diff --git a/src/Api/SecretsManager/Models/Response/ProjectResponseModel.cs b/src/Api/SecretsManager/Models/Response/ProjectResponseModel.cs index 25934a7e33..bf7507915f 100644 --- a/src/Api/SecretsManager/Models/Response/ProjectResponseModel.cs +++ b/src/Api/SecretsManager/Models/Response/ProjectResponseModel.cs @@ -7,8 +7,8 @@ public class ProjectResponseModel : ResponseModel { private const string _objectName = "project"; - public ProjectResponseModel(Project project) - : base(_objectName) + public ProjectResponseModel(Project project, string obj = _objectName) + : base(obj) { if (project == null) { diff --git a/src/Core/SecretsManager/Models/Data/ProjectPermissionDetails.cs b/src/Core/SecretsManager/Models/Data/ProjectPermissionDetails.cs new file mode 100644 index 0000000000..435b959851 --- /dev/null +++ b/src/Core/SecretsManager/Models/Data/ProjectPermissionDetails.cs @@ -0,0 +1,9 @@ +using Bit.Core.SecretsManager.Entities; + +namespace Bit.Core.SecretsManager.Models.Data; + +public class ProjectPermissionDetails : Project +{ + public bool Read { get; set; } + public bool Write { get; set; } +} diff --git a/src/Core/SecretsManager/Repositories/IProjectRepository.cs b/src/Core/SecretsManager/Repositories/IProjectRepository.cs index dddd2e21d9..1841fafecd 100644 --- a/src/Core/SecretsManager/Repositories/IProjectRepository.cs +++ b/src/Core/SecretsManager/Repositories/IProjectRepository.cs @@ -1,5 +1,6 @@ using Bit.Core.Enums; using Bit.Core.SecretsManager.Entities; +using Bit.Core.SecretsManager.Models.Data; namespace Bit.Core.SecretsManager.Repositories; @@ -8,6 +9,7 @@ public interface IProjectRepository Task> GetManyByOrganizationIdAsync(Guid organizationId, Guid userId, AccessClientType accessType); Task> GetManyByOrganizationIdWriteAccessAsync(Guid organizationId, Guid userId, AccessClientType accessType); Task> GetManyByIds(IEnumerable ids); + Task GetPermissionDetailsByIdAsync(Guid id, Guid userId); Task GetByIdAsync(Guid id); Task CreateAsync(Project project); Task ReplaceAsync(Project project); diff --git a/test/Api.IntegrationTest/SecretsManager/Controllers/AccessPoliciesControllerTest.cs b/test/Api.IntegrationTest/SecretsManager/Controllers/AccessPoliciesControllerTest.cs index 305d249738..c6e481ebd5 100644 --- a/test/Api.IntegrationTest/SecretsManager/Controllers/AccessPoliciesControllerTest.cs +++ b/test/Api.IntegrationTest/SecretsManager/Controllers/AccessPoliciesControllerTest.cs @@ -703,7 +703,6 @@ public class AccessPoliciesControllerTest : IClassFixture Assert.True(result.UserAccessPolicies.First().Read); Assert.True(result.UserAccessPolicies.First().Write); AssertHelper.AssertRecent(result.UserAccessPolicies.First().RevisionDate); - AssertHelper.AssertRecent(result.UserAccessPolicies.First().CreationDate); var createdAccessPolicy = await _accessPolicyRepository.GetByIdAsync(result.UserAccessPolicies.First().Id); @@ -711,7 +710,6 @@ public class AccessPoliciesControllerTest : IClassFixture Assert.Equal(result.UserAccessPolicies.First().Read, createdAccessPolicy!.Read); Assert.Equal(result.UserAccessPolicies.First().Write, createdAccessPolicy.Write); Assert.Equal(result.UserAccessPolicies.First().Id, createdAccessPolicy.Id); - AssertHelper.AssertRecent(createdAccessPolicy.CreationDate); AssertHelper.AssertRecent(createdAccessPolicy.RevisionDate); } diff --git a/test/Api.IntegrationTest/SecretsManager/Controllers/ProjectsControllerTest.cs b/test/Api.IntegrationTest/SecretsManager/Controllers/ProjectsControllerTest.cs index fa9dccc939..5665bee8a6 100644 --- a/test/Api.IntegrationTest/SecretsManager/Controllers/ProjectsControllerTest.cs +++ b/test/Api.IntegrationTest/SecretsManager/Controllers/ProjectsControllerTest.cs @@ -302,10 +302,12 @@ public class ProjectsControllerTest : IClassFixture, IAsy var response = await _client.GetAsync($"/projects/{project.Id}"); response.EnsureSuccessStatusCode(); - var result = await response.Content.ReadFromJsonAsync(); + var result = await response.Content.ReadFromJsonAsync(); Assert.Equal(project.Name, result!.Name); Assert.Equal(project.RevisionDate, result.RevisionDate); Assert.Equal(project.CreationDate, result.CreationDate); + Assert.True(result.Read); + Assert.True(result.Write); } [Theory] diff --git a/test/Api.Test/SecretsManager/Controllers/ProjectsControllerTests.cs b/test/Api.Test/SecretsManager/Controllers/ProjectsControllerTests.cs index 39ba7bdba7..e216c9b78f 100644 --- a/test/Api.Test/SecretsManager/Controllers/ProjectsControllerTests.cs +++ b/test/Api.Test/SecretsManager/Controllers/ProjectsControllerTests.cs @@ -6,6 +6,7 @@ using Bit.Core.Enums; using Bit.Core.Exceptions; using Bit.Core.SecretsManager.Commands.Projects.Interfaces; using Bit.Core.SecretsManager.Entities; +using Bit.Core.SecretsManager.Models.Data; using Bit.Core.SecretsManager.Repositories; using Bit.Core.Services; using Bit.Core.Test.SecretsManager.AutoFixture.ProjectsFixture; @@ -165,19 +166,18 @@ public class ProjectsControllerTests [Theory] [BitAutoData] - public async void Get_SmNotEnabled_Throws(SutProvider sutProvider, Guid data) + public async void Get_SmNotEnabled_Throws(SutProvider sutProvider, Guid data, Guid orgId) { - sutProvider.GetDependency().AccessSecretsManager(data).Returns(false); - + SetupAdmin(sutProvider, orgId); + sutProvider.GetDependency().AccessSecretsManager(orgId).Returns(false); await Assert.ThrowsAsync(() => sutProvider.Sut.GetAsync(data)); } [Theory] [BitAutoData] - public async void Get_ThrowsNotFound(SutProvider sutProvider, Guid data) + public async void Get_ThrowsNotFound(SutProvider sutProvider, Guid data, Guid orgId) { - sutProvider.GetDependency().AccessSecretsManager(data).Returns(true); - + SetupAdmin(sutProvider, orgId); await Assert.ThrowsAsync(() => sutProvider.Sut.GetAsync(data)); } @@ -199,13 +199,13 @@ public class ProjectsControllerTests break; } - sutProvider.GetDependency().GetByIdAsync(Arg.Is(data)) - .ReturnsForAnyArgs(new Project { Id = data, OrganizationId = orgId }); + sutProvider.GetDependency().GetPermissionDetailsByIdAsync(Arg.Is(data), Arg.Any()) + .ReturnsForAnyArgs(new ProjectPermissionDetails() { Id = data, OrganizationId = orgId, Read = true, Write = true }); await sutProvider.Sut.GetAsync(data); await sutProvider.GetDependency().Received(1) - .GetByIdAsync(Arg.Is(data)); + .GetPermissionDetailsByIdAsync(Arg.Is(data), Arg.Any()); } [Theory] From 3289a8c35e8f2be63126c37b8c0586721513852a Mon Sep 17 00:00:00 2001 From: Robyn MacCallum Date: Thu, 2 Mar 2023 13:23:38 -0500 Subject: [PATCH 4/6] [SG-998] Move files to Vault folders (#2724) * Move Api files * Move Core files * Move Infrastructure files * Move Sql Files * Move Api Sync files to Vault * Move test vault files * Update Sql.sqlproj paths * Update Codeowners * Fix vault file paths in sqlproj * Update CipherDetails.sql path in sqlproj * Update Core models and entities namespaces * Update namespaces Core Services and Repositories * Missed service namespaces * Update Api namespaces * Update Infrastructure namespaces * Move infrastructure queries that were missed * Tests namespace updates * Admin and Events namespace updates * Remove unused usings * Remove extra CiphersController usings * Rename folder * Fix CipherDetails namespace * Sqlproj fixes * Move stored procs into folders by table * using order fix --- .github/CODEOWNERS | 1 + .../Controllers/OrganizationsController.cs | 1 + src/Admin/Controllers/UsersController.cs | 1 + src/Admin/Jobs/DeleteCiphersJob.cs | 2 +- src/Admin/Models/OrganizationEditModel.cs | 1 + src/Admin/Models/OrganizationViewModel.cs | 1 + src/Admin/Models/UserEditModel.cs | 1 + src/Admin/Models/UserViewModel.cs | 1 + src/Api/Controllers/AccountsController.cs | 2 + .../Controllers/EmergencyAccessController.cs | 1 + src/Api/Controllers/EventsController.cs | 1 + .../OrganizationExportController.cs | 4 +- .../Accounts/ImportCiphersRequestModel.cs | 4 +- .../Request/Accounts/UpdateKeyRequestModel.cs | 1 + .../ImportOrganizationCiphersRequestModel.cs | 4 +- .../Response/EmergencyAccessResponseModel.cs | 5 +- .../OrganizationExportResponseModel.cs | 3 +- .../Public/Controllers/EventsController.cs | 1 + .../Controllers/CiphersController.cs | 11 ++- .../Controllers/FoldersController.cs | 10 +- .../{ => Vault}/Controllers/SyncController.cs | 5 +- .../Models/CipherAttachmentModel.cs | 6 +- src/Api/{ => Vault}/Models/CipherCardModel.cs | 4 +- .../{ => Vault}/Models/CipherFieldModel.cs | 8 +- .../{ => Vault}/Models/CipherIdentityModel.cs | 4 +- .../{ => Vault}/Models/CipherLoginModel.cs | 4 +- .../Models/CipherPasswordHistoryModel.cs | 4 +- .../Models/CipherSecureNoteModel.cs | 6 +- .../Models/Request/AttachmentRequestModel.cs | 2 +- .../Request/CipherPartialRequestModel.cs | 2 +- .../Models/Request/CipherRequestModel.cs | 9 +- .../Models/Request/FolderRequestModel.cs | 4 +- .../Response/AttachmentResponseModel.cs | 6 +- .../AttachmentUploadDataResponseModel.cs | 2 +- .../Models/Response/CipherResponseModel.cs | 8 +- .../Models/Response/FolderResponseModel.cs | 6 +- .../Models/Response/SyncResponseModel.cs | 8 +- src/Core/Entities/Folder.cs | 5 +- .../Models/Data/EmergencyAccessViewData.cs | 2 +- src/Core/Repositories/IEventRepository.cs | 4 +- .../TableStorage/EventRepository.cs | 4 +- .../Services/IAttachmentStorageService.cs | 7 +- src/Core/Services/IEmergencyAccessService.cs | 1 + src/Core/Services/IEventService.cs | 1 + src/Core/Services/IPushNotificationService.cs | 1 + src/Core/Services/IUserService.cs | 1 + .../AzureQueuePushNotificationService.cs | 1 + .../Implementations/EmergencyAccessService.cs | 3 + .../Services/Implementations/EventService.cs | 1 + .../MultiServicePushNotificationService.cs | 1 + .../NotificationHubPushNotificationService.cs | 1 + ...NotificationsApiPushNotificationService.cs | 1 + .../RelayPushNotificationService.cs | 1 + .../Services/Implementations/UserService.cs | 2 + .../NoopImplementations/NoopEventService.cs | 1 + .../NoopPushNotificationService.cs | 1 + src/Core/{ => Vault}/Entities/Cipher.cs | 5 +- .../{ => Vault}/Enums/CipherRepromptType.cs | 2 +- .../{ => Vault}/Enums/CipherStateAction.cs | 2 +- src/Core/{ => Vault}/Enums/CipherType.cs | 2 +- src/Core/{ => Vault}/Enums/FieldType.cs | 2 +- src/Core/{ => Vault}/Enums/SecureNoteType.cs | 2 +- .../Models/Data/AttachmentResponseData.cs | 4 +- .../Models/Data/CipherAttachment.cs | 2 +- .../{ => Vault}/Models/Data/CipherCardData.cs | 2 +- .../{ => Vault}/Models/Data/CipherData.cs | 2 +- .../{ => Vault}/Models/Data/CipherDetails.cs | 2 +- .../Models/Data/CipherFieldData.cs | 4 +- .../Models/Data/CipherIdentityData.cs | 2 +- .../Models/Data/CipherLoginData.cs | 2 +- .../Models/Data/CipherOrganizationDetails.cs | 4 +- .../Models/Data/CipherPasswordHistoryData.cs | 2 +- .../Models/Data/CipherSecureNoteData.cs | 4 +- .../Repositories/ICipherRepository.cs | 7 +- .../Repositories/IFolderRepository.cs | 5 +- .../{ => Vault}/Services/ICipherService.cs | 6 +- .../AzureAttachmentStorageService.cs | 7 +- .../Services/Implementations/CipherService.cs | 26 +++--- .../LocalAttachmentStorageService.cs | 9 +- .../NoopAttachmentStorageService.cs | 9 +- src/Events/Controllers/CollectController.cs | 3 +- .../DapperServiceCollectionExtensions.cs | 2 + .../Repositories/EventRepository.cs | 1 + .../Repositories/CipherRepository.cs | 9 +- .../Repositories/FolderRepository.cs | 7 +- ...ityFrameworkServiceCollectionExtensions.cs | 2 + .../Models/CollectionCipher.cs | 1 + .../Models/Folder.cs | 16 ---- .../Models/Organization.cs | 1 + .../Models/User.cs | 1 + .../Repositories/DatabaseContext.cs | 1 + .../Repositories/EventRepository.cs | 2 +- .../Queries/EventReadPageByCipherIdQuery.cs | 4 +- .../Queries/UserCipherDetailsQuery.cs | 5 +- .../{ => Vault}/Models/Cipher.cs | 7 +- .../Vault/Models/Folder.cs | 17 ++++ .../Repositories/CipherRepository.cs | 38 ++++---- .../Repositories/FolderRepository.cs | 15 +-- .../Queries/CipherDetailsQuery.cs | 6 +- .../CipherOrganizationDetailsReadByIdQuery.cs | 6 +- ...izationDetailsReadByOrganizationIdQuery.cs | 5 +- .../CipherReadCanEditByIdUserIdQuery.cs | 6 +- .../Utilities/ServiceCollectionExtensions.cs | 1 + src/Sql/Sql.sqlproj | 93 ++++++++++--------- .../dbo/Functions/CipherDetails.sql | 0 .../dbo/Functions/UserCipherDetails.sql | 0 .../Cipher}/CipherDetails_Create.sql | 0 .../CipherDetails_CreateWithCollections.sql | 0 .../Cipher}/CipherDetails_ReadByIdUserId.sql | 0 .../Cipher}/CipherDetails_ReadByUserId.sql | 0 ...tails_ReadWithoutOrganizationsByUserId.sql | 0 .../Cipher}/CipherDetails_Update.sql | 0 .../CipherOrganizationDetails_ReadById.sql | 0 ...ganizationDetails_ReadByOrganizationId.sql | 0 .../Cipher}/Cipher_Create.sql | 0 .../Cipher}/Cipher_CreateWithCollections.sql | 0 .../Cipher}/Cipher_Delete.sql | 0 .../Cipher}/Cipher_DeleteAttachment.sql | 0 .../Cipher}/Cipher_DeleteById.sql | 0 .../Cipher_DeleteByIdsOrganizationId.sql | 0 .../Cipher}/Cipher_DeleteByOrganizationId.sql | 0 .../Cipher}/Cipher_DeleteByUserId.sql | 0 .../Cipher}/Cipher_DeleteDeleted.sql | 0 .../Stored Procedures/Cipher}/Cipher_Move.sql | 0 .../Cipher}/Cipher_ReadById.sql | 0 .../Cipher}/Cipher_ReadByOrganizationId.sql | 0 .../Cipher}/Cipher_ReadCanEditByIdUserId.sql | 0 .../Cipher}/Cipher_Restore.sql | 0 .../Cipher}/Cipher_SoftDelete.sql | 0 .../Cipher_SoftDeleteByIdsOrganizationId.sql | 0 .../Cipher}/Cipher_Update.sql | 0 .../Cipher}/Cipher_UpdateAttachment.sql | 0 .../Cipher}/Cipher_UpdateCollections.sql | 0 .../Cipher}/Cipher_UpdatePartial.sql | 0 .../Cipher}/Cipher_UpdateWithCollections.sql | 0 .../Folder}/Folder_Create.sql | 0 .../Folder}/Folder_DeleteById.sql | 0 .../Folder}/Folder_ReadById.sql | 0 .../Folder}/Folder_ReadByUserId.sql | 0 .../Folder}/Folder_Update.sql | 0 src/Sql/{ => Vault}/dbo/Tables/Cipher.sql | 0 src/Sql/{ => Vault}/dbo/Tables/Folder.sql | 0 src/Sql/{ => Vault}/dbo/Views/CipherView.sql | 0 src/Sql/{ => Vault}/dbo/Views/FolderView.sql | 0 .../Controllers/AccountsControllerTests.cs | 1 + .../Controllers/CiphersControllerTests.cs | 10 +- .../Controllers/SyncControllerTests.cs | 8 +- .../LocalAttachmentStorageServiceTests.cs | 6 +- .../CipherAttachmentMetaDataFixtures.cs | 2 +- .../{ => Vault}/AutoFixture/CipherFixtures.cs | 4 +- .../{ => Vault}/Models/CipherTests.cs | 2 +- .../AzureAttachmentStorageServiceTests.cs | 4 +- .../Services/CipherServiceTests.cs | 6 +- .../AutoFixture/CollectionCipherFixtures.cs | 1 + .../EntityFrameworkRepositoryFixtures.cs | 1 + .../EqualityComparers/CipherCompare.cs | 2 +- .../EqualityComparers/FolderCompare.cs | 2 +- .../{ => Vault}/AutoFixture/CipherFixtures.cs | 5 +- .../{ => Vault}/AutoFixture/FolderFixtures.cs | 3 +- .../Repositories/CipherRepositoryTests.cs | 27 +++--- .../Repositories/FolderRepositoryTests.cs | 7 +- .../Repositories/CipherRepositoryTests.cs | 5 +- 162 files changed, 375 insertions(+), 267 deletions(-) rename src/Api/{ => Vault}/Controllers/CiphersController.cs (99%) rename src/Api/{ => Vault}/Controllers/FoldersController.cs (92%) rename src/Api/{ => Vault}/Controllers/SyncController.cs (97%) rename src/Api/{ => Vault}/Models/CipherAttachmentModel.cs (79%) rename src/Api/{ => Vault}/Models/CipherCardModel.cs (93%) rename src/Api/{ => Vault}/Models/CipherFieldModel.cs (85%) rename src/Api/{ => Vault}/Models/CipherIdentityModel.cs (97%) rename src/Api/{ => Vault}/Models/CipherLoginModel.cs (96%) rename src/Api/{ => Vault}/Models/CipherPasswordHistoryModel.cs (91%) rename src/Api/{ => Vault}/Models/CipherSecureNoteModel.cs (69%) rename src/Api/{ => Vault}/Models/Request/AttachmentRequestModel.cs (82%) rename src/Api/{ => Vault}/Models/Request/CipherPartialRequestModel.cs (83%) rename src/Api/{ => Vault}/Models/Request/CipherRequestModel.cs (98%) rename src/Api/{ => Vault}/Models/Request/FolderRequestModel.cs (89%) rename src/Api/{ => Vault}/Models/Response/AttachmentResponseModel.cs (93%) rename src/Api/{ => Vault}/Models/Response/AttachmentUploadDataResponseModel.cs (91%) rename src/Api/{ => Vault}/Models/Response/CipherResponseModel.cs (97%) rename src/Api/{ => Vault}/Models/Response/FolderResponseModel.cs (82%) rename src/Api/{ => Vault}/Models/Response/SyncResponseModel.cs (93%) rename src/Core/{ => Vault}/Entities/Cipher.cs (96%) rename src/Core/{ => Vault}/Enums/CipherRepromptType.cs (68%) rename src/Core/{ => Vault}/Enums/CipherStateAction.cs (69%) rename src/Core/{ => Vault}/Enums/CipherType.cs (80%) rename src/Core/{ => Vault}/Enums/FieldType.cs (73%) rename src/Core/{ => Vault}/Enums/SecureNoteType.cs (61%) rename src/Core/{ => Vault}/Models/Data/AttachmentResponseData.cs (74%) rename src/Core/{ => Vault}/Models/Data/CipherAttachment.cs (96%) rename src/Core/{ => Vault}/Models/Data/CipherCardData.cs (88%) rename src/Core/{ => Vault}/Models/Data/CipherData.cs (87%) rename src/Core/{ => Vault}/Models/Data/CipherDetails.cs (84%) rename src/Core/{ => Vault}/Models/Data/CipherFieldData.cs (76%) rename src/Core/{ => Vault}/Models/Data/CipherIdentityData.cs (95%) rename src/Core/{ => Vault}/Models/Data/CipherLoginData.cs (95%) rename src/Core/{ => Vault}/Models/Data/CipherOrganizationDetails.cs (59%) rename src/Core/{ => Vault}/Models/Data/CipherPasswordHistoryData.cs (81%) rename src/Core/{ => Vault}/Models/Data/CipherSecureNoteData.cs (66%) rename src/Core/{ => Vault}/Repositories/ICipherRepository.cs (94%) rename src/Core/{ => Vault}/Repositories/IFolderRepository.cs (64%) rename src/Core/{ => Vault}/Services/ICipherService.cs (96%) rename src/Core/{ => Vault}/Services/Implementations/AzureAttachmentStorageService.cs (98%) rename src/Core/{ => Vault}/Services/Implementations/CipherService.cs (97%) rename src/Core/{ => Vault}/Services/Implementations/LocalAttachmentStorageService.cs (97%) rename src/Core/{ => Vault}/Services/NoopImplementations/NoopAttachmentStorageService.cs (92%) rename src/Infrastructure.Dapper/{ => Vault}/Repositories/CipherRepository.cs (99%) rename src/Infrastructure.Dapper/{ => Vault}/Repositories/FolderRepository.cs (87%) delete mode 100644 src/Infrastructure.EntityFramework/Models/Folder.cs rename src/Infrastructure.EntityFramework/{ => Vault}/Models/Cipher.cs (57%) create mode 100644 src/Infrastructure.EntityFramework/Vault/Models/Folder.cs rename src/Infrastructure.EntityFramework/{ => Vault}/Repositories/CipherRepository.cs (94%) rename src/Infrastructure.EntityFramework/{ => Vault}/Repositories/FolderRepository.cs (59%) rename src/Infrastructure.EntityFramework/{ => Vault}/Repositories/Queries/CipherDetailsQuery.cs (86%) rename src/Infrastructure.EntityFramework/{ => Vault}/Repositories/Queries/CipherOrganizationDetailsReadByIdQuery.cs (85%) rename src/Infrastructure.EntityFramework/{ => Vault}/Repositories/Queries/CipherOrganizationDetailsReadByOrganizationIdQuery.cs (88%) rename src/Infrastructure.EntityFramework/{ => Vault}/Repositories/Queries/CipherReadCanEditByIdUserIdQuery.cs (92%) rename src/Sql/{ => Vault}/dbo/Functions/CipherDetails.sql (100%) rename src/Sql/{ => Vault}/dbo/Functions/UserCipherDetails.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/CipherDetails_Create.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/CipherDetails_CreateWithCollections.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/CipherDetails_ReadByIdUserId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/CipherDetails_ReadByUserId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/CipherDetails_ReadWithoutOrganizationsByUserId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/CipherDetails_Update.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/CipherOrganizationDetails_ReadById.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/CipherOrganizationDetails_ReadByOrganizationId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_Create.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_CreateWithCollections.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_Delete.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_DeleteAttachment.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_DeleteById.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_DeleteByIdsOrganizationId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_DeleteByOrganizationId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_DeleteByUserId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_DeleteDeleted.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_Move.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_ReadById.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_ReadByOrganizationId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_ReadCanEditByIdUserId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_Restore.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_SoftDelete.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_SoftDeleteByIdsOrganizationId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_Update.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_UpdateAttachment.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_UpdateCollections.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_UpdatePartial.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Cipher}/Cipher_UpdateWithCollections.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Folder}/Folder_Create.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Folder}/Folder_DeleteById.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Folder}/Folder_ReadById.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Folder}/Folder_ReadByUserId.sql (100%) rename src/Sql/{dbo/Stored Procedures => Vault/dbo/Stored Procedures/Folder}/Folder_Update.sql (100%) rename src/Sql/{ => Vault}/dbo/Tables/Cipher.sql (100%) rename src/Sql/{ => Vault}/dbo/Tables/Folder.sql (100%) rename src/Sql/{ => Vault}/dbo/Views/CipherView.sql (100%) rename src/Sql/{ => Vault}/dbo/Views/FolderView.sql (100%) rename test/Api.Test/{ => Vault}/Controllers/CiphersControllerTests.cs (86%) rename test/Api.Test/{ => Vault}/Controllers/SyncControllerTests.cs (98%) rename test/Core.Test/{ => Vault}/AutoFixture/CipherAttachmentMetaDataFixtures.cs (97%) rename test/Core.Test/{ => Vault}/AutoFixture/CipherFixtures.cs (95%) rename test/Core.Test/{ => Vault}/Models/CipherTests.cs (95%) rename test/Core.Test/{ => Vault}/Services/AzureAttachmentStorageServiceTests.cs (93%) rename test/Core.Test/{ => Vault}/Services/CipherServiceTests.cs (98%) rename test/Infrastructure.EFIntegration.Test/{ => Vault}/AutoFixture/CipherFixtures.cs (97%) rename test/Infrastructure.EFIntegration.Test/{ => Vault}/AutoFixture/FolderFixtures.cs (95%) rename test/Infrastructure.EFIntegration.Test/{ => Vault}/Repositories/CipherRepositoryTests.cs (86%) rename test/Infrastructure.EFIntegration.Test/{ => Vault}/Repositories/FolderRepositoryTests.cs (85%) rename test/Infrastructure.IntegrationTest/{ => Vault}/Repositories/CipherRepositoryTests.cs (95%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a4645cd124..1e001d527f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -3,3 +3,4 @@ # https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners **/SecretsManager @bitwarden/pod-sm-dev +**/Vault @bitwarden/team-vault-dev diff --git a/src/Admin/Controllers/OrganizationsController.cs b/src/Admin/Controllers/OrganizationsController.cs index 76c00d025b..0394a341a7 100644 --- a/src/Admin/Controllers/OrganizationsController.cs +++ b/src/Admin/Controllers/OrganizationsController.cs @@ -8,6 +8,7 @@ using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Utilities; +using Bit.Core.Vault.Repositories; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/src/Admin/Controllers/UsersController.cs b/src/Admin/Controllers/UsersController.cs index 0a4becb697..68cf70a35b 100644 --- a/src/Admin/Controllers/UsersController.cs +++ b/src/Admin/Controllers/UsersController.cs @@ -4,6 +4,7 @@ using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Utilities; +using Bit.Core.Vault.Repositories; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/src/Admin/Jobs/DeleteCiphersJob.cs b/src/Admin/Jobs/DeleteCiphersJob.cs index ecf13401ee..ee48a26d16 100644 --- a/src/Admin/Jobs/DeleteCiphersJob.cs +++ b/src/Admin/Jobs/DeleteCiphersJob.cs @@ -1,6 +1,6 @@ using Bit.Core; using Bit.Core.Jobs; -using Bit.Core.Repositories; +using Bit.Core.Vault.Repositories; using Microsoft.Extensions.Options; using Quartz; diff --git a/src/Admin/Models/OrganizationEditModel.cs b/src/Admin/Models/OrganizationEditModel.cs index 2eeafb77a2..1d18a60625 100644 --- a/src/Admin/Models/OrganizationEditModel.cs +++ b/src/Admin/Models/OrganizationEditModel.cs @@ -5,6 +5,7 @@ using Bit.Core.Models.Business; using Bit.Core.Models.Data.Organizations.OrganizationUsers; using Bit.Core.Settings; using Bit.Core.Utilities; +using Bit.Core.Vault.Entities; namespace Bit.Admin.Models; diff --git a/src/Admin/Models/OrganizationViewModel.cs b/src/Admin/Models/OrganizationViewModel.cs index 6799f34e26..520fa30e26 100644 --- a/src/Admin/Models/OrganizationViewModel.cs +++ b/src/Admin/Models/OrganizationViewModel.cs @@ -1,6 +1,7 @@ using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Models.Data.Organizations.OrganizationUsers; +using Bit.Core.Vault.Entities; namespace Bit.Admin.Models; diff --git a/src/Admin/Models/UserEditModel.cs b/src/Admin/Models/UserEditModel.cs index d7ef56f085..d438e3000a 100644 --- a/src/Admin/Models/UserEditModel.cs +++ b/src/Admin/Models/UserEditModel.cs @@ -3,6 +3,7 @@ using Bit.Core.Entities; using Bit.Core.Models.Business; using Bit.Core.Settings; using Bit.Core.Utilities; +using Bit.Core.Vault.Entities; namespace Bit.Admin.Models; diff --git a/src/Admin/Models/UserViewModel.cs b/src/Admin/Models/UserViewModel.cs index f493f68f2c..05160f2e00 100644 --- a/src/Admin/Models/UserViewModel.cs +++ b/src/Admin/Models/UserViewModel.cs @@ -1,4 +1,5 @@ using Bit.Core.Entities; +using Bit.Core.Vault.Entities; namespace Bit.Admin.Models; diff --git a/src/Api/Controllers/AccountsController.cs b/src/Api/Controllers/AccountsController.cs index b4c8f41ad6..793413e6ac 100644 --- a/src/Api/Controllers/AccountsController.cs +++ b/src/Api/Controllers/AccountsController.cs @@ -15,6 +15,8 @@ using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Utilities; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Repositories; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/src/Api/Controllers/EmergencyAccessController.cs b/src/Api/Controllers/EmergencyAccessController.cs index b2eb997b41..466f80cafd 100644 --- a/src/Api/Controllers/EmergencyAccessController.cs +++ b/src/Api/Controllers/EmergencyAccessController.cs @@ -1,6 +1,7 @@ using Bit.Api.Models.Request; using Bit.Api.Models.Request.Organizations; using Bit.Api.Models.Response; +using Bit.Api.Vault.Models.Response; using Bit.Core.Entities; using Bit.Core.Exceptions; using Bit.Core.Repositories; diff --git a/src/Api/Controllers/EventsController.cs b/src/Api/Controllers/EventsController.cs index 4fd1496b0c..585568db61 100644 --- a/src/Api/Controllers/EventsController.cs +++ b/src/Api/Controllers/EventsController.cs @@ -4,6 +4,7 @@ using Bit.Core.Exceptions; using Bit.Core.Models.Data; using Bit.Core.Repositories; using Bit.Core.Services; +using Bit.Core.Vault.Repositories; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/src/Api/Controllers/OrganizationExportController.cs b/src/Api/Controllers/OrganizationExportController.cs index cde9a4a150..1261b938c2 100644 --- a/src/Api/Controllers/OrganizationExportController.cs +++ b/src/Api/Controllers/OrganizationExportController.cs @@ -1,9 +1,11 @@ using Bit.Api.Models.Response; +using Bit.Api.Vault.Models.Response; using Bit.Core.Context; using Bit.Core.Entities; using Bit.Core.Services; using Bit.Core.Settings; -using Core.Models.Data; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/src/Api/Models/Request/Accounts/ImportCiphersRequestModel.cs b/src/Api/Models/Request/Accounts/ImportCiphersRequestModel.cs index 2a675fa48a..6e99d82ddc 100644 --- a/src/Api/Models/Request/Accounts/ImportCiphersRequestModel.cs +++ b/src/Api/Models/Request/Accounts/ImportCiphersRequestModel.cs @@ -1,4 +1,6 @@ -namespace Bit.Api.Models.Request.Accounts; +using Bit.Api.Vault.Models.Request; + +namespace Bit.Api.Models.Request.Accounts; public class ImportCiphersRequestModel { diff --git a/src/Api/Models/Request/Accounts/UpdateKeyRequestModel.cs b/src/Api/Models/Request/Accounts/UpdateKeyRequestModel.cs index 2064c09b9a..7ebc195551 100644 --- a/src/Api/Models/Request/Accounts/UpdateKeyRequestModel.cs +++ b/src/Api/Models/Request/Accounts/UpdateKeyRequestModel.cs @@ -1,4 +1,5 @@ using System.ComponentModel.DataAnnotations; +using Bit.Api.Vault.Models.Request; namespace Bit.Api.Models.Request.Accounts; diff --git a/src/Api/Models/Request/Organizations/ImportOrganizationCiphersRequestModel.cs b/src/Api/Models/Request/Organizations/ImportOrganizationCiphersRequestModel.cs index 3aa6ef68c2..34f765c92d 100644 --- a/src/Api/Models/Request/Organizations/ImportOrganizationCiphersRequestModel.cs +++ b/src/Api/Models/Request/Organizations/ImportOrganizationCiphersRequestModel.cs @@ -1,4 +1,6 @@ -namespace Bit.Api.Models.Request.Organizations; +using Bit.Api.Vault.Models.Request; + +namespace Bit.Api.Models.Request.Organizations; public class ImportOrganizationCiphersRequestModel { diff --git a/src/Api/Models/Response/EmergencyAccessResponseModel.cs b/src/Api/Models/Response/EmergencyAccessResponseModel.cs index 452dabf183..6edb025025 100644 --- a/src/Api/Models/Response/EmergencyAccessResponseModel.cs +++ b/src/Api/Models/Response/EmergencyAccessResponseModel.cs @@ -1,9 +1,10 @@ -using Bit.Core.Entities; +using Bit.Api.Vault.Models.Response; +using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Models.Api; using Bit.Core.Models.Data; using Bit.Core.Settings; -using Core.Models.Data; +using Bit.Core.Vault.Models.Data; namespace Bit.Api.Models.Response; diff --git a/src/Api/Models/Response/OrganizationExportResponseModel.cs b/src/Api/Models/Response/OrganizationExportResponseModel.cs index 53720b4b3a..1bfca7e3d5 100644 --- a/src/Api/Models/Response/OrganizationExportResponseModel.cs +++ b/src/Api/Models/Response/OrganizationExportResponseModel.cs @@ -1,4 +1,5 @@ -using Bit.Core.Models.Api; +using Bit.Api.Vault.Models.Response; +using Bit.Core.Models.Api; namespace Bit.Api.Models.Response; diff --git a/src/Api/Public/Controllers/EventsController.cs b/src/Api/Public/Controllers/EventsController.cs index 6e9c734c13..d2e198de17 100644 --- a/src/Api/Public/Controllers/EventsController.cs +++ b/src/Api/Public/Controllers/EventsController.cs @@ -4,6 +4,7 @@ using Bit.Api.Models.Public.Response; using Bit.Core.Context; using Bit.Core.Models.Data; using Bit.Core.Repositories; +using Bit.Core.Vault.Repositories; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/src/Api/Controllers/CiphersController.cs b/src/Api/Vault/Controllers/CiphersController.cs similarity index 99% rename from src/Api/Controllers/CiphersController.cs rename to src/Api/Vault/Controllers/CiphersController.cs index 186cec5b54..aa8aaf587c 100644 --- a/src/Api/Controllers/CiphersController.cs +++ b/src/Api/Vault/Controllers/CiphersController.cs @@ -1,24 +1,27 @@ using System.Text.Json; using Azure.Messaging.EventGrid; -using Bit.Api.Models.Request; using Bit.Api.Models.Request.Accounts; using Bit.Api.Models.Request.Organizations; using Bit.Api.Models.Response; using Bit.Api.Utilities; +using Bit.Api.Vault.Models.Request; +using Bit.Api.Vault.Models.Response; using Bit.Core; using Bit.Core.Context; using Bit.Core.Entities; using Bit.Core.Exceptions; -using Bit.Core.Models.Data; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Utilities; -using Core.Models.Data; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Repositories; +using Bit.Core.Vault.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -namespace Bit.Api.Controllers; +namespace Bit.Api.Vault.Controllers; [Route("ciphers")] [Authorize("Application")] diff --git a/src/Api/Controllers/FoldersController.cs b/src/Api/Vault/Controllers/FoldersController.cs similarity index 92% rename from src/Api/Controllers/FoldersController.cs rename to src/Api/Vault/Controllers/FoldersController.cs index b387809ecd..99a9b3e9b0 100644 --- a/src/Api/Controllers/FoldersController.cs +++ b/src/Api/Vault/Controllers/FoldersController.cs @@ -1,12 +1,14 @@ -using Bit.Api.Models.Request; -using Bit.Api.Models.Response; +using Bit.Api.Models.Response; +using Bit.Api.Vault.Models.Request; +using Bit.Api.Vault.Models.Response; using Bit.Core.Exceptions; -using Bit.Core.Repositories; using Bit.Core.Services; +using Bit.Core.Vault.Repositories; +using Bit.Core.Vault.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -namespace Bit.Api.Controllers; +namespace Bit.Api.Vault.Controllers; [Route("folders")] [Authorize("Application")] diff --git a/src/Api/Controllers/SyncController.cs b/src/Api/Vault/Controllers/SyncController.cs similarity index 97% rename from src/Api/Controllers/SyncController.cs rename to src/Api/Vault/Controllers/SyncController.cs index 949454f9cd..e16e200750 100644 --- a/src/Api/Controllers/SyncController.cs +++ b/src/Api/Vault/Controllers/SyncController.cs @@ -1,4 +1,4 @@ -using Bit.Api.Models.Response; +using Bit.Api.Vault.Models.Response; using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Enums.Provider; @@ -7,10 +7,11 @@ using Bit.Core.Models.Data; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; +using Bit.Core.Vault.Repositories; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -namespace Bit.Api.Controllers; +namespace Bit.Api.Vault.Controllers; [Route("sync")] [Authorize("Application")] diff --git a/src/Api/Models/CipherAttachmentModel.cs b/src/Api/Vault/Models/CipherAttachmentModel.cs similarity index 79% rename from src/Api/Models/CipherAttachmentModel.cs rename to src/Api/Vault/Models/CipherAttachmentModel.cs index c1ae197187..1eadfc8ef5 100644 --- a/src/Api/Models/CipherAttachmentModel.cs +++ b/src/Api/Vault/Models/CipherAttachmentModel.cs @@ -1,7 +1,7 @@ -using Bit.Core.Models.Data; -using Bit.Core.Utilities; +using Bit.Core.Utilities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Api.Models; +namespace Bit.Api.Vault.Models; public class CipherAttachmentModel { diff --git a/src/Api/Models/CipherCardModel.cs b/src/Api/Vault/Models/CipherCardModel.cs similarity index 93% rename from src/Api/Models/CipherCardModel.cs rename to src/Api/Vault/Models/CipherCardModel.cs index 07ea4d1e69..5389de321e 100644 --- a/src/Api/Models/CipherCardModel.cs +++ b/src/Api/Vault/Models/CipherCardModel.cs @@ -1,8 +1,8 @@ using System.ComponentModel.DataAnnotations; -using Bit.Core.Models.Data; using Bit.Core.Utilities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Api.Models; +namespace Bit.Api.Vault.Models; public class CipherCardModel { diff --git a/src/Api/Models/CipherFieldModel.cs b/src/Api/Vault/Models/CipherFieldModel.cs similarity index 85% rename from src/Api/Models/CipherFieldModel.cs rename to src/Api/Vault/Models/CipherFieldModel.cs index 675dcfce07..d51a766f7a 100644 --- a/src/Api/Models/CipherFieldModel.cs +++ b/src/Api/Vault/Models/CipherFieldModel.cs @@ -1,8 +1,8 @@ -using Bit.Core.Enums; -using Bit.Core.Models.Data; -using Bit.Core.Utilities; +using Bit.Core.Utilities; +using Bit.Core.Vault.Enums; +using Bit.Core.Vault.Models.Data; -namespace Bit.Api.Models; +namespace Bit.Api.Vault.Models; public class CipherFieldModel { diff --git a/src/Api/Models/CipherIdentityModel.cs b/src/Api/Vault/Models/CipherIdentityModel.cs similarity index 97% rename from src/Api/Models/CipherIdentityModel.cs rename to src/Api/Vault/Models/CipherIdentityModel.cs index 7c1fed164f..ea32bab93d 100644 --- a/src/Api/Models/CipherIdentityModel.cs +++ b/src/Api/Vault/Models/CipherIdentityModel.cs @@ -1,8 +1,8 @@ using System.ComponentModel.DataAnnotations; -using Bit.Core.Models.Data; using Bit.Core.Utilities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Api.Models; +namespace Bit.Api.Vault.Models; public class CipherIdentityModel { diff --git a/src/Api/Models/CipherLoginModel.cs b/src/Api/Vault/Models/CipherLoginModel.cs similarity index 96% rename from src/Api/Models/CipherLoginModel.cs rename to src/Api/Vault/Models/CipherLoginModel.cs index 134ca09cb5..08bdc082b2 100644 --- a/src/Api/Models/CipherLoginModel.cs +++ b/src/Api/Vault/Models/CipherLoginModel.cs @@ -1,8 +1,8 @@ using Bit.Core.Enums; -using Bit.Core.Models.Data; using Bit.Core.Utilities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Api.Models; +namespace Bit.Api.Vault.Models; public class CipherLoginModel { diff --git a/src/Api/Models/CipherPasswordHistoryModel.cs b/src/Api/Vault/Models/CipherPasswordHistoryModel.cs similarity index 91% rename from src/Api/Models/CipherPasswordHistoryModel.cs rename to src/Api/Vault/Models/CipherPasswordHistoryModel.cs index 329c2cf272..6c70acb049 100644 --- a/src/Api/Models/CipherPasswordHistoryModel.cs +++ b/src/Api/Vault/Models/CipherPasswordHistoryModel.cs @@ -1,8 +1,8 @@ using System.ComponentModel.DataAnnotations; -using Bit.Core.Models.Data; using Bit.Core.Utilities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Api.Models; +namespace Bit.Api.Vault.Models; public class CipherPasswordHistoryModel { diff --git a/src/Api/Models/CipherSecureNoteModel.cs b/src/Api/Vault/Models/CipherSecureNoteModel.cs similarity index 69% rename from src/Api/Models/CipherSecureNoteModel.cs rename to src/Api/Vault/Models/CipherSecureNoteModel.cs index 5ab35d1e84..f5dee5091b 100644 --- a/src/Api/Models/CipherSecureNoteModel.cs +++ b/src/Api/Vault/Models/CipherSecureNoteModel.cs @@ -1,7 +1,7 @@ -using Bit.Core.Enums; -using Bit.Core.Models.Data; +using Bit.Core.Vault.Enums; +using Bit.Core.Vault.Models.Data; -namespace Bit.Api.Models; +namespace Bit.Api.Vault.Models; public class CipherSecureNoteModel { diff --git a/src/Api/Models/Request/AttachmentRequestModel.cs b/src/Api/Vault/Models/Request/AttachmentRequestModel.cs similarity index 82% rename from src/Api/Models/Request/AttachmentRequestModel.cs rename to src/Api/Vault/Models/Request/AttachmentRequestModel.cs index cadeccdc04..e66cd56f29 100644 --- a/src/Api/Models/Request/AttachmentRequestModel.cs +++ b/src/Api/Vault/Models/Request/AttachmentRequestModel.cs @@ -1,4 +1,4 @@ -namespace Bit.Api.Models.Request; +namespace Bit.Api.Vault.Models.Request; public class AttachmentRequestModel { diff --git a/src/Api/Models/Request/CipherPartialRequestModel.cs b/src/Api/Vault/Models/Request/CipherPartialRequestModel.cs similarity index 83% rename from src/Api/Models/Request/CipherPartialRequestModel.cs rename to src/Api/Vault/Models/Request/CipherPartialRequestModel.cs index bc58eb4273..6232f4ecf6 100644 --- a/src/Api/Models/Request/CipherPartialRequestModel.cs +++ b/src/Api/Vault/Models/Request/CipherPartialRequestModel.cs @@ -1,6 +1,6 @@ using System.ComponentModel.DataAnnotations; -namespace Bit.Api.Models.Request; +namespace Bit.Api.Vault.Models.Request; public class CipherPartialRequestModel { diff --git a/src/Api/Models/Request/CipherRequestModel.cs b/src/Api/Vault/Models/Request/CipherRequestModel.cs similarity index 98% rename from src/Api/Models/Request/CipherRequestModel.cs rename to src/Api/Vault/Models/Request/CipherRequestModel.cs index f5f3eee422..842c99800c 100644 --- a/src/Api/Models/Request/CipherRequestModel.cs +++ b/src/Api/Vault/Models/Request/CipherRequestModel.cs @@ -1,14 +1,13 @@ using System.ComponentModel.DataAnnotations; using System.Text.Json; -using Bit.Core.Entities; -using Bit.Core.Enums; -using Bit.Core.Models.Data; using Bit.Core.Utilities; -using Core.Models.Data; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Enums; +using Bit.Core.Vault.Models.Data; using NS = Newtonsoft.Json; using NSL = Newtonsoft.Json.Linq; -namespace Bit.Api.Models.Request; +namespace Bit.Api.Vault.Models.Request; public class CipherRequestModel { diff --git a/src/Api/Models/Request/FolderRequestModel.cs b/src/Api/Vault/Models/Request/FolderRequestModel.cs similarity index 89% rename from src/Api/Models/Request/FolderRequestModel.cs rename to src/Api/Vault/Models/Request/FolderRequestModel.cs index 092b993bb5..d757c3b64d 100644 --- a/src/Api/Models/Request/FolderRequestModel.cs +++ b/src/Api/Vault/Models/Request/FolderRequestModel.cs @@ -1,8 +1,8 @@ using System.ComponentModel.DataAnnotations; -using Bit.Core.Entities; using Bit.Core.Utilities; +using Bit.Core.Vault.Entities; -namespace Bit.Api.Models.Request; +namespace Bit.Api.Vault.Models.Request; public class FolderRequestModel { diff --git a/src/Api/Models/Response/AttachmentResponseModel.cs b/src/Api/Vault/Models/Response/AttachmentResponseModel.cs similarity index 93% rename from src/Api/Models/Response/AttachmentResponseModel.cs rename to src/Api/Vault/Models/Response/AttachmentResponseModel.cs index 018cdd6504..c7e3caabb9 100644 --- a/src/Api/Models/Response/AttachmentResponseModel.cs +++ b/src/Api/Vault/Models/Response/AttachmentResponseModel.cs @@ -1,11 +1,11 @@ using System.Text.Json.Serialization; -using Bit.Core.Entities; using Bit.Core.Models.Api; -using Bit.Core.Models.Data; using Bit.Core.Settings; using Bit.Core.Utilities; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Api.Models.Response; +namespace Bit.Api.Vault.Models.Response; public class AttachmentResponseModel : ResponseModel { diff --git a/src/Api/Models/Response/AttachmentUploadDataResponseModel.cs b/src/Api/Vault/Models/Response/AttachmentUploadDataResponseModel.cs similarity index 91% rename from src/Api/Models/Response/AttachmentUploadDataResponseModel.cs rename to src/Api/Vault/Models/Response/AttachmentUploadDataResponseModel.cs index 1c9a5d2a72..9eff417769 100644 --- a/src/Api/Models/Response/AttachmentUploadDataResponseModel.cs +++ b/src/Api/Vault/Models/Response/AttachmentUploadDataResponseModel.cs @@ -1,7 +1,7 @@ using Bit.Core.Enums; using Bit.Core.Models.Api; -namespace Bit.Api.Models.Response; +namespace Bit.Api.Vault.Models.Response; public class AttachmentUploadDataResponseModel : ResponseModel { diff --git a/src/Api/Models/Response/CipherResponseModel.cs b/src/Api/Vault/Models/Response/CipherResponseModel.cs similarity index 97% rename from src/Api/Models/Response/CipherResponseModel.cs rename to src/Api/Vault/Models/Response/CipherResponseModel.cs index b0b244ff8b..e2526dea97 100644 --- a/src/Api/Models/Response/CipherResponseModel.cs +++ b/src/Api/Vault/Models/Response/CipherResponseModel.cs @@ -1,12 +1,12 @@ using System.Text.Json; using Bit.Core.Entities; -using Bit.Core.Enums; using Bit.Core.Models.Api; -using Bit.Core.Models.Data; using Bit.Core.Settings; -using Core.Models.Data; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Enums; +using Bit.Core.Vault.Models.Data; -namespace Bit.Api.Models.Response; +namespace Bit.Api.Vault.Models.Response; public class CipherMiniResponseModel : ResponseModel { diff --git a/src/Api/Models/Response/FolderResponseModel.cs b/src/Api/Vault/Models/Response/FolderResponseModel.cs similarity index 82% rename from src/Api/Models/Response/FolderResponseModel.cs rename to src/Api/Vault/Models/Response/FolderResponseModel.cs index 03971b4e3a..c1b29dfb93 100644 --- a/src/Api/Models/Response/FolderResponseModel.cs +++ b/src/Api/Vault/Models/Response/FolderResponseModel.cs @@ -1,7 +1,7 @@ -using Bit.Core.Entities; -using Bit.Core.Models.Api; +using Bit.Core.Models.Api; +using Bit.Core.Vault.Entities; -namespace Bit.Api.Models.Response; +namespace Bit.Api.Vault.Models.Response; public class FolderResponseModel : ResponseModel { diff --git a/src/Api/Models/Response/SyncResponseModel.cs b/src/Api/Vault/Models/Response/SyncResponseModel.cs similarity index 93% rename from src/Api/Models/Response/SyncResponseModel.cs rename to src/Api/Vault/Models/Response/SyncResponseModel.cs index 6d028b12f8..5aeb0e46ab 100644 --- a/src/Api/Models/Response/SyncResponseModel.cs +++ b/src/Api/Vault/Models/Response/SyncResponseModel.cs @@ -1,11 +1,13 @@ -using Bit.Core.Entities; +using Bit.Api.Models.Response; +using Bit.Core.Entities; using Bit.Core.Models.Api; using Bit.Core.Models.Data; using Bit.Core.Models.Data.Organizations.OrganizationUsers; using Bit.Core.Settings; -using Core.Models.Data; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Api.Models.Response; +namespace Bit.Api.Vault.Models.Response; public class SyncResponseModel : ResponseModel { diff --git a/src/Core/Entities/Folder.cs b/src/Core/Entities/Folder.cs index fd6d4dafa2..37a1d3c692 100644 --- a/src/Core/Entities/Folder.cs +++ b/src/Core/Entities/Folder.cs @@ -1,6 +1,7 @@ -using Bit.Core.Utilities; +using Bit.Core.Entities; +using Bit.Core.Utilities; -namespace Bit.Core.Entities; +namespace Bit.Core.Vault.Entities; public class Folder : ITableObject { diff --git a/src/Core/Models/Data/EmergencyAccessViewData.cs b/src/Core/Models/Data/EmergencyAccessViewData.cs index ef9ffb0a21..9e87e14533 100644 --- a/src/Core/Models/Data/EmergencyAccessViewData.cs +++ b/src/Core/Models/Data/EmergencyAccessViewData.cs @@ -1,5 +1,5 @@ using Bit.Core.Entities; -using Core.Models.Data; +using Bit.Core.Vault.Models.Data; namespace Bit.Core.Models.Data; diff --git a/src/Core/Repositories/IEventRepository.cs b/src/Core/Repositories/IEventRepository.cs index bac3cb5345..493c8c787d 100644 --- a/src/Core/Repositories/IEventRepository.cs +++ b/src/Core/Repositories/IEventRepository.cs @@ -1,5 +1,5 @@ -using Bit.Core.Entities; -using Bit.Core.Models.Data; +using Bit.Core.Models.Data; +using Bit.Core.Vault.Entities; namespace Bit.Core.Repositories; diff --git a/src/Core/Repositories/TableStorage/EventRepository.cs b/src/Core/Repositories/TableStorage/EventRepository.cs index 514b61099b..3822ce35dc 100644 --- a/src/Core/Repositories/TableStorage/EventRepository.cs +++ b/src/Core/Repositories/TableStorage/EventRepository.cs @@ -1,7 +1,7 @@ -using Bit.Core.Entities; -using Bit.Core.Models.Data; +using Bit.Core.Models.Data; using Bit.Core.Settings; using Bit.Core.Utilities; +using Bit.Core.Vault.Entities; using Microsoft.Azure.Cosmos.Table; namespace Bit.Core.Repositories.TableStorage; diff --git a/src/Core/Services/IAttachmentStorageService.cs b/src/Core/Services/IAttachmentStorageService.cs index 964b711f05..7c19ce321a 100644 --- a/src/Core/Services/IAttachmentStorageService.cs +++ b/src/Core/Services/IAttachmentStorageService.cs @@ -1,6 +1,7 @@ -using Bit.Core.Entities; -using Bit.Core.Enums; -using Bit.Core.Models.Data; +using Bit.Core.Enums; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; + namespace Bit.Core.Services; diff --git a/src/Core/Services/IEmergencyAccessService.cs b/src/Core/Services/IEmergencyAccessService.cs index 96edb752c5..4b6d68d7c0 100644 --- a/src/Core/Services/IEmergencyAccessService.cs +++ b/src/Core/Services/IEmergencyAccessService.cs @@ -1,6 +1,7 @@ using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Models.Data; +using Bit.Core.Vault.Models.Data; namespace Bit.Core.Services; diff --git a/src/Core/Services/IEventService.cs b/src/Core/Services/IEventService.cs index c22757f9c8..e76d08630f 100644 --- a/src/Core/Services/IEventService.cs +++ b/src/Core/Services/IEventService.cs @@ -2,6 +2,7 @@ using Bit.Core.Entities.Provider; using Bit.Core.Enums; using Bit.Core.SecretsManager.Entities; +using Bit.Core.Vault.Entities; namespace Bit.Core.Services; diff --git a/src/Core/Services/IPushNotificationService.cs b/src/Core/Services/IPushNotificationService.cs index eec8a2628e..46475bd79e 100644 --- a/src/Core/Services/IPushNotificationService.cs +++ b/src/Core/Services/IPushNotificationService.cs @@ -1,5 +1,6 @@ using Bit.Core.Entities; using Bit.Core.Enums; +using Bit.Core.Vault.Entities; namespace Bit.Core.Services; diff --git a/src/Core/Services/IUserService.cs b/src/Core/Services/IUserService.cs index fd66feed35..849be5c88c 100644 --- a/src/Core/Services/IUserService.cs +++ b/src/Core/Services/IUserService.cs @@ -3,6 +3,7 @@ using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Models; using Bit.Core.Models.Business; +using Bit.Core.Vault.Entities; using Fido2NetLib; using Microsoft.AspNetCore.Identity; diff --git a/src/Core/Services/Implementations/AzureQueuePushNotificationService.cs b/src/Core/Services/Implementations/AzureQueuePushNotificationService.cs index 6849bfbbf5..f7b8905767 100644 --- a/src/Core/Services/Implementations/AzureQueuePushNotificationService.cs +++ b/src/Core/Services/Implementations/AzureQueuePushNotificationService.cs @@ -6,6 +6,7 @@ using Bit.Core.Enums; using Bit.Core.Models; using Bit.Core.Settings; using Bit.Core.Utilities; +using Bit.Core.Vault.Entities; using Microsoft.AspNetCore.Http; namespace Bit.Core.Services; diff --git a/src/Core/Services/Implementations/EmergencyAccessService.cs b/src/Core/Services/Implementations/EmergencyAccessService.cs index f5ddf7adfa..feda05d038 100644 --- a/src/Core/Services/Implementations/EmergencyAccessService.cs +++ b/src/Core/Services/Implementations/EmergencyAccessService.cs @@ -7,6 +7,9 @@ using Bit.Core.Models.Data; using Bit.Core.Repositories; using Bit.Core.Settings; using Bit.Core.Tokens; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Repositories; +using Bit.Core.Vault.Services; using Microsoft.AspNetCore.Identity; namespace Bit.Core.Services; diff --git a/src/Core/Services/Implementations/EventService.cs b/src/Core/Services/Implementations/EventService.cs index cf74767be1..e599c1d304 100644 --- a/src/Core/Services/Implementations/EventService.cs +++ b/src/Core/Services/Implementations/EventService.cs @@ -7,6 +7,7 @@ using Bit.Core.Models.Data.Organizations; using Bit.Core.Repositories; using Bit.Core.SecretsManager.Entities; using Bit.Core.Settings; +using Bit.Core.Vault.Entities; namespace Bit.Core.Services; diff --git a/src/Core/Services/Implementations/MultiServicePushNotificationService.cs b/src/Core/Services/Implementations/MultiServicePushNotificationService.cs index 1a64829cce..53aa2601bc 100644 --- a/src/Core/Services/Implementations/MultiServicePushNotificationService.cs +++ b/src/Core/Services/Implementations/MultiServicePushNotificationService.cs @@ -3,6 +3,7 @@ using Bit.Core.Enums; using Bit.Core.Repositories; using Bit.Core.Settings; using Bit.Core.Utilities; +using Bit.Core.Vault.Entities; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; diff --git a/src/Core/Services/Implementations/NotificationHubPushNotificationService.cs b/src/Core/Services/Implementations/NotificationHubPushNotificationService.cs index e52c99878f..ed61d11c4d 100644 --- a/src/Core/Services/Implementations/NotificationHubPushNotificationService.cs +++ b/src/Core/Services/Implementations/NotificationHubPushNotificationService.cs @@ -7,6 +7,7 @@ using Bit.Core.Models; using Bit.Core.Models.Data; using Bit.Core.Repositories; using Bit.Core.Settings; +using Bit.Core.Vault.Entities; using Microsoft.AspNetCore.Http; using Microsoft.Azure.NotificationHubs; using Microsoft.Extensions.Logging; diff --git a/src/Core/Services/Implementations/NotificationsApiPushNotificationService.cs b/src/Core/Services/Implementations/NotificationsApiPushNotificationService.cs index 1242744964..7c8a3eb309 100644 --- a/src/Core/Services/Implementations/NotificationsApiPushNotificationService.cs +++ b/src/Core/Services/Implementations/NotificationsApiPushNotificationService.cs @@ -3,6 +3,7 @@ using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Models; using Bit.Core.Settings; +using Bit.Core.Vault.Entities; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; diff --git a/src/Core/Services/Implementations/RelayPushNotificationService.cs b/src/Core/Services/Implementations/RelayPushNotificationService.cs index e447071925..18a158e804 100644 --- a/src/Core/Services/Implementations/RelayPushNotificationService.cs +++ b/src/Core/Services/Implementations/RelayPushNotificationService.cs @@ -6,6 +6,7 @@ using Bit.Core.Models; using Bit.Core.Models.Api; using Bit.Core.Repositories; using Bit.Core.Settings; +using Bit.Core.Vault.Entities; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; diff --git a/src/Core/Services/Implementations/UserService.cs b/src/Core/Services/Implementations/UserService.cs index 659ace42b7..ffc32ecaa6 100644 --- a/src/Core/Services/Implementations/UserService.cs +++ b/src/Core/Services/Implementations/UserService.cs @@ -9,6 +9,8 @@ using Bit.Core.Models.Business; using Bit.Core.Repositories; using Bit.Core.Settings; using Bit.Core.Utilities; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Repositories; using Fido2NetLib; using Fido2NetLib.Objects; using Microsoft.AspNetCore.DataProtection; diff --git a/src/Core/Services/NoopImplementations/NoopEventService.cs b/src/Core/Services/NoopImplementations/NoopEventService.cs index 0f23933b77..c773c6a26e 100644 --- a/src/Core/Services/NoopImplementations/NoopEventService.cs +++ b/src/Core/Services/NoopImplementations/NoopEventService.cs @@ -2,6 +2,7 @@ using Bit.Core.Entities.Provider; using Bit.Core.Enums; using Bit.Core.SecretsManager.Entities; +using Bit.Core.Vault.Entities; namespace Bit.Core.Services; diff --git a/src/Core/Services/NoopImplementations/NoopPushNotificationService.cs b/src/Core/Services/NoopImplementations/NoopPushNotificationService.cs index efc445f694..4f9056835c 100644 --- a/src/Core/Services/NoopImplementations/NoopPushNotificationService.cs +++ b/src/Core/Services/NoopImplementations/NoopPushNotificationService.cs @@ -1,5 +1,6 @@ using Bit.Core.Entities; using Bit.Core.Enums; +using Bit.Core.Vault.Entities; namespace Bit.Core.Services; diff --git a/src/Core/Entities/Cipher.cs b/src/Core/Vault/Entities/Cipher.cs similarity index 96% rename from src/Core/Entities/Cipher.cs rename to src/Core/Vault/Entities/Cipher.cs index 186a7c5b84..4ef4a1edb3 100644 --- a/src/Core/Entities/Cipher.cs +++ b/src/Core/Vault/Entities/Cipher.cs @@ -1,8 +1,9 @@ using System.Text.Json; -using Bit.Core.Models.Data; +using Bit.Core.Entities; using Bit.Core.Utilities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Core.Entities; +namespace Bit.Core.Vault.Entities; public class Cipher : ITableObject, ICloneable { diff --git a/src/Core/Enums/CipherRepromptType.cs b/src/Core/Vault/Enums/CipherRepromptType.cs similarity index 68% rename from src/Core/Enums/CipherRepromptType.cs rename to src/Core/Vault/Enums/CipherRepromptType.cs index 3c64c19450..0e6ea3fce5 100644 --- a/src/Core/Enums/CipherRepromptType.cs +++ b/src/Core/Vault/Enums/CipherRepromptType.cs @@ -1,4 +1,4 @@ -namespace Bit.Core.Enums; +namespace Bit.Core.Vault.Enums; public enum CipherRepromptType : byte { diff --git a/src/Core/Enums/CipherStateAction.cs b/src/Core/Vault/Enums/CipherStateAction.cs similarity index 69% rename from src/Core/Enums/CipherStateAction.cs rename to src/Core/Vault/Enums/CipherStateAction.cs index 926c8b06c7..adbc78c06c 100644 --- a/src/Core/Enums/CipherStateAction.cs +++ b/src/Core/Vault/Enums/CipherStateAction.cs @@ -1,4 +1,4 @@ -namespace Bit.Core.Enums; +namespace Bit.Core.Vault.Enums; public enum CipherStateAction { diff --git a/src/Core/Enums/CipherType.cs b/src/Core/Vault/Enums/CipherType.cs similarity index 80% rename from src/Core/Enums/CipherType.cs rename to src/Core/Vault/Enums/CipherType.cs index d9f37bcbc6..c5a61043d3 100644 --- a/src/Core/Enums/CipherType.cs +++ b/src/Core/Vault/Enums/CipherType.cs @@ -1,4 +1,4 @@ -namespace Bit.Core.Enums; +namespace Bit.Core.Vault.Enums; public enum CipherType : byte { diff --git a/src/Core/Enums/FieldType.cs b/src/Core/Vault/Enums/FieldType.cs similarity index 73% rename from src/Core/Enums/FieldType.cs rename to src/Core/Vault/Enums/FieldType.cs index 4642b63a81..0c9c140b34 100644 --- a/src/Core/Enums/FieldType.cs +++ b/src/Core/Vault/Enums/FieldType.cs @@ -1,4 +1,4 @@ -namespace Bit.Core.Enums; +namespace Bit.Core.Vault.Enums; public enum FieldType : byte { diff --git a/src/Core/Enums/SecureNoteType.cs b/src/Core/Vault/Enums/SecureNoteType.cs similarity index 61% rename from src/Core/Enums/SecureNoteType.cs rename to src/Core/Vault/Enums/SecureNoteType.cs index cdd565e7c1..60de849053 100644 --- a/src/Core/Enums/SecureNoteType.cs +++ b/src/Core/Vault/Enums/SecureNoteType.cs @@ -1,4 +1,4 @@ -namespace Bit.Core.Enums; +namespace Bit.Core.Vault.Enums; public enum SecureNoteType : byte { diff --git a/src/Core/Models/Data/AttachmentResponseData.cs b/src/Core/Vault/Models/Data/AttachmentResponseData.cs similarity index 74% rename from src/Core/Models/Data/AttachmentResponseData.cs rename to src/Core/Vault/Models/Data/AttachmentResponseData.cs index f45125c3d6..ecb1404912 100644 --- a/src/Core/Models/Data/AttachmentResponseData.cs +++ b/src/Core/Vault/Models/Data/AttachmentResponseData.cs @@ -1,6 +1,6 @@ -using Bit.Core.Entities; +using Bit.Core.Vault.Entities; -namespace Bit.Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public class AttachmentResponseData { diff --git a/src/Core/Models/Data/CipherAttachment.cs b/src/Core/Vault/Models/Data/CipherAttachment.cs similarity index 96% rename from src/Core/Models/Data/CipherAttachment.cs rename to src/Core/Vault/Models/Data/CipherAttachment.cs index 62b46335ae..78817aeb71 100644 --- a/src/Core/Models/Data/CipherAttachment.cs +++ b/src/Core/Vault/Models/Data/CipherAttachment.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Bit.Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public class CipherAttachment { diff --git a/src/Core/Models/Data/CipherCardData.cs b/src/Core/Vault/Models/Data/CipherCardData.cs similarity index 88% rename from src/Core/Models/Data/CipherCardData.cs rename to src/Core/Vault/Models/Data/CipherCardData.cs index fdfc604dae..72a60176f2 100644 --- a/src/Core/Models/Data/CipherCardData.cs +++ b/src/Core/Vault/Models/Data/CipherCardData.cs @@ -1,4 +1,4 @@ -namespace Bit.Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public class CipherCardData : CipherData { diff --git a/src/Core/Models/Data/CipherData.cs b/src/Core/Vault/Models/Data/CipherData.cs similarity index 87% rename from src/Core/Models/Data/CipherData.cs rename to src/Core/Vault/Models/Data/CipherData.cs index 9881ed6ba1..459ee0d739 100644 --- a/src/Core/Models/Data/CipherData.cs +++ b/src/Core/Vault/Models/Data/CipherData.cs @@ -1,4 +1,4 @@ -namespace Bit.Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public abstract class CipherData { diff --git a/src/Core/Models/Data/CipherDetails.cs b/src/Core/Vault/Models/Data/CipherDetails.cs similarity index 84% rename from src/Core/Models/Data/CipherDetails.cs rename to src/Core/Vault/Models/Data/CipherDetails.cs index 21a636bf76..dfb3169494 100644 --- a/src/Core/Models/Data/CipherDetails.cs +++ b/src/Core/Vault/Models/Data/CipherDetails.cs @@ -1,4 +1,4 @@ -namespace Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public class CipherDetails : CipherOrganizationDetails { diff --git a/src/Core/Models/Data/CipherFieldData.cs b/src/Core/Vault/Models/Data/CipherFieldData.cs similarity index 76% rename from src/Core/Models/Data/CipherFieldData.cs rename to src/Core/Vault/Models/Data/CipherFieldData.cs index 748a478cf9..b7969b11a2 100644 --- a/src/Core/Models/Data/CipherFieldData.cs +++ b/src/Core/Vault/Models/Data/CipherFieldData.cs @@ -1,6 +1,6 @@ -using Bit.Core.Enums; +using Bit.Core.Vault.Enums; -namespace Bit.Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public class CipherFieldData { diff --git a/src/Core/Models/Data/CipherIdentityData.cs b/src/Core/Vault/Models/Data/CipherIdentityData.cs similarity index 95% rename from src/Core/Models/Data/CipherIdentityData.cs rename to src/Core/Vault/Models/Data/CipherIdentityData.cs index 19773424a3..9a8b2811ae 100644 --- a/src/Core/Models/Data/CipherIdentityData.cs +++ b/src/Core/Vault/Models/Data/CipherIdentityData.cs @@ -1,4 +1,4 @@ -namespace Bit.Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public class CipherIdentityData : CipherData { diff --git a/src/Core/Models/Data/CipherLoginData.cs b/src/Core/Vault/Models/Data/CipherLoginData.cs similarity index 95% rename from src/Core/Models/Data/CipherLoginData.cs rename to src/Core/Vault/Models/Data/CipherLoginData.cs index d266d7786b..223f85ef2b 100644 --- a/src/Core/Models/Data/CipherLoginData.cs +++ b/src/Core/Vault/Models/Data/CipherLoginData.cs @@ -1,6 +1,6 @@ using Bit.Core.Enums; -namespace Bit.Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public class CipherLoginData : CipherData { diff --git a/src/Core/Models/Data/CipherOrganizationDetails.cs b/src/Core/Vault/Models/Data/CipherOrganizationDetails.cs similarity index 59% rename from src/Core/Models/Data/CipherOrganizationDetails.cs rename to src/Core/Vault/Models/Data/CipherOrganizationDetails.cs index d2717b30fa..d1571b7448 100644 --- a/src/Core/Models/Data/CipherOrganizationDetails.cs +++ b/src/Core/Vault/Models/Data/CipherOrganizationDetails.cs @@ -1,6 +1,6 @@ -using Bit.Core.Entities; +using Bit.Core.Vault.Entities; -namespace Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public class CipherOrganizationDetails : Cipher { diff --git a/src/Core/Models/Data/CipherPasswordHistoryData.cs b/src/Core/Vault/Models/Data/CipherPasswordHistoryData.cs similarity index 81% rename from src/Core/Models/Data/CipherPasswordHistoryData.cs rename to src/Core/Vault/Models/Data/CipherPasswordHistoryData.cs index 3ea5edab40..3cac41f416 100644 --- a/src/Core/Models/Data/CipherPasswordHistoryData.cs +++ b/src/Core/Vault/Models/Data/CipherPasswordHistoryData.cs @@ -1,4 +1,4 @@ -namespace Bit.Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public class CipherPasswordHistoryData { diff --git a/src/Core/Models/Data/CipherSecureNoteData.cs b/src/Core/Vault/Models/Data/CipherSecureNoteData.cs similarity index 66% rename from src/Core/Models/Data/CipherSecureNoteData.cs rename to src/Core/Vault/Models/Data/CipherSecureNoteData.cs index 88b7384cd7..db70a940da 100644 --- a/src/Core/Models/Data/CipherSecureNoteData.cs +++ b/src/Core/Vault/Models/Data/CipherSecureNoteData.cs @@ -1,6 +1,6 @@ -using Bit.Core.Enums; +using Bit.Core.Vault.Enums; -namespace Bit.Core.Models.Data; +namespace Bit.Core.Vault.Models.Data; public class CipherSecureNoteData : CipherData { diff --git a/src/Core/Repositories/ICipherRepository.cs b/src/Core/Vault/Repositories/ICipherRepository.cs similarity index 94% rename from src/Core/Repositories/ICipherRepository.cs rename to src/Core/Vault/Repositories/ICipherRepository.cs index 56f7619350..4ffd2545d3 100644 --- a/src/Core/Repositories/ICipherRepository.cs +++ b/src/Core/Vault/Repositories/ICipherRepository.cs @@ -1,8 +1,9 @@ using Bit.Core.Entities; -using Bit.Core.Models.Data; -using Core.Models.Data; +using Bit.Core.Repositories; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Core.Repositories; +namespace Bit.Core.Vault.Repositories; public interface ICipherRepository : IRepository { diff --git a/src/Core/Repositories/IFolderRepository.cs b/src/Core/Vault/Repositories/IFolderRepository.cs similarity index 64% rename from src/Core/Repositories/IFolderRepository.cs rename to src/Core/Vault/Repositories/IFolderRepository.cs index b93ca097b6..3b7c2f77f1 100644 --- a/src/Core/Repositories/IFolderRepository.cs +++ b/src/Core/Vault/Repositories/IFolderRepository.cs @@ -1,6 +1,7 @@ -using Bit.Core.Entities; +using Bit.Core.Repositories; +using Bit.Core.Vault.Entities; -namespace Bit.Core.Repositories; +namespace Bit.Core.Vault.Repositories; public interface IFolderRepository : IRepository { diff --git a/src/Core/Services/ICipherService.cs b/src/Core/Vault/Services/ICipherService.cs similarity index 96% rename from src/Core/Services/ICipherService.cs rename to src/Core/Vault/Services/ICipherService.cs index ad93990c2d..165be9a590 100644 --- a/src/Core/Services/ICipherService.cs +++ b/src/Core/Vault/Services/ICipherService.cs @@ -1,8 +1,8 @@ using Bit.Core.Entities; -using Bit.Core.Models.Data; -using Core.Models.Data; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Core.Services; +namespace Bit.Core.Vault.Services; public interface ICipherService { diff --git a/src/Core/Services/Implementations/AzureAttachmentStorageService.cs b/src/Core/Vault/Services/Implementations/AzureAttachmentStorageService.cs similarity index 98% rename from src/Core/Services/Implementations/AzureAttachmentStorageService.cs rename to src/Core/Vault/Services/Implementations/AzureAttachmentStorageService.cs index edc35e03a3..20e4816662 100644 --- a/src/Core/Services/Implementations/AzureAttachmentStorageService.cs +++ b/src/Core/Vault/Services/Implementations/AzureAttachmentStorageService.cs @@ -1,13 +1,14 @@ using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Azure.Storage.Sas; -using Bit.Core.Entities; using Bit.Core.Enums; -using Bit.Core.Models.Data; +using Bit.Core.Services; using Bit.Core.Settings; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; using Microsoft.Extensions.Logging; -namespace Bit.Core.Services; +namespace Bit.Core.Vault.Services; public class AzureAttachmentStorageService : IAttachmentStorageService { diff --git a/src/Core/Services/Implementations/CipherService.cs b/src/Core/Vault/Services/Implementations/CipherService.cs similarity index 97% rename from src/Core/Services/Implementations/CipherService.cs rename to src/Core/Vault/Services/Implementations/CipherService.cs index 21bb4a8579..ed1b8e85b5 100644 --- a/src/Core/Services/Implementations/CipherService.cs +++ b/src/Core/Vault/Services/Implementations/CipherService.cs @@ -4,13 +4,15 @@ using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Exceptions; using Bit.Core.Models.Business; -using Bit.Core.Models.Data; using Bit.Core.Repositories; +using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Utilities; -using Core.Models.Data; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Repositories; -namespace Bit.Core.Services; +namespace Bit.Core.Vault.Services; public class CipherService : ICipherService { @@ -90,7 +92,7 @@ public class CipherService : ICipherService { await _cipherRepository.CreateAsync(cipher); } - await _eventService.LogCipherEventAsync(cipher, Enums.EventType.Cipher_Created); + await _eventService.LogCipherEventAsync(cipher, Bit.Core.Enums.EventType.Cipher_Created); // push await _pushService.PushSyncCipherCreateAsync(cipher, null); @@ -100,7 +102,7 @@ public class CipherService : ICipherService ValidateCipherLastKnownRevisionDateAsync(cipher, lastKnownRevisionDate); cipher.RevisionDate = DateTime.UtcNow; await _cipherRepository.ReplaceAsync(cipher); - await _eventService.LogCipherEventAsync(cipher, Enums.EventType.Cipher_Updated); + await _eventService.LogCipherEventAsync(cipher, Bit.Core.Enums.EventType.Cipher_Updated); // push await _pushService.PushSyncCipherUpdateAsync(cipher, collectionIds); @@ -138,7 +140,7 @@ public class CipherService : ICipherService } await _cipherRepository.CreateAsync(cipher); } - await _eventService.LogCipherEventAsync(cipher, Enums.EventType.Cipher_Created); + await _eventService.LogCipherEventAsync(cipher, Bit.Core.Enums.EventType.Cipher_Created); if (cipher.OrganizationId.HasValue) { @@ -154,7 +156,7 @@ public class CipherService : ICipherService ValidateCipherLastKnownRevisionDateAsync(cipher, lastKnownRevisionDate); cipher.RevisionDate = DateTime.UtcNow; await _cipherRepository.ReplaceAsync(cipher); - await _eventService.LogCipherEventAsync(cipher, Enums.EventType.Cipher_Updated); + await _eventService.LogCipherEventAsync(cipher, Bit.Core.Enums.EventType.Cipher_Updated); // push await _pushService.PushSyncCipherUpdateAsync(cipher, collectionIds); @@ -236,7 +238,7 @@ public class CipherService : ICipherService }; await _cipherRepository.UpdateAttachmentAsync(attachment); - await _eventService.LogCipherEventAsync(cipher, Enums.EventType.Cipher_AttachmentCreated); + await _eventService.LogCipherEventAsync(cipher, Bit.Core.Enums.EventType.Cipher_AttachmentCreated); cipher.AddAttachment(attachmentId, data); if (!await ValidateCipherAttachmentFile(cipher, data)) @@ -436,7 +438,7 @@ public class CipherService : ICipherService throw new NotFoundException(); } await _cipherRepository.DeleteByOrganizationIdAsync(organizationId); - await _eventService.LogOrganizationEventAsync(org, Enums.EventType.Organization_PurgedVault); + await _eventService.LogOrganizationEventAsync(org, Bit.Core.Enums.EventType.Organization_PurgedVault); } public async Task MoveManyAsync(IEnumerable cipherIds, Guid? destinationFolderId, Guid movingUserId) @@ -505,7 +507,7 @@ public class CipherService : ICipherService } updatedCipher = true; - await _eventService.LogCipherEventAsync(cipher, Enums.EventType.Cipher_Shared); + await _eventService.LogCipherEventAsync(cipher, Bit.Core.Enums.EventType.Cipher_Shared); if (hasOldAttachments) { @@ -614,7 +616,7 @@ public class CipherService : ICipherService await _collectionCipherRepository.UpdateCollectionsAsync(cipher.Id, savingUserId, collectionIds); } - await _eventService.LogCipherEventAsync(cipher, Enums.EventType.Cipher_UpdatedCollections); + await _eventService.LogCipherEventAsync(cipher, Bit.Core.Enums.EventType.Cipher_UpdatedCollections); // push await _pushService.PushSyncCipherUpdateAsync(cipher, collectionIds); @@ -913,7 +915,7 @@ public class CipherService : ICipherService await _cipherRepository.DeleteAttachmentAsync(cipher.Id, attachmentData.AttachmentId); cipher.DeleteAttachment(attachmentData.AttachmentId); await _attachmentStorageService.DeleteAttachmentAsync(cipher.Id, attachmentData); - await _eventService.LogCipherEventAsync(cipher, Enums.EventType.Cipher_AttachmentDeleted); + await _eventService.LogCipherEventAsync(cipher, Bit.Core.Enums.EventType.Cipher_AttachmentDeleted); // push await _pushService.PushSyncCipherUpdateAsync(cipher, null); diff --git a/src/Core/Services/Implementations/LocalAttachmentStorageService.cs b/src/Core/Vault/Services/Implementations/LocalAttachmentStorageService.cs similarity index 97% rename from src/Core/Services/Implementations/LocalAttachmentStorageService.cs rename to src/Core/Vault/Services/Implementations/LocalAttachmentStorageService.cs index 4949ff3128..ac3c4a796d 100644 --- a/src/Core/Services/Implementations/LocalAttachmentStorageService.cs +++ b/src/Core/Vault/Services/Implementations/LocalAttachmentStorageService.cs @@ -1,9 +1,10 @@ -using Bit.Core.Entities; -using Bit.Core.Enums; -using Bit.Core.Models.Data; +using Bit.Core.Enums; +using Bit.Core.Services; using Bit.Core.Settings; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Core.Services; +namespace Bit.Core.Vault.Services; public class LocalAttachmentStorageService : IAttachmentStorageService { diff --git a/src/Core/Services/NoopImplementations/NoopAttachmentStorageService.cs b/src/Core/Vault/Services/NoopImplementations/NoopAttachmentStorageService.cs similarity index 92% rename from src/Core/Services/NoopImplementations/NoopAttachmentStorageService.cs rename to src/Core/Vault/Services/NoopImplementations/NoopAttachmentStorageService.cs index 24f669c366..6e6379d5b3 100644 --- a/src/Core/Services/NoopImplementations/NoopAttachmentStorageService.cs +++ b/src/Core/Vault/Services/NoopImplementations/NoopAttachmentStorageService.cs @@ -1,8 +1,9 @@ -using Bit.Core.Entities; -using Bit.Core.Enums; -using Bit.Core.Models.Data; +using Bit.Core.Enums; +using Bit.Core.Services; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; -namespace Bit.Core.Services; +namespace Bit.Core.Vault.Services; public class NoopAttachmentStorageService : IAttachmentStorageService { diff --git a/src/Events/Controllers/CollectController.cs b/src/Events/Controllers/CollectController.cs index 9a8d81bdf6..a2bef7a7df 100644 --- a/src/Events/Controllers/CollectController.cs +++ b/src/Events/Controllers/CollectController.cs @@ -1,8 +1,9 @@ using Bit.Core.Context; -using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Repositories; using Bit.Core.Services; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Repositories; using Bit.Events.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/src/Infrastructure.Dapper/DapperServiceCollectionExtensions.cs b/src/Infrastructure.Dapper/DapperServiceCollectionExtensions.cs index 44e67f261b..5a1b552e4e 100644 --- a/src/Infrastructure.Dapper/DapperServiceCollectionExtensions.cs +++ b/src/Infrastructure.Dapper/DapperServiceCollectionExtensions.cs @@ -1,7 +1,9 @@ using Bit.Core.Repositories; using Bit.Core.SecretsManager.Repositories; +using Bit.Core.Vault.Repositories; using Bit.Infrastructure.Dapper.Repositories; using Bit.Infrastructure.Dapper.SecretsManager.Repositories; +using Bit.Infrastructure.Dapper.Vault.Repositories; using Microsoft.Extensions.DependencyInjection; namespace Bit.Infrastructure.Dapper; diff --git a/src/Infrastructure.Dapper/Repositories/EventRepository.cs b/src/Infrastructure.Dapper/Repositories/EventRepository.cs index 97a2b7d9d0..1c5b805c4c 100644 --- a/src/Infrastructure.Dapper/Repositories/EventRepository.cs +++ b/src/Infrastructure.Dapper/Repositories/EventRepository.cs @@ -3,6 +3,7 @@ using Bit.Core.Entities; using Bit.Core.Models.Data; using Bit.Core.Repositories; using Bit.Core.Settings; +using Bit.Core.Vault.Entities; using Dapper; using Microsoft.Data.SqlClient; diff --git a/src/Infrastructure.Dapper/Repositories/CipherRepository.cs b/src/Infrastructure.Dapper/Vault/Repositories/CipherRepository.cs similarity index 99% rename from src/Infrastructure.Dapper/Repositories/CipherRepository.cs rename to src/Infrastructure.Dapper/Vault/Repositories/CipherRepository.cs index 8045aaf660..aa2d124454 100644 --- a/src/Infrastructure.Dapper/Repositories/CipherRepository.cs +++ b/src/Infrastructure.Dapper/Vault/Repositories/CipherRepository.cs @@ -1,14 +1,15 @@ using System.Data; using System.Text.Json; using Bit.Core.Entities; -using Bit.Core.Models.Data; -using Bit.Core.Repositories; using Bit.Core.Settings; -using Core.Models.Data; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Repositories; +using Bit.Infrastructure.Dapper.Repositories; using Dapper; using Microsoft.Data.SqlClient; -namespace Bit.Infrastructure.Dapper.Repositories; +namespace Bit.Infrastructure.Dapper.Vault.Repositories; public class CipherRepository : Repository, ICipherRepository { diff --git a/src/Infrastructure.Dapper/Repositories/FolderRepository.cs b/src/Infrastructure.Dapper/Vault/Repositories/FolderRepository.cs similarity index 87% rename from src/Infrastructure.Dapper/Repositories/FolderRepository.cs rename to src/Infrastructure.Dapper/Vault/Repositories/FolderRepository.cs index 6055e28725..1703b969a1 100644 --- a/src/Infrastructure.Dapper/Repositories/FolderRepository.cs +++ b/src/Infrastructure.Dapper/Vault/Repositories/FolderRepository.cs @@ -1,11 +1,12 @@ using System.Data; -using Bit.Core.Entities; -using Bit.Core.Repositories; using Bit.Core.Settings; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Repositories; +using Bit.Infrastructure.Dapper.Repositories; using Dapper; using Microsoft.Data.SqlClient; -namespace Bit.Infrastructure.Dapper.Repositories; +namespace Bit.Infrastructure.Dapper.Vault.Repositories; public class FolderRepository : Repository, IFolderRepository { diff --git a/src/Infrastructure.EntityFramework/EntityFrameworkServiceCollectionExtensions.cs b/src/Infrastructure.EntityFramework/EntityFrameworkServiceCollectionExtensions.cs index 2ec4fca7e8..a058e6fb36 100644 --- a/src/Infrastructure.EntityFramework/EntityFrameworkServiceCollectionExtensions.cs +++ b/src/Infrastructure.EntityFramework/EntityFrameworkServiceCollectionExtensions.cs @@ -1,8 +1,10 @@ using Bit.Core.Enums; using Bit.Core.Repositories; using Bit.Core.SecretsManager.Repositories; +using Bit.Core.Vault.Repositories; using Bit.Infrastructure.EntityFramework.Repositories; using Bit.Infrastructure.EntityFramework.SecretsManager.Repositories; +using Bit.Infrastructure.EntityFramework.Vault.Repositories; using LinqToDB.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; diff --git a/src/Infrastructure.EntityFramework/Models/CollectionCipher.cs b/src/Infrastructure.EntityFramework/Models/CollectionCipher.cs index 93d1deae1f..4058ddc030 100644 --- a/src/Infrastructure.EntityFramework/Models/CollectionCipher.cs +++ b/src/Infrastructure.EntityFramework/Models/CollectionCipher.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Bit.Infrastructure.EntityFramework.Vault.Models; namespace Bit.Infrastructure.EntityFramework.Models; diff --git a/src/Infrastructure.EntityFramework/Models/Folder.cs b/src/Infrastructure.EntityFramework/Models/Folder.cs deleted file mode 100644 index 4668337858..0000000000 --- a/src/Infrastructure.EntityFramework/Models/Folder.cs +++ /dev/null @@ -1,16 +0,0 @@ -using AutoMapper; - -namespace Bit.Infrastructure.EntityFramework.Models; - -public class Folder : Core.Entities.Folder -{ - public virtual User User { get; set; } -} - -public class FolderMapperProfile : Profile -{ - public FolderMapperProfile() - { - CreateMap().ReverseMap(); - } -} diff --git a/src/Infrastructure.EntityFramework/Models/Organization.cs b/src/Infrastructure.EntityFramework/Models/Organization.cs index fca548545c..a94802c900 100644 --- a/src/Infrastructure.EntityFramework/Models/Organization.cs +++ b/src/Infrastructure.EntityFramework/Models/Organization.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Bit.Infrastructure.EntityFramework.Vault.Models; namespace Bit.Infrastructure.EntityFramework.Models; diff --git a/src/Infrastructure.EntityFramework/Models/User.cs b/src/Infrastructure.EntityFramework/Models/User.cs index 6c06c1946b..02aa5f3eea 100644 --- a/src/Infrastructure.EntityFramework/Models/User.cs +++ b/src/Infrastructure.EntityFramework/Models/User.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Bit.Infrastructure.EntityFramework.Vault.Models; namespace Bit.Infrastructure.EntityFramework.Models; diff --git a/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs b/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs index e782960d89..be6a46af6b 100644 --- a/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs +++ b/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs @@ -2,6 +2,7 @@ using Bit.Infrastructure.EntityFramework.Converters; using Bit.Infrastructure.EntityFramework.Models; using Bit.Infrastructure.EntityFramework.SecretsManager.Models; +using Bit.Infrastructure.EntityFramework.Vault.Models; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; diff --git a/src/Infrastructure.EntityFramework/Repositories/EventRepository.cs b/src/Infrastructure.EntityFramework/Repositories/EventRepository.cs index cb49f8535e..a2e56b3700 100644 --- a/src/Infrastructure.EntityFramework/Repositories/EventRepository.cs +++ b/src/Infrastructure.EntityFramework/Repositories/EventRepository.cs @@ -6,7 +6,7 @@ using Bit.Infrastructure.EntityFramework.Repositories.Queries; using LinqToDB.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; -using Cipher = Bit.Core.Entities.Cipher; +using Cipher = Bit.Core.Vault.Entities.Cipher; namespace Bit.Infrastructure.EntityFramework.Repositories; diff --git a/src/Infrastructure.EntityFramework/Repositories/Queries/EventReadPageByCipherIdQuery.cs b/src/Infrastructure.EntityFramework/Repositories/Queries/EventReadPageByCipherIdQuery.cs index 570f3a2494..e6a486d334 100644 --- a/src/Infrastructure.EntityFramework/Repositories/Queries/EventReadPageByCipherIdQuery.cs +++ b/src/Infrastructure.EntityFramework/Repositories/Queries/EventReadPageByCipherIdQuery.cs @@ -1,5 +1,5 @@ -using Bit.Core.Entities; -using Bit.Core.Models.Data; +using Bit.Core.Models.Data; +using Bit.Core.Vault.Entities; using Event = Bit.Infrastructure.EntityFramework.Models.Event; namespace Bit.Infrastructure.EntityFramework.Repositories.Queries; diff --git a/src/Infrastructure.EntityFramework/Repositories/Queries/UserCipherDetailsQuery.cs b/src/Infrastructure.EntityFramework/Repositories/Queries/UserCipherDetailsQuery.cs index dd03533045..25b8192ff7 100644 --- a/src/Infrastructure.EntityFramework/Repositories/Queries/UserCipherDetailsQuery.cs +++ b/src/Infrastructure.EntityFramework/Repositories/Queries/UserCipherDetailsQuery.cs @@ -1,6 +1,7 @@ using System.Text.Json; using Bit.Core.Enums; -using Core.Models.Data; +using Bit.Core.Vault.Models.Data; +using Bit.Infrastructure.EntityFramework.Vault.Models; namespace Bit.Infrastructure.EntityFramework.Repositories.Queries; @@ -76,7 +77,7 @@ public class UserCipherDetailsQuery : IQuery return union; } - private static Guid? GetFolderId(Guid? userId, Models.Cipher cipher) + private static Guid? GetFolderId(Guid? userId, Cipher cipher) { if (userId.HasValue && !string.IsNullOrWhiteSpace(cipher.Folders)) { diff --git a/src/Infrastructure.EntityFramework/Models/Cipher.cs b/src/Infrastructure.EntityFramework/Vault/Models/Cipher.cs similarity index 57% rename from src/Infrastructure.EntityFramework/Models/Cipher.cs rename to src/Infrastructure.EntityFramework/Vault/Models/Cipher.cs index ec5ddc53d0..6a316911ab 100644 --- a/src/Infrastructure.EntityFramework/Models/Cipher.cs +++ b/src/Infrastructure.EntityFramework/Vault/Models/Cipher.cs @@ -1,8 +1,9 @@ using AutoMapper; +using Bit.Infrastructure.EntityFramework.Models; -namespace Bit.Infrastructure.EntityFramework.Models; +namespace Bit.Infrastructure.EntityFramework.Vault.Models; -public class Cipher : Core.Entities.Cipher +public class Cipher : Core.Vault.Entities.Cipher { public virtual User User { get; set; } public virtual Organization Organization { get; set; } @@ -13,6 +14,6 @@ public class CipherMapperProfile : Profile { public CipherMapperProfile() { - CreateMap().ReverseMap(); + CreateMap().ReverseMap(); } } diff --git a/src/Infrastructure.EntityFramework/Vault/Models/Folder.cs b/src/Infrastructure.EntityFramework/Vault/Models/Folder.cs new file mode 100644 index 0000000000..e27161384e --- /dev/null +++ b/src/Infrastructure.EntityFramework/Vault/Models/Folder.cs @@ -0,0 +1,17 @@ +using AutoMapper; +using Bit.Infrastructure.EntityFramework.Models; + +namespace Bit.Infrastructure.EntityFramework.Vault.Models; + +public class Folder : Core.Vault.Entities.Folder +{ + public virtual User User { get; set; } +} + +public class FolderMapperProfile : Profile +{ + public FolderMapperProfile() + { + CreateMap().ReverseMap(); + } +} diff --git a/src/Infrastructure.EntityFramework/Repositories/CipherRepository.cs b/src/Infrastructure.EntityFramework/Vault/Repositories/CipherRepository.cs similarity index 94% rename from src/Infrastructure.EntityFramework/Repositories/CipherRepository.cs rename to src/Infrastructure.EntityFramework/Vault/Repositories/CipherRepository.cs index 49b407018c..a435859daa 100644 --- a/src/Infrastructure.EntityFramework/Repositories/CipherRepository.cs +++ b/src/Infrastructure.EntityFramework/Vault/Repositories/CipherRepository.cs @@ -1,11 +1,15 @@ using AutoMapper; using Bit.Core.Enums; -using Bit.Core.Models.Data; -using Bit.Core.Repositories; using Bit.Core.Utilities; +using Bit.Core.Vault.Enums; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Repositories; using Bit.Infrastructure.EntityFramework.Models; +using Bit.Infrastructure.EntityFramework.Repositories; using Bit.Infrastructure.EntityFramework.Repositories.Queries; -using Core.Models.Data; +using Bit.Infrastructure.EntityFramework.Repositories.Vault.Queries; +using Bit.Infrastructure.EntityFramework.Vault.Models; +using Bit.Infrastructure.EntityFramework.Vault.Repositories.Queries; using LinqToDB.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; @@ -13,15 +17,15 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using User = Bit.Core.Entities.User; -namespace Bit.Infrastructure.EntityFramework.Repositories; +namespace Bit.Infrastructure.EntityFramework.Vault.Repositories; -public class CipherRepository : Repository, ICipherRepository +public class CipherRepository : Repository, ICipherRepository { public CipherRepository(IServiceScopeFactory serviceScopeFactory, IMapper mapper) : base(serviceScopeFactory, mapper, (DatabaseContext context) => context.Ciphers) { } - public override async Task CreateAsync(Core.Entities.Cipher cipher) + public override async Task CreateAsync(Core.Vault.Entities.Cipher cipher) { cipher = await base.CreateAsync(cipher); using (var scope = ServiceScopeFactory.CreateScope()) @@ -40,7 +44,7 @@ public class CipherRepository : Repository, return cipher; } - public override async Task DeleteAsync(Core.Entities.Cipher cipher) + public override async Task DeleteAsync(Core.Vault.Entities.Cipher cipher) { using (var scope = ServiceScopeFactory.CreateScope()) { @@ -74,7 +78,7 @@ public class CipherRepository : Repository, } } - public async Task CreateAsync(Core.Entities.Cipher cipher, IEnumerable collectionIds) + public async Task CreateAsync(Core.Vault.Entities.Cipher cipher, IEnumerable collectionIds) { cipher = await CreateAsync(cipher); using (var scope = ServiceScopeFactory.CreateScope()) @@ -105,7 +109,7 @@ public class CipherRepository : Repository, cipher.Folders = cipher.FolderId.HasValue ? $"{{{userIdKey}:\"{cipher.FolderId}\"}}" : null; - var entity = Mapper.Map((Core.Entities.Cipher)cipher); + var entity = Mapper.Map((Core.Vault.Entities.Cipher)cipher); await dbContext.AddAsync(entity); if (cipher.OrganizationId.HasValue) @@ -134,7 +138,7 @@ public class CipherRepository : Repository, } } - public async Task CreateAsync(IEnumerable ciphers, IEnumerable folders) + public async Task CreateAsync(IEnumerable ciphers, IEnumerable folders) { if (!ciphers.Any()) { @@ -153,7 +157,7 @@ public class CipherRepository : Repository, } } - public async Task CreateAsync(IEnumerable ciphers, IEnumerable collections, IEnumerable collectionCiphers) + public async Task CreateAsync(IEnumerable ciphers, IEnumerable collections, IEnumerable collectionCiphers) { if (!ciphers.Any()) { @@ -317,14 +321,14 @@ public class CipherRepository : Repository, } } - public async Task> GetManyByOrganizationIdAsync(Guid organizationId) + public async Task> GetManyByOrganizationIdAsync(Guid organizationId) { using (var scope = ServiceScopeFactory.CreateScope()) { var dbContext = GetDatabaseContext(scope); var query = dbContext.Ciphers.Where(x => !x.UserId.HasValue && x.OrganizationId == organizationId); var data = await query.ToListAsync(); - return Mapper.Map>(data); + return Mapper.Map>(data); } } @@ -465,7 +469,7 @@ public class CipherRepository : Repository, cipher.Favorites = JsonConvert.SerializeObject(folders); } } - var mappedEntity = Mapper.Map((Core.Entities.Cipher)cipher); + var mappedEntity = Mapper.Map((Core.Vault.Entities.Cipher)cipher); dbContext.Entry(entity).CurrentValues.SetValues(mappedEntity); if (cipher.OrganizationId.HasValue) @@ -545,7 +549,7 @@ public class CipherRepository : Repository, return 0; } - public async Task ReplaceAsync(Core.Entities.Cipher cipher, IEnumerable collectionIds) + public async Task ReplaceAsync(Core.Vault.Entities.Cipher cipher, IEnumerable collectionIds) { using (var scope = ServiceScopeFactory.CreateScope()) { @@ -714,7 +718,7 @@ public class CipherRepository : Repository, } } - public async Task UpdateCiphersAsync(Guid userId, IEnumerable ciphers) + public async Task UpdateCiphersAsync(Guid userId, IEnumerable ciphers) { if (!ciphers.Any()) { @@ -766,7 +770,7 @@ public class CipherRepository : Repository, } } - public async Task UpdateUserKeysAndCiphersAsync(User user, IEnumerable ciphers, IEnumerable folders, IEnumerable sends) + public async Task UpdateUserKeysAndCiphersAsync(User user, IEnumerable ciphers, IEnumerable folders, IEnumerable sends) { using (var scope = ServiceScopeFactory.CreateScope()) { diff --git a/src/Infrastructure.EntityFramework/Repositories/FolderRepository.cs b/src/Infrastructure.EntityFramework/Vault/Repositories/FolderRepository.cs similarity index 59% rename from src/Infrastructure.EntityFramework/Repositories/FolderRepository.cs rename to src/Infrastructure.EntityFramework/Vault/Repositories/FolderRepository.cs index 9f1f862bf0..42b79a45ed 100644 --- a/src/Infrastructure.EntityFramework/Repositories/FolderRepository.cs +++ b/src/Infrastructure.EntityFramework/Vault/Repositories/FolderRepository.cs @@ -1,18 +1,19 @@ using AutoMapper; -using Bit.Core.Repositories; -using Bit.Infrastructure.EntityFramework.Models; +using Bit.Core.Vault.Repositories; +using Bit.Infrastructure.EntityFramework.Repositories; +using Bit.Infrastructure.EntityFramework.Vault.Models; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; -namespace Bit.Infrastructure.EntityFramework.Repositories; +namespace Bit.Infrastructure.EntityFramework.Vault.Repositories; -public class FolderRepository : Repository, IFolderRepository +public class FolderRepository : Repository, IFolderRepository { public FolderRepository(IServiceScopeFactory serviceScopeFactory, IMapper mapper) : base(serviceScopeFactory, mapper, (DatabaseContext context) => context.Folders) { } - public async Task GetByIdAsync(Guid id, Guid userId) + public async Task GetByIdAsync(Guid id, Guid userId) { var folder = await base.GetByIdAsync(id); if (folder == null || folder.UserId != userId) @@ -23,7 +24,7 @@ public class FolderRepository : Repository, return folder; } - public async Task> GetManyByUserIdAsync(Guid userId) + public async Task> GetManyByUserIdAsync(Guid userId) { using (var scope = ServiceScopeFactory.CreateScope()) { @@ -32,7 +33,7 @@ public class FolderRepository : Repository, where f.UserId == userId select f; var folders = await query.ToListAsync(); - return Mapper.Map>(folders); + return Mapper.Map>(folders); } } } diff --git a/src/Infrastructure.EntityFramework/Repositories/Queries/CipherDetailsQuery.cs b/src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherDetailsQuery.cs similarity index 86% rename from src/Infrastructure.EntityFramework/Repositories/Queries/CipherDetailsQuery.cs rename to src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherDetailsQuery.cs index b9affcf947..49cbc20f42 100644 --- a/src/Infrastructure.EntityFramework/Repositories/Queries/CipherDetailsQuery.cs +++ b/src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherDetailsQuery.cs @@ -1,7 +1,9 @@ using Bit.Core.Utilities; -using Core.Models.Data; +using Bit.Core.Vault.Models.Data; +using Bit.Infrastructure.EntityFramework.Repositories; +using Bit.Infrastructure.EntityFramework.Repositories.Queries; -namespace Bit.Infrastructure.EntityFramework.Repositories.Queries; +namespace Bit.Infrastructure.EntityFramework.Vault.Repositories.Queries; public class CipherDetailsQuery : IQuery { diff --git a/src/Infrastructure.EntityFramework/Repositories/Queries/CipherOrganizationDetailsReadByIdQuery.cs b/src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherOrganizationDetailsReadByIdQuery.cs similarity index 85% rename from src/Infrastructure.EntityFramework/Repositories/Queries/CipherOrganizationDetailsReadByIdQuery.cs rename to src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherOrganizationDetailsReadByIdQuery.cs index b93954a521..f0ab4779e3 100644 --- a/src/Infrastructure.EntityFramework/Repositories/Queries/CipherOrganizationDetailsReadByIdQuery.cs +++ b/src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherOrganizationDetailsReadByIdQuery.cs @@ -1,6 +1,8 @@ -using Core.Models.Data; +using Bit.Core.Vault.Models.Data; +using Bit.Infrastructure.EntityFramework.Repositories; +using Bit.Infrastructure.EntityFramework.Repositories.Queries; -namespace Bit.Infrastructure.EntityFramework.Repositories.Queries; +namespace Bit.Infrastructure.EntityFramework.Vault.Repositories.Queries; public class CipherOrganizationDetailsReadByIdQuery : IQuery { diff --git a/src/Infrastructure.EntityFramework/Repositories/Queries/CipherOrganizationDetailsReadByOrganizationIdQuery.cs b/src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherOrganizationDetailsReadByOrganizationIdQuery.cs similarity index 88% rename from src/Infrastructure.EntityFramework/Repositories/Queries/CipherOrganizationDetailsReadByOrganizationIdQuery.cs rename to src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherOrganizationDetailsReadByOrganizationIdQuery.cs index 78ccc59b31..e00752a3c5 100644 --- a/src/Infrastructure.EntityFramework/Repositories/Queries/CipherOrganizationDetailsReadByOrganizationIdQuery.cs +++ b/src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherOrganizationDetailsReadByOrganizationIdQuery.cs @@ -1,6 +1,7 @@ -using Core.Models.Data; +using Bit.Core.Vault.Models.Data; +using Bit.Infrastructure.EntityFramework.Repositories.Queries; -namespace Bit.Infrastructure.EntityFramework.Repositories.Queries; +namespace Bit.Infrastructure.EntityFramework.Repositories.Vault.Queries; public class CipherOrganizationDetailsReadByOrganizationIdQuery : IQuery { diff --git a/src/Infrastructure.EntityFramework/Repositories/Queries/CipherReadCanEditByIdUserIdQuery.cs b/src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherReadCanEditByIdUserIdQuery.cs similarity index 92% rename from src/Infrastructure.EntityFramework/Repositories/Queries/CipherReadCanEditByIdUserIdQuery.cs rename to src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherReadCanEditByIdUserIdQuery.cs index f4a3e86945..3f0a17180b 100644 --- a/src/Infrastructure.EntityFramework/Repositories/Queries/CipherReadCanEditByIdUserIdQuery.cs +++ b/src/Infrastructure.EntityFramework/Vault/Repositories/Queries/CipherReadCanEditByIdUserIdQuery.cs @@ -1,7 +1,9 @@ using Bit.Core.Enums; -using Bit.Infrastructure.EntityFramework.Models; +using Bit.Infrastructure.EntityFramework.Repositories; +using Bit.Infrastructure.EntityFramework.Repositories.Queries; +using Bit.Infrastructure.EntityFramework.Vault.Models; -namespace Bit.Infrastructure.EntityFramework.Repositories.Queries; +namespace Bit.Infrastructure.EntityFramework.Vault.Repositories.Queries; public class CipherReadCanEditByIdUserIdQuery : IQuery { diff --git a/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs b/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs index 2d50e48b21..4bc730a7d8 100644 --- a/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs +++ b/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs @@ -16,6 +16,7 @@ using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Tokens; using Bit.Core.Utilities; +using Bit.Core.Vault.Services; using Bit.Infrastructure.Dapper; using IdentityModel; using IdentityServer4.AccessTokenValidation; diff --git a/src/Sql/Sql.sqlproj b/src/Sql/Sql.sqlproj index 39a4a06a92..76f639f871 100644 --- a/src/Sql/Sql.sqlproj +++ b/src/Sql/Sql.sqlproj @@ -74,11 +74,16 @@ + + + + + + + - - @@ -87,35 +92,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -177,11 +153,6 @@ - - - - - @@ -262,6 +233,7 @@ + @@ -274,8 +246,10 @@ + + @@ -377,7 +351,6 @@ - @@ -385,7 +358,6 @@ - @@ -413,12 +385,10 @@ - - @@ -454,9 +424,46 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Sql/dbo/Functions/CipherDetails.sql b/src/Sql/Vault/dbo/Functions/CipherDetails.sql similarity index 100% rename from src/Sql/dbo/Functions/CipherDetails.sql rename to src/Sql/Vault/dbo/Functions/CipherDetails.sql diff --git a/src/Sql/dbo/Functions/UserCipherDetails.sql b/src/Sql/Vault/dbo/Functions/UserCipherDetails.sql similarity index 100% rename from src/Sql/dbo/Functions/UserCipherDetails.sql rename to src/Sql/Vault/dbo/Functions/UserCipherDetails.sql diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_Create.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_Create.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/CipherDetails_Create.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_Create.sql diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_CreateWithCollections.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_CreateWithCollections.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/CipherDetails_CreateWithCollections.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_CreateWithCollections.sql diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_ReadByIdUserId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/CipherDetails_ReadByIdUserId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_ReadByIdUserId.sql diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_ReadByUserId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/CipherDetails_ReadByUserId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_ReadByUserId.sql diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_ReadWithoutOrganizationsByUserId.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_ReadWithoutOrganizationsByUserId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/CipherDetails_ReadWithoutOrganizationsByUserId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_ReadWithoutOrganizationsByUserId.sql diff --git a/src/Sql/dbo/Stored Procedures/CipherDetails_Update.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_Update.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/CipherDetails_Update.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherDetails_Update.sql diff --git a/src/Sql/dbo/Stored Procedures/CipherOrganizationDetails_ReadById.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherOrganizationDetails_ReadById.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/CipherOrganizationDetails_ReadById.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherOrganizationDetails_ReadById.sql diff --git a/src/Sql/dbo/Stored Procedures/CipherOrganizationDetails_ReadByOrganizationId.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherOrganizationDetails_ReadByOrganizationId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/CipherOrganizationDetails_ReadByOrganizationId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/CipherOrganizationDetails_ReadByOrganizationId.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_Create.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_Create.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_Create.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_Create.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_CreateWithCollections.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_CreateWithCollections.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_CreateWithCollections.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_CreateWithCollections.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_Delete.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_Delete.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_Delete.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_Delete.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_DeleteAttachment.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteAttachment.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_DeleteAttachment.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteAttachment.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_DeleteById.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteById.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_DeleteById.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteById.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_DeleteByIdsOrganizationId.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteByIdsOrganizationId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_DeleteByIdsOrganizationId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteByIdsOrganizationId.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_DeleteByOrganizationId.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteByOrganizationId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_DeleteByOrganizationId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteByOrganizationId.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_DeleteByUserId.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteByUserId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_DeleteByUserId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteByUserId.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_DeleteDeleted.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteDeleted.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_DeleteDeleted.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_DeleteDeleted.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_Move.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_Move.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_Move.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_Move.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_ReadById.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_ReadById.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_ReadById.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_ReadById.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_ReadByOrganizationId.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_ReadByOrganizationId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_ReadByOrganizationId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_ReadByOrganizationId.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_ReadCanEditByIdUserId.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_ReadCanEditByIdUserId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_ReadCanEditByIdUserId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_ReadCanEditByIdUserId.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_Restore.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_Restore.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_Restore.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_Restore.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_SoftDelete.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_SoftDelete.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_SoftDelete.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_SoftDelete.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_SoftDeleteByIdsOrganizationId.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_SoftDeleteByIdsOrganizationId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_SoftDeleteByIdsOrganizationId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_SoftDeleteByIdsOrganizationId.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_Update.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_Update.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_Update.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_Update.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_UpdateAttachment.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_UpdateAttachment.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_UpdateAttachment.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_UpdateAttachment.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_UpdateCollections.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_UpdateCollections.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_UpdateCollections.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_UpdateCollections.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_UpdatePartial.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_UpdatePartial.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_UpdatePartial.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_UpdatePartial.sql diff --git a/src/Sql/dbo/Stored Procedures/Cipher_UpdateWithCollections.sql b/src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_UpdateWithCollections.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Cipher_UpdateWithCollections.sql rename to src/Sql/Vault/dbo/Stored Procedures/Cipher/Cipher_UpdateWithCollections.sql diff --git a/src/Sql/dbo/Stored Procedures/Folder_Create.sql b/src/Sql/Vault/dbo/Stored Procedures/Folder/Folder_Create.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Folder_Create.sql rename to src/Sql/Vault/dbo/Stored Procedures/Folder/Folder_Create.sql diff --git a/src/Sql/dbo/Stored Procedures/Folder_DeleteById.sql b/src/Sql/Vault/dbo/Stored Procedures/Folder/Folder_DeleteById.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Folder_DeleteById.sql rename to src/Sql/Vault/dbo/Stored Procedures/Folder/Folder_DeleteById.sql diff --git a/src/Sql/dbo/Stored Procedures/Folder_ReadById.sql b/src/Sql/Vault/dbo/Stored Procedures/Folder/Folder_ReadById.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Folder_ReadById.sql rename to src/Sql/Vault/dbo/Stored Procedures/Folder/Folder_ReadById.sql diff --git a/src/Sql/dbo/Stored Procedures/Folder_ReadByUserId.sql b/src/Sql/Vault/dbo/Stored Procedures/Folder/Folder_ReadByUserId.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Folder_ReadByUserId.sql rename to src/Sql/Vault/dbo/Stored Procedures/Folder/Folder_ReadByUserId.sql diff --git a/src/Sql/dbo/Stored Procedures/Folder_Update.sql b/src/Sql/Vault/dbo/Stored Procedures/Folder/Folder_Update.sql similarity index 100% rename from src/Sql/dbo/Stored Procedures/Folder_Update.sql rename to src/Sql/Vault/dbo/Stored Procedures/Folder/Folder_Update.sql diff --git a/src/Sql/dbo/Tables/Cipher.sql b/src/Sql/Vault/dbo/Tables/Cipher.sql similarity index 100% rename from src/Sql/dbo/Tables/Cipher.sql rename to src/Sql/Vault/dbo/Tables/Cipher.sql diff --git a/src/Sql/dbo/Tables/Folder.sql b/src/Sql/Vault/dbo/Tables/Folder.sql similarity index 100% rename from src/Sql/dbo/Tables/Folder.sql rename to src/Sql/Vault/dbo/Tables/Folder.sql diff --git a/src/Sql/dbo/Views/CipherView.sql b/src/Sql/Vault/dbo/Views/CipherView.sql similarity index 100% rename from src/Sql/dbo/Views/CipherView.sql rename to src/Sql/Vault/dbo/Views/CipherView.sql diff --git a/src/Sql/dbo/Views/FolderView.sql b/src/Sql/Vault/dbo/Views/FolderView.sql similarity index 100% rename from src/Sql/dbo/Views/FolderView.sql rename to src/Sql/Vault/dbo/Views/FolderView.sql diff --git a/test/Api.Test/Controllers/AccountsControllerTests.cs b/test/Api.Test/Controllers/AccountsControllerTests.cs index 142cc0b4d9..1f7ec5f414 100644 --- a/test/Api.Test/Controllers/AccountsControllerTests.cs +++ b/test/Api.Test/Controllers/AccountsControllerTests.cs @@ -9,6 +9,7 @@ using Bit.Core.Models.Data; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Settings; +using Bit.Core.Vault.Repositories; using Microsoft.AspNetCore.Identity; using NSubstitute; using Xunit; diff --git a/test/Api.Test/Controllers/CiphersControllerTests.cs b/test/Api.Test/Vault/Controllers/CiphersControllerTests.cs similarity index 86% rename from test/Api.Test/Controllers/CiphersControllerTests.cs rename to test/Api.Test/Vault/Controllers/CiphersControllerTests.cs index 8a8861a738..0ca085d2bf 100644 --- a/test/Api.Test/Controllers/CiphersControllerTests.cs +++ b/test/Api.Test/Vault/Controllers/CiphersControllerTests.cs @@ -1,11 +1,11 @@ using System.Security.Claims; -using Bit.Api.Controllers; -using Bit.Api.Models.Request; -using Bit.Core.Repositories; +using Bit.Api.Vault.Controllers; +using Bit.Api.Vault.Models.Request; using Bit.Core.Services; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Repositories; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; -using Core.Models.Data; using NSubstitute; using Xunit; @@ -29,7 +29,7 @@ public class CiphersControllerTests { Favorite = isFavorite, FolderId = folderId, - Type = Core.Enums.CipherType.SecureNote, + Type = Core.Vault.Enums.CipherType.SecureNote, Data = "{}" }; diff --git a/test/Api.Test/Controllers/SyncControllerTests.cs b/test/Api.Test/Vault/Controllers/SyncControllerTests.cs similarity index 98% rename from test/Api.Test/Controllers/SyncControllerTests.cs rename to test/Api.Test/Vault/Controllers/SyncControllerTests.cs index 0b48af7fe1..c21bc38ab1 100644 --- a/test/Api.Test/Controllers/SyncControllerTests.cs +++ b/test/Api.Test/Vault/Controllers/SyncControllerTests.cs @@ -1,8 +1,8 @@ using System.Security.Claims; using System.Text.Json; using AutoFixture; -using Bit.Api.Controllers; -using Bit.Api.Models.Response; +using Bit.Api.Vault.Controllers; +using Bit.Api.Vault.Models.Response; using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Enums.Provider; @@ -12,9 +12,11 @@ using Bit.Core.Models.Data.Organizations.OrganizationUsers; using Bit.Core.Repositories; using Bit.Core.Services; using Bit.Core.Utilities; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Repositories; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; -using Core.Models.Data; using NSubstitute; using NSubstitute.ReturnsExtensions; using Xunit; diff --git a/test/Core.Test/Services/LocalAttachmentStorageServiceTests.cs b/test/Core.Test/Services/LocalAttachmentStorageServiceTests.cs index 660ee7197c..c389b2319c 100644 --- a/test/Core.Test/Services/LocalAttachmentStorageServiceTests.cs +++ b/test/Core.Test/Services/LocalAttachmentStorageServiceTests.cs @@ -1,11 +1,11 @@ using System.Text; using AutoFixture; -using Bit.Core.Entities; -using Bit.Core.Models.Data; -using Bit.Core.Services; using Bit.Core.Settings; using Bit.Core.Test.AutoFixture.CipherAttachmentMetaData; using Bit.Core.Test.AutoFixture.CipherFixtures; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Services; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using NSubstitute; diff --git a/test/Core.Test/AutoFixture/CipherAttachmentMetaDataFixtures.cs b/test/Core.Test/Vault/AutoFixture/CipherAttachmentMetaDataFixtures.cs similarity index 97% rename from test/Core.Test/AutoFixture/CipherAttachmentMetaDataFixtures.cs rename to test/Core.Test/Vault/AutoFixture/CipherAttachmentMetaDataFixtures.cs index ef18dcd5f9..2aa1e0076f 100644 --- a/test/Core.Test/AutoFixture/CipherAttachmentMetaDataFixtures.cs +++ b/test/Core.Test/Vault/AutoFixture/CipherAttachmentMetaDataFixtures.cs @@ -1,6 +1,6 @@ using AutoFixture; using AutoFixture.Dsl; -using Bit.Core.Models.Data; +using Bit.Core.Vault.Models.Data; namespace Bit.Core.Test.AutoFixture.CipherAttachmentMetaData; diff --git a/test/Core.Test/AutoFixture/CipherFixtures.cs b/test/Core.Test/Vault/AutoFixture/CipherFixtures.cs similarity index 95% rename from test/Core.Test/AutoFixture/CipherFixtures.cs rename to test/Core.Test/Vault/AutoFixture/CipherFixtures.cs index ae883c5faf..d3fe5f7f8e 100644 --- a/test/Core.Test/AutoFixture/CipherFixtures.cs +++ b/test/Core.Test/Vault/AutoFixture/CipherFixtures.cs @@ -1,7 +1,7 @@ using AutoFixture; -using Bit.Core.Entities; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; using Bit.Test.Common.AutoFixture.Attributes; -using Core.Models.Data; namespace Bit.Core.Test.AutoFixture.CipherFixtures; diff --git a/test/Core.Test/Models/CipherTests.cs b/test/Core.Test/Vault/Models/CipherTests.cs similarity index 95% rename from test/Core.Test/Models/CipherTests.cs rename to test/Core.Test/Vault/Models/CipherTests.cs index fa9521b6c1..6d557825cb 100644 --- a/test/Core.Test/Models/CipherTests.cs +++ b/test/Core.Test/Vault/Models/CipherTests.cs @@ -1,6 +1,6 @@ using System.Text.Json; -using Bit.Core.Entities; using Bit.Core.Test.AutoFixture.CipherFixtures; +using Bit.Core.Vault.Entities; using Bit.Test.Common.AutoFixture.Attributes; using Xunit; diff --git a/test/Core.Test/Services/AzureAttachmentStorageServiceTests.cs b/test/Core.Test/Vault/Services/AzureAttachmentStorageServiceTests.cs similarity index 93% rename from test/Core.Test/Services/AzureAttachmentStorageServiceTests.cs rename to test/Core.Test/Vault/Services/AzureAttachmentStorageServiceTests.cs index 21a5fa3f8e..6c1a65011d 100644 --- a/test/Core.Test/Services/AzureAttachmentStorageServiceTests.cs +++ b/test/Core.Test/Vault/Services/AzureAttachmentStorageServiceTests.cs @@ -1,5 +1,5 @@ -using Bit.Core.Services; -using Bit.Core.Settings; +using Bit.Core.Settings; +using Bit.Core.Vault.Services; using Microsoft.Extensions.Logging; using NSubstitute; using Xunit; diff --git a/test/Core.Test/Services/CipherServiceTests.cs b/test/Core.Test/Vault/Services/CipherServiceTests.cs similarity index 98% rename from test/Core.Test/Services/CipherServiceTests.cs rename to test/Core.Test/Vault/Services/CipherServiceTests.cs index ed47954f3a..8ab34a130f 100644 --- a/test/Core.Test/Services/CipherServiceTests.cs +++ b/test/Core.Test/Vault/Services/CipherServiceTests.cs @@ -1,12 +1,14 @@ using Bit.Core.Entities; using Bit.Core.Exceptions; using Bit.Core.Repositories; -using Bit.Core.Services; using Bit.Core.Test.AutoFixture.CipherFixtures; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Repositories; +using Bit.Core.Vault.Services; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using Castle.Core.Internal; -using Core.Models.Data; using NSubstitute; using Xunit; diff --git a/test/Infrastructure.EFIntegration.Test/AutoFixture/CollectionCipherFixtures.cs b/test/Infrastructure.EFIntegration.Test/AutoFixture/CollectionCipherFixtures.cs index 89ffccb2b7..4af375890d 100644 --- a/test/Infrastructure.EFIntegration.Test/AutoFixture/CollectionCipherFixtures.cs +++ b/test/Infrastructure.EFIntegration.Test/AutoFixture/CollectionCipherFixtures.cs @@ -4,6 +4,7 @@ using Bit.Core.Entities; using Bit.Core.Test.AutoFixture.UserFixtures; using Bit.Infrastructure.EFIntegration.Test.AutoFixture.Relays; using Bit.Infrastructure.EntityFramework.Repositories; +using Bit.Infrastructure.EntityFramework.Vault.Repositories; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; diff --git a/test/Infrastructure.EFIntegration.Test/AutoFixture/EntityFrameworkRepositoryFixtures.cs b/test/Infrastructure.EFIntegration.Test/AutoFixture/EntityFrameworkRepositoryFixtures.cs index 1fecaa6b9b..26b56fa375 100644 --- a/test/Infrastructure.EFIntegration.Test/AutoFixture/EntityFrameworkRepositoryFixtures.cs +++ b/test/Infrastructure.EFIntegration.Test/AutoFixture/EntityFrameworkRepositoryFixtures.cs @@ -6,6 +6,7 @@ using Bit.Core.Settings; using Bit.Infrastructure.EFIntegration.Test.Helpers; using Bit.Infrastructure.EntityFramework.Models; using Bit.Infrastructure.EntityFramework.Repositories; +using Bit.Infrastructure.EntityFramework.Vault.Models; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Moq; diff --git a/test/Infrastructure.EFIntegration.Test/Repositories/EqualityComparers/CipherCompare.cs b/test/Infrastructure.EFIntegration.Test/Repositories/EqualityComparers/CipherCompare.cs index 230b51dd69..96b11ab63f 100644 --- a/test/Infrastructure.EFIntegration.Test/Repositories/EqualityComparers/CipherCompare.cs +++ b/test/Infrastructure.EFIntegration.Test/Repositories/EqualityComparers/CipherCompare.cs @@ -1,5 +1,5 @@ using System.Diagnostics.CodeAnalysis; -using Bit.Core.Entities; +using Bit.Core.Vault.Entities; namespace Bit.Infrastructure.EFIntegration.Test.Repositories.EqualityComparers; diff --git a/test/Infrastructure.EFIntegration.Test/Repositories/EqualityComparers/FolderCompare.cs b/test/Infrastructure.EFIntegration.Test/Repositories/EqualityComparers/FolderCompare.cs index 2bdb71385c..56818cf11f 100644 --- a/test/Infrastructure.EFIntegration.Test/Repositories/EqualityComparers/FolderCompare.cs +++ b/test/Infrastructure.EFIntegration.Test/Repositories/EqualityComparers/FolderCompare.cs @@ -1,5 +1,5 @@ using System.Diagnostics.CodeAnalysis; -using Bit.Core.Entities; +using Bit.Core.Vault.Entities; namespace Bit.Infrastructure.EFIntegration.Test.Repositories.EqualityComparers; diff --git a/test/Infrastructure.EFIntegration.Test/AutoFixture/CipherFixtures.cs b/test/Infrastructure.EFIntegration.Test/Vault/AutoFixture/CipherFixtures.cs similarity index 97% rename from test/Infrastructure.EFIntegration.Test/AutoFixture/CipherFixtures.cs rename to test/Infrastructure.EFIntegration.Test/Vault/AutoFixture/CipherFixtures.cs index 71b89dc98b..ebce1e8b5e 100644 --- a/test/Infrastructure.EFIntegration.Test/AutoFixture/CipherFixtures.cs +++ b/test/Infrastructure.EFIntegration.Test/Vault/AutoFixture/CipherFixtures.cs @@ -1,11 +1,12 @@ using System.Text.Json; using AutoFixture; using AutoFixture.Kernel; -using Bit.Core.Entities; -using Bit.Core.Models.Data; using Bit.Core.Test.AutoFixture.UserFixtures; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Models.Data; using Bit.Infrastructure.EFIntegration.Test.AutoFixture.Relays; using Bit.Infrastructure.EntityFramework.Repositories; +using Bit.Infrastructure.EntityFramework.Vault.Repositories; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; diff --git a/test/Infrastructure.EFIntegration.Test/AutoFixture/FolderFixtures.cs b/test/Infrastructure.EFIntegration.Test/Vault/AutoFixture/FolderFixtures.cs similarity index 95% rename from test/Infrastructure.EFIntegration.Test/AutoFixture/FolderFixtures.cs rename to test/Infrastructure.EFIntegration.Test/Vault/AutoFixture/FolderFixtures.cs index 884933ffd5..a20696e447 100644 --- a/test/Infrastructure.EFIntegration.Test/AutoFixture/FolderFixtures.cs +++ b/test/Infrastructure.EFIntegration.Test/Vault/AutoFixture/FolderFixtures.cs @@ -1,9 +1,10 @@ using AutoFixture; using AutoFixture.Kernel; -using Bit.Core.Entities; using Bit.Core.Test.AutoFixture.UserFixtures; +using Bit.Core.Vault.Entities; using Bit.Infrastructure.EFIntegration.Test.AutoFixture.Relays; using Bit.Infrastructure.EntityFramework.Repositories; +using Bit.Infrastructure.EntityFramework.Vault.Repositories; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; diff --git a/test/Infrastructure.EFIntegration.Test/Repositories/CipherRepositoryTests.cs b/test/Infrastructure.EFIntegration.Test/Vault/Repositories/CipherRepositoryTests.cs similarity index 86% rename from test/Infrastructure.EFIntegration.Test/Repositories/CipherRepositoryTests.cs rename to test/Infrastructure.EFIntegration.Test/Vault/Repositories/CipherRepositoryTests.cs index 0de2196a88..36f92f9068 100644 --- a/test/Infrastructure.EFIntegration.Test/Repositories/CipherRepositoryTests.cs +++ b/test/Infrastructure.EFIntegration.Test/Vault/Repositories/CipherRepositoryTests.cs @@ -1,6 +1,7 @@ using Bit.Core.Entities; using Bit.Core.Models.Data; using Bit.Core.Test.AutoFixture.Attributes; +using Bit.Core.Vault.Entities; using Bit.Infrastructure.EFIntegration.Test.AutoFixture; using Bit.Infrastructure.EFIntegration.Test.Repositories.EqualityComparers; using Bit.Infrastructure.EntityFramework.Repositories.Queries; @@ -8,14 +9,16 @@ using Bit.Test.Common.AutoFixture.Attributes; using LinqToDB; using Xunit; using EfRepo = Bit.Infrastructure.EntityFramework.Repositories; +using EfVaultRepo = Bit.Infrastructure.EntityFramework.Vault.Repositories; using SqlRepo = Bit.Infrastructure.Dapper.Repositories; +using SqlVaultRepo = Bit.Infrastructure.Dapper.Vault.Repositories; namespace Bit.Infrastructure.EFIntegration.Test.Repositories; public class CipherRepositoryTests { [Theory(Skip = "Run ad-hoc"), EfUserCipherCustomize, BitAutoData] - public async void RefreshDb(List suts) + public async void RefreshDb(List suts) { foreach (var sut in suts) { @@ -25,21 +28,21 @@ public class CipherRepositoryTests [CiSkippedTheory, EfUserCipherCustomize, BitAutoData] public Task UserCipher_CreateAsync_Works_DataMatches(Cipher cipher, User user, Organization org, - CipherCompare equalityComparer, List suts, List efUserRepos, - List efOrgRepos, SqlRepo.CipherRepository sqlCipherRepo, + CipherCompare equalityComparer, List suts, List efUserRepos, + List efOrgRepos, SqlVaultRepo.CipherRepository sqlCipherRepo, SqlRepo.UserRepository sqlUserRepo, SqlRepo.OrganizationRepository sqlOrgRepo) => CreateAsync_Works_DataMatches( cipher, user, org, equalityComparer, suts, efUserRepos, efOrgRepos, sqlCipherRepo, sqlUserRepo, sqlOrgRepo); [CiSkippedTheory, EfOrganizationCipherCustomize, BitAutoData] public Task OrganizationCipher_CreateAsync_Works_DataMatches(Cipher cipher, User user, Organization org, - CipherCompare equalityComparer, List suts, List efUserRepos, - List efOrgRepos, SqlRepo.CipherRepository sqlCipherRepo, + CipherCompare equalityComparer, List suts, List efUserRepos, + List efOrgRepos, SqlVaultRepo.CipherRepository sqlCipherRepo, SqlRepo.UserRepository sqlUserRepo, SqlRepo.OrganizationRepository sqlOrgRepo) => CreateAsync_Works_DataMatches( cipher, user, org, equalityComparer, suts, efUserRepos, efOrgRepos, sqlCipherRepo, sqlUserRepo, sqlOrgRepo); private async Task CreateAsync_Works_DataMatches(Cipher cipher, User user, Organization org, - CipherCompare equalityComparer, List suts, List efUserRepos, - List efOrgRepos, SqlRepo.CipherRepository sqlCipherRepo, + CipherCompare equalityComparer, List suts, List efUserRepos, + List efOrgRepos, SqlVaultRepo.CipherRepository sqlCipherRepo, SqlRepo.UserRepository sqlUserRepo, SqlRepo.OrganizationRepository sqlOrgRepo) { var savedCiphers = new List(); @@ -83,7 +86,7 @@ public class CipherRepositoryTests } [CiSkippedTheory, EfUserCipherCustomize, BitAutoData] - public async void CreateAsync_BumpsUserAccountRevisionDate(Cipher cipher, User user, List suts, List efUserRepos) + public async void CreateAsync_BumpsUserAccountRevisionDate(Cipher cipher, User user, List suts, List efUserRepos) { var bumpedUsers = new List(); foreach (var sut in suts) @@ -107,7 +110,7 @@ public class CipherRepositoryTests [CiSkippedTheory, EfOrganizationCipherCustomize, BitAutoData] public async void CreateAsync_BumpsOrgUserAccountRevisionDates(Cipher cipher, List users, - List orgUsers, Collection collection, Organization org, List suts, List efUserRepos, List efOrgRepos, + List orgUsers, Collection collection, Organization org, List suts, List efUserRepos, List efOrgRepos, List efOrgUserRepos, List efCollectionRepos) { var savedCiphers = new List(); @@ -172,7 +175,7 @@ public class CipherRepositoryTests Cipher cipher, User user, Organization org, - List suts, + List suts, List efUserRepos, List efOrgRepos ) => await DeleteAsync_CipherIsDeleted(cipher, user, org, suts, efUserRepos, efOrgRepos); @@ -181,7 +184,7 @@ public class CipherRepositoryTests Cipher cipher, User user, Organization org, - List suts, + List suts, List efUserRepos, List efOrgRepos ) @@ -194,7 +197,7 @@ public class CipherRepositoryTests Cipher cipher, User user, Organization org, - List suts, + List suts, List efUserRepos, List efOrgRepos ) diff --git a/test/Infrastructure.EFIntegration.Test/Repositories/FolderRepositoryTests.cs b/test/Infrastructure.EFIntegration.Test/Vault/Repositories/FolderRepositoryTests.cs similarity index 85% rename from test/Infrastructure.EFIntegration.Test/Repositories/FolderRepositoryTests.cs rename to test/Infrastructure.EFIntegration.Test/Vault/Repositories/FolderRepositoryTests.cs index 53edbd3c44..7cbae311a4 100644 --- a/test/Infrastructure.EFIntegration.Test/Repositories/FolderRepositoryTests.cs +++ b/test/Infrastructure.EFIntegration.Test/Vault/Repositories/FolderRepositoryTests.cs @@ -1,10 +1,13 @@ using Bit.Core.Entities; using Bit.Core.Test.AutoFixture.Attributes; +using Bit.Core.Vault.Entities; using Bit.Infrastructure.EFIntegration.Test.AutoFixture; using Bit.Infrastructure.EFIntegration.Test.Repositories.EqualityComparers; using Xunit; using EfRepo = Bit.Infrastructure.EntityFramework.Repositories; +using EfVaultRepo = Bit.Infrastructure.EntityFramework.Vault.Repositories; using SqlRepo = Bit.Infrastructure.Dapper.Repositories; +using SqlVaultRepo = Bit.Infrastructure.Dapper.Vault.Repositories; namespace Bit.Infrastructure.EFIntegration.Test.Repositories; @@ -15,9 +18,9 @@ public class FolderRepositoryTests Folder folder, User user, FolderCompare equalityComparer, - List suts, + List suts, List efUserRepos, - SqlRepo.FolderRepository sqlFolderRepo, + SqlVaultRepo.FolderRepository sqlFolderRepo, SqlRepo.UserRepository sqlUserRepo) { var savedFolders = new List(); diff --git a/test/Infrastructure.IntegrationTest/Repositories/CipherRepositoryTests.cs b/test/Infrastructure.IntegrationTest/Vault/Repositories/CipherRepositoryTests.cs similarity index 95% rename from test/Infrastructure.IntegrationTest/Repositories/CipherRepositoryTests.cs rename to test/Infrastructure.IntegrationTest/Vault/Repositories/CipherRepositoryTests.cs index 0e5da71e43..95c1085ac8 100644 --- a/test/Infrastructure.IntegrationTest/Repositories/CipherRepositoryTests.cs +++ b/test/Infrastructure.IntegrationTest/Vault/Repositories/CipherRepositoryTests.cs @@ -1,7 +1,10 @@ using Bit.Core.Entities; using Bit.Core.Enums; using Bit.Core.Repositories; -using Core.Models.Data; +using Bit.Core.Vault.Entities; +using Bit.Core.Vault.Enums; +using Bit.Core.Vault.Models.Data; +using Bit.Core.Vault.Repositories; using Xunit; namespace Bit.Infrastructure.IntegrationTest.Repositories; From 27adaf59b4767acde150cab084f2660e4b92c52c Mon Sep 17 00:00:00 2001 From: Matt Bishop Date: Thu, 2 Mar 2023 14:04:23 -0500 Subject: [PATCH 5/6] [PM-1011] LaunchDarkly service (#2726) * LaunchDarkly service * Load file-based flag values, properly support offline only when self-host * Simplify tests * Use interface for LD settings * Remove tests that will provide inconsistent results depending on machine setup and file fallback * Fall back to offline mode more actively * Drive fallback file path with setting --- .../src/Commercial.Core/packages.lock.json | 57 +++++++++++- .../packages.lock.json | 55 +++++++++++- bitwarden_license/src/Scim/packages.lock.json | 63 ++++++++++++-- bitwarden_license/src/Sso/packages.lock.json | 63 ++++++++++++-- .../Commercial.Core.Test/packages.lock.json | 65 ++++++++++++-- .../Scim.IntegrationTest/packages.lock.json | 77 +++++++++++++--- .../test/Scim.Test/packages.lock.json | 69 +++++++++++++-- perf/MicroBenchmarks/packages.lock.json | 53 +++++++++++ src/Admin/packages.lock.json | 53 +++++++++++ src/Api/packages.lock.json | 69 +++++++++++++-- src/Billing/packages.lock.json | 63 ++++++++++++-- src/Core/Core.csproj | 1 + src/Core/Services/IFeatureService.cs | 6 ++ .../LaunchDarklyFeatureService.cs | 54 ++++++++++++ src/Core/Settings/GlobalSettings.cs | 7 ++ src/Core/Settings/IGlobalSettings.cs | 1 + src/Core/Settings/ILaunchDarklySettings.cs | 7 ++ src/Core/packages.lock.json | 57 +++++++++++- src/Events/packages.lock.json | 63 ++++++++++++-- src/EventsProcessor/packages.lock.json | 63 ++++++++++++-- src/Icons/packages.lock.json | 63 ++++++++++++-- src/Identity/packages.lock.json | 63 ++++++++++++-- src/Infrastructure.Dapper/packages.lock.json | 57 +++++++++++- .../packages.lock.json | 53 +++++++++++ src/Notifications/packages.lock.json | 63 ++++++++++++-- .../Utilities/ServiceCollectionExtensions.cs | 1 + src/SharedWeb/packages.lock.json | 57 +++++++++++- test/Api.IntegrationTest/packages.lock.json | 87 +++++++++++++++---- test/Api.Test/packages.lock.json | 83 ++++++++++++++---- test/Billing.Test/packages.lock.json | 69 +++++++++++++-- test/Common/packages.lock.json | 57 +++++++++++- .../LaunchDarklyFeatureServiceTests.cs | 28 ++++++ test/Core.Test/packages.lock.json | 59 ++++++++++++- test/Icons.Test/packages.lock.json | 67 ++++++++++++-- .../packages.lock.json | 73 +++++++++++++--- test/Identity.Test/packages.lock.json | 69 +++++++++++++-- .../packages.lock.json | 63 ++++++++++++-- .../packages.lock.json | 57 +++++++++++- test/IntegrationTestCommon/packages.lock.json | 69 +++++++++++++-- util/Migrator/packages.lock.json | 57 +++++++++++- util/MySqlMigrations/packages.lock.json | 55 +++++++++++- util/PostgresMigrations/packages.lock.json | 55 +++++++++++- util/Setup/packages.lock.json | 57 +++++++++++- util/SqlServerEFScaffold/packages.lock.json | 77 +++++++++++++--- util/SqliteMigrations/packages.lock.json | 55 +++++++++++- 45 files changed, 2253 insertions(+), 187 deletions(-) create mode 100644 src/Core/Services/IFeatureService.cs create mode 100644 src/Core/Services/Implementations/LaunchDarklyFeatureService.cs create mode 100644 src/Core/Settings/ILaunchDarklySettings.cs create mode 100644 test/Core.Test/Services/LaunchDarklyFeatureServiceTests.cs diff --git a/bitwarden_license/src/Commercial.Core/packages.lock.json b/bitwarden_license/src/Commercial.Core/packages.lock.json index 3bd4c03afd..508f0f6c25 100644 --- a/bitwarden_license/src/Commercial.Core/packages.lock.json +++ b/bitwarden_license/src/Commercial.Core/packages.lock.json @@ -214,6 +214,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -1266,8 +1318,8 @@ }, "System.Collections.Immutable": { "type": "Transitive", - "resolved": "1.7.0", - "contentHash": "RVSM6wZUo6L2y6P3vN6gjUtyJ2IF2RVtrepF3J7nrDKfFQd5u/SnSUFclchYQis8/k5scHy9E+fVeKVQLnnkzw==" + "resolved": "1.7.1", + "contentHash": "B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==" }, "System.Collections.NonGeneric": { "type": "Transitive", @@ -2566,6 +2618,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", diff --git a/bitwarden_license/src/Commercial.Infrastructure.EntityFramework/packages.lock.json b/bitwarden_license/src/Commercial.Infrastructure.EntityFramework/packages.lock.json index 9a1d2310a9..101abb2fd0 100644 --- a/bitwarden_license/src/Commercial.Infrastructure.EntityFramework/packages.lock.json +++ b/bitwarden_license/src/Commercial.Infrastructure.EntityFramework/packages.lock.json @@ -232,6 +232,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2739,6 +2791,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2767,7 +2820,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", diff --git a/bitwarden_license/src/Scim/packages.lock.json b/bitwarden_license/src/Scim/packages.lock.json index a68dd3d1eb..9ad69109af 100644 --- a/bitwarden_license/src/Scim/packages.lock.json +++ b/bitwarden_license/src/Scim/packages.lock.json @@ -253,6 +253,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -3015,6 +3067,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3042,7 +3095,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3050,7 +3103,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -3062,9 +3115,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/bitwarden_license/src/Sso/packages.lock.json b/bitwarden_license/src/Sso/packages.lock.json index 679027d573..d5113fa3c0 100644 --- a/bitwarden_license/src/Sso/packages.lock.json +++ b/bitwarden_license/src/Sso/packages.lock.json @@ -248,6 +248,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2885,6 +2937,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2912,7 +2965,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2920,7 +2973,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -2932,9 +2985,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/bitwarden_license/test/Commercial.Core.Test/packages.lock.json b/bitwarden_license/test/Commercial.Core.Test/packages.lock.json index 5699c2e8a8..c455dcd5cb 100644 --- a/bitwarden_license/test/Commercial.Core.Test/packages.lock.json +++ b/bitwarden_license/test/Commercial.Core.Test/packages.lock.json @@ -308,6 +308,58 @@ "RichardSzalay.MockHttp": "6.0.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -1410,8 +1462,8 @@ }, "System.Collections.Immutable": { "type": "Transitive", - "resolved": "1.7.0", - "contentHash": "RVSM6wZUo6L2y6P3vN6gjUtyJ2IF2RVtrepF3J7nrDKfFQd5u/SnSUFclchYQis8/k5scHy9E+fVeKVQLnnkzw==" + "resolved": "1.7.1", + "contentHash": "B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==" }, "System.Collections.NonGeneric": { "type": "Transitive", @@ -2803,7 +2855,7 @@ "commercial.core": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )" + "Core": "[2023.2.0, )" } }, "common": { @@ -2811,7 +2863,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -2835,6 +2887,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2864,8 +2917,8 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Common": "[2023.1.0, )", - "Core": "[2023.1.0, )", + "Common": "[2023.2.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "Moq": "[4.17.2, )", diff --git a/bitwarden_license/test/Scim.IntegrationTest/packages.lock.json b/bitwarden_license/test/Scim.IntegrationTest/packages.lock.json index 00e5f26b92..af733e55c0 100644 --- a/bitwarden_license/test/Scim.IntegrationTest/packages.lock.json +++ b/bitwarden_license/test/Scim.IntegrationTest/packages.lock.json @@ -359,6 +359,58 @@ "RichardSzalay.MockHttp": "6.0.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -3395,7 +3447,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -3419,6 +3471,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3446,15 +3499,15 @@ "identity": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "SharedWeb": "[2023.1.0, )", + "Core": "[2023.2.0, )", + "SharedWeb": "[2023.2.0, )", "Swashbuckle.AspNetCore.SwaggerGen": "[6.5.0, )" } }, "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3462,7 +3515,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -3474,8 +3527,8 @@ "integrationtestcommon": { "type": "Project", "dependencies": { - "Common": "[2023.1.0, )", - "Identity": "[2023.1.0, )", + "Common": "[2023.2.0, )", + "Identity": "[2023.2.0, )", "Microsoft.AspNetCore.Mvc.Testing": "[6.0.5, )", "Microsoft.EntityFrameworkCore.InMemory": "[6.0.5, )", "Microsoft.Extensions.Configuration": "[6.0.1, )" @@ -3484,17 +3537,17 @@ "scim": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.VisualStudio.Web.CodeGeneration.Design": "[5.0.2, )", - "SharedWeb": "[2023.1.0, )" + "SharedWeb": "[2023.2.0, )" } }, "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/bitwarden_license/test/Scim.Test/packages.lock.json b/bitwarden_license/test/Scim.Test/packages.lock.json index 8c8143f8f6..95596f297d 100644 --- a/bitwarden_license/test/Scim.Test/packages.lock.json +++ b/bitwarden_license/test/Scim.Test/packages.lock.json @@ -347,6 +347,58 @@ "RichardSzalay.MockHttp": "6.0.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -3240,7 +3292,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -3264,6 +3316,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3291,7 +3344,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3299,7 +3352,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -3311,17 +3364,17 @@ "scim": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.VisualStudio.Web.CodeGeneration.Design": "[5.0.2, )", - "SharedWeb": "[2023.1.0, )" + "SharedWeb": "[2023.2.0, )" } }, "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/perf/MicroBenchmarks/packages.lock.json b/perf/MicroBenchmarks/packages.lock.json index d19999b140..727b2f4f45 100644 --- a/perf/MicroBenchmarks/packages.lock.json +++ b/perf/MicroBenchmarks/packages.lock.json @@ -249,6 +249,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2673,6 +2725,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", diff --git a/src/Admin/packages.lock.json b/src/Admin/packages.lock.json index ca31e68892..1a211886bf 100644 --- a/src/Admin/packages.lock.json +++ b/src/Admin/packages.lock.json @@ -295,6 +295,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -3349,6 +3401,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", diff --git a/src/Api/packages.lock.json b/src/Api/packages.lock.json index e540064cd3..5df8f48e90 100644 --- a/src/Api/packages.lock.json +++ b/src/Api/packages.lock.json @@ -259,6 +259,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2783,15 +2835,15 @@ "commercial.core": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )" + "Core": "[2023.2.0, )" } }, "commercial.infrastructure.entityframework": { "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } }, "core": { @@ -2811,6 +2863,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2838,7 +2891,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2846,7 +2899,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -2858,9 +2911,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/src/Billing/packages.lock.json b/src/Billing/packages.lock.json index dc46ffb62a..738ec4aac7 100644 --- a/src/Billing/packages.lock.json +++ b/src/Billing/packages.lock.json @@ -256,6 +256,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -3262,6 +3314,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3289,7 +3342,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3297,7 +3350,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -3309,9 +3362,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/src/Core/Core.csproj b/src/Core/Core.csproj index 1ddc93a95e..0ffe4700e2 100644 --- a/src/Core/Core.csproj +++ b/src/Core/Core.csproj @@ -56,6 +56,7 @@ + diff --git a/src/Core/Services/IFeatureService.cs b/src/Core/Services/IFeatureService.cs new file mode 100644 index 0000000000..956eab9175 --- /dev/null +++ b/src/Core/Services/IFeatureService.cs @@ -0,0 +1,6 @@ +namespace Bit.Core.Services; + +public interface IFeatureService +{ + bool IsOnline(); +} diff --git a/src/Core/Services/Implementations/LaunchDarklyFeatureService.cs b/src/Core/Services/Implementations/LaunchDarklyFeatureService.cs new file mode 100644 index 0000000000..d69a916817 --- /dev/null +++ b/src/Core/Services/Implementations/LaunchDarklyFeatureService.cs @@ -0,0 +1,54 @@ +using Bit.Core.Settings; +using LaunchDarkly.Sdk.Server; +using LaunchDarkly.Sdk.Server.Integrations; + +namespace Bit.Core.Services; + +public class LaunchDarklyFeatureService : IFeatureService, IDisposable +{ + private readonly LdClient _client; + + public LaunchDarklyFeatureService( + IGlobalSettings globalSettings) + { + var ldConfig = Configuration.Builder(globalSettings.LaunchDarkly?.SdkKey); + + if (string.IsNullOrEmpty(globalSettings.LaunchDarkly?.SdkKey)) + { + // support a file to load flag values + if (File.Exists(globalSettings.LaunchDarkly?.FlagDataFilePath)) + { + ldConfig.DataSource( + FileData.DataSource() + .FilePaths(globalSettings.LaunchDarkly?.FlagDataFilePath) + .AutoUpdate(true) + ); + + // do not provide analytics events + ldConfig.Events(Components.NoEvents); + } + else + { + // when a file-based fallback isn't available, work offline + ldConfig.Offline(true); + } + } + else if (globalSettings.SelfHosted) + { + // when self-hosted, work offline + ldConfig.Offline(true); + } + + _client = new LdClient(ldConfig.Build()); + } + + public bool IsOnline() + { + return _client.Initialized && !_client.IsOffline(); + } + + public void Dispose() + { + _client?.Dispose(); + } +} diff --git a/src/Core/Settings/GlobalSettings.cs b/src/Core/Settings/GlobalSettings.cs index 44820c3040..975a7f56ff 100644 --- a/src/Core/Settings/GlobalSettings.cs +++ b/src/Core/Settings/GlobalSettings.cs @@ -77,6 +77,7 @@ public class GlobalSettings : IGlobalSettings new DistributedIpRateLimitingSettings(); public virtual IPasswordlessAuthSettings PasswordlessAuth { get; set; } = new PasswordlessAuthSettings(); public virtual IDomainVerificationSettings DomainVerification { get; set; } = new DomainVerificationSettings(); + public virtual ILaunchDarklySettings LaunchDarkly { get; set; } = new LaunchDarklySettings(); public string BuildExternalUri(string explicitValue, string name) { @@ -538,4 +539,10 @@ public class GlobalSettings : IGlobalSettings public int VerificationInterval { get; set; } = 12; public int ExpirationPeriod { get; set; } = 7; } + + public class LaunchDarklySettings : ILaunchDarklySettings + { + public string SdkKey { get; set; } + public string FlagDataFilePath { get; set; } = "flags.json"; + } } diff --git a/src/Core/Settings/IGlobalSettings.cs b/src/Core/Settings/IGlobalSettings.cs index 49d016253d..4ee2fe305e 100644 --- a/src/Core/Settings/IGlobalSettings.cs +++ b/src/Core/Settings/IGlobalSettings.cs @@ -17,4 +17,5 @@ public interface IGlobalSettings ILogLevelSettings MinLogLevel { get; set; } IPasswordlessAuthSettings PasswordlessAuth { get; set; } IDomainVerificationSettings DomainVerification { get; set; } + ILaunchDarklySettings LaunchDarkly { get; set; } } diff --git a/src/Core/Settings/ILaunchDarklySettings.cs b/src/Core/Settings/ILaunchDarklySettings.cs new file mode 100644 index 0000000000..e395a69652 --- /dev/null +++ b/src/Core/Settings/ILaunchDarklySettings.cs @@ -0,0 +1,7 @@ +namespace Bit.Core.Settings; + +public interface ILaunchDarklySettings +{ + public string SdkKey { get; set; } + public string FlagDataFilePath { get; set; } +} diff --git a/src/Core/packages.lock.json b/src/Core/packages.lock.json index 3d85dc3785..63f5b7bc2e 100644 --- a/src/Core/packages.lock.json +++ b/src/Core/packages.lock.json @@ -144,6 +144,20 @@ "Microsoft.AspNetCore.Authentication.JwtBearer": "3.0.0" } }, + "LaunchDarkly.ServerSdk": { + "type": "Direct", + "requested": "[7.0.0, )", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "MailKit": { "type": "Direct", "requested": "[3.2.0, )", @@ -476,6 +490,45 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -1310,8 +1363,8 @@ }, "System.Collections.Immutable": { "type": "Transitive", - "resolved": "1.7.0", - "contentHash": "RVSM6wZUo6L2y6P3vN6gjUtyJ2IF2RVtrepF3J7nrDKfFQd5u/SnSUFclchYQis8/k5scHy9E+fVeKVQLnnkzw==" + "resolved": "1.7.1", + "contentHash": "B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==" }, "System.Collections.NonGeneric": { "type": "Transitive", diff --git a/src/Events/packages.lock.json b/src/Events/packages.lock.json index bfb0051b19..35dc377c46 100644 --- a/src/Events/packages.lock.json +++ b/src/Events/packages.lock.json @@ -236,6 +236,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2743,6 +2795,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2770,7 +2823,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2778,7 +2831,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -2790,9 +2843,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/src/EventsProcessor/packages.lock.json b/src/EventsProcessor/packages.lock.json index bfb0051b19..35dc377c46 100644 --- a/src/EventsProcessor/packages.lock.json +++ b/src/EventsProcessor/packages.lock.json @@ -236,6 +236,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2743,6 +2795,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2770,7 +2823,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2778,7 +2831,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -2790,9 +2843,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/src/Icons/packages.lock.json b/src/Icons/packages.lock.json index a09e93cb2f..99e8ef0037 100644 --- a/src/Icons/packages.lock.json +++ b/src/Icons/packages.lock.json @@ -246,6 +246,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2753,6 +2805,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2780,7 +2833,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2788,7 +2841,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -2800,9 +2853,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/src/Identity/packages.lock.json b/src/Identity/packages.lock.json index cb0378ca95..9dbaf53e13 100644 --- a/src/Identity/packages.lock.json +++ b/src/Identity/packages.lock.json @@ -245,6 +245,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2765,6 +2817,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2792,7 +2845,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2800,7 +2853,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -2812,9 +2865,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/src/Infrastructure.Dapper/packages.lock.json b/src/Infrastructure.Dapper/packages.lock.json index 7b050ad0f3..22a17dfbf3 100644 --- a/src/Infrastructure.Dapper/packages.lock.json +++ b/src/Infrastructure.Dapper/packages.lock.json @@ -220,6 +220,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -1272,8 +1324,8 @@ }, "System.Collections.Immutable": { "type": "Transitive", - "resolved": "1.7.0", - "contentHash": "RVSM6wZUo6L2y6P3vN6gjUtyJ2IF2RVtrepF3J7nrDKfFQd5u/SnSUFclchYQis8/k5scHy9E+fVeKVQLnnkzw==" + "resolved": "1.7.1", + "contentHash": "B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==" }, "System.Collections.NonGeneric": { "type": "Transitive", @@ -2572,6 +2624,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", diff --git a/src/Infrastructure.EntityFramework/packages.lock.json b/src/Infrastructure.EntityFramework/packages.lock.json index 5a1316b527..1da5836273 100644 --- a/src/Infrastructure.EntityFramework/packages.lock.json +++ b/src/Infrastructure.EntityFramework/packages.lock.json @@ -295,6 +295,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2745,6 +2797,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", diff --git a/src/Notifications/packages.lock.json b/src/Notifications/packages.lock.json index 42fef74678..35f6a194e2 100644 --- a/src/Notifications/packages.lock.json +++ b/src/Notifications/packages.lock.json @@ -257,6 +257,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2793,6 +2845,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2820,7 +2873,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2828,7 +2881,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -2840,9 +2893,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs b/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs index 4bc730a7d8..d2b1f65de1 100644 --- a/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs +++ b/src/SharedWeb/Utilities/ServiceCollectionExtensions.cs @@ -176,6 +176,7 @@ public static class ServiceCollectionExtensions services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); services.AddTokenizers(); if (CoreHelpers.SettingHasValue(globalSettings.ServiceBus.ConnectionString) && diff --git a/src/SharedWeb/packages.lock.json b/src/SharedWeb/packages.lock.json index fef8c5d43e..1ad2b8a01c 100644 --- a/src/SharedWeb/packages.lock.json +++ b/src/SharedWeb/packages.lock.json @@ -236,6 +236,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2743,6 +2795,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2770,7 +2823,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2778,7 +2831,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", diff --git a/test/Api.IntegrationTest/packages.lock.json b/test/Api.IntegrationTest/packages.lock.json index 97e7c7b97d..868694ef66 100644 --- a/test/Api.IntegrationTest/packages.lock.json +++ b/test/Api.IntegrationTest/packages.lock.json @@ -340,6 +340,58 @@ "RichardSzalay.MockHttp": "6.0.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -3156,25 +3208,25 @@ "type": "Project", "dependencies": { "Azure.Messaging.EventGrid": "[4.10.0, )", - "Commercial.Core": "[2023.1.0, )", - "Commercial.Infrastructure.EntityFramework": "[2023.1.0, )", - "Core": "[2023.1.0, )", - "SharedWeb": "[2023.1.0, )", + "Commercial.Core": "[2023.2.0, )", + "Commercial.Infrastructure.EntityFramework": "[2023.2.0, )", + "Core": "[2023.2.0, )", + "SharedWeb": "[2023.2.0, )", "Swashbuckle.AspNetCore": "[6.5.0, )" } }, "commercial.core": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )" + "Core": "[2023.2.0, )" } }, "commercial.infrastructure.entityframework": { "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } }, "common": { @@ -3182,7 +3234,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -3206,6 +3258,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3233,15 +3286,15 @@ "identity": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "SharedWeb": "[2023.1.0, )", + "Core": "[2023.2.0, )", + "SharedWeb": "[2023.2.0, )", "Swashbuckle.AspNetCore.SwaggerGen": "[6.5.0, )" } }, "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3249,7 +3302,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -3261,8 +3314,8 @@ "integrationtestcommon": { "type": "Project", "dependencies": { - "Common": "[2023.1.0, )", - "Identity": "[2023.1.0, )", + "Common": "[2023.2.0, )", + "Identity": "[2023.2.0, )", "Microsoft.AspNetCore.Mvc.Testing": "[6.0.5, )", "Microsoft.EntityFrameworkCore.InMemory": "[6.0.5, )", "Microsoft.Extensions.Configuration": "[6.0.1, )" @@ -3271,9 +3324,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/test/Api.Test/packages.lock.json b/test/Api.Test/packages.lock.json index 6ca00e3af9..9b8a73427b 100644 --- a/test/Api.Test/packages.lock.json +++ b/test/Api.Test/packages.lock.json @@ -350,6 +350,58 @@ "RichardSzalay.MockHttp": "6.0.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -3035,25 +3087,25 @@ "type": "Project", "dependencies": { "Azure.Messaging.EventGrid": "[4.10.0, )", - "Commercial.Core": "[2023.1.0, )", - "Commercial.Infrastructure.EntityFramework": "[2023.1.0, )", - "Core": "[2023.1.0, )", - "SharedWeb": "[2023.1.0, )", + "Commercial.Core": "[2023.2.0, )", + "Commercial.Infrastructure.EntityFramework": "[2023.2.0, )", + "Core": "[2023.2.0, )", + "SharedWeb": "[2023.2.0, )", "Swashbuckle.AspNetCore": "[6.5.0, )" } }, "commercial.core": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )" + "Core": "[2023.2.0, )" } }, "commercial.infrastructure.entityframework": { "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } }, "common": { @@ -3061,7 +3113,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -3085,6 +3137,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3114,8 +3167,8 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Common": "[2023.1.0, )", - "Core": "[2023.1.0, )", + "Common": "[2023.2.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "Moq": "[4.17.2, )", @@ -3126,7 +3179,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3134,7 +3187,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -3146,9 +3199,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/test/Billing.Test/packages.lock.json b/test/Billing.Test/packages.lock.json index f9b1fef1f8..fc08d7de4f 100644 --- a/test/Billing.Test/packages.lock.json +++ b/test/Billing.Test/packages.lock.json @@ -348,6 +348,58 @@ "RichardSzalay.MockHttp": "6.0.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -3481,9 +3533,9 @@ "billing": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.VisualStudio.Web.CodeGeneration.Design": "[6.0.3, )", - "SharedWeb": "[2023.1.0, )" + "SharedWeb": "[2023.2.0, )" } }, "common": { @@ -3491,7 +3543,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -3515,6 +3567,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3542,7 +3595,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3550,7 +3603,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -3562,9 +3615,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/test/Common/packages.lock.json b/test/Common/packages.lock.json index ca1cee8430..3eb93b4fcc 100644 --- a/test/Common/packages.lock.json +++ b/test/Common/packages.lock.json @@ -314,6 +314,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -1399,8 +1451,8 @@ }, "System.Collections.Immutable": { "type": "Transitive", - "resolved": "1.7.0", - "contentHash": "RVSM6wZUo6L2y6P3vN6gjUtyJ2IF2RVtrepF3J7nrDKfFQd5u/SnSUFclchYQis8/k5scHy9E+fVeKVQLnnkzw==" + "resolved": "1.7.1", + "contentHash": "B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==" }, "System.Collections.NonGeneric": { "type": "Transitive", @@ -2806,6 +2858,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", diff --git a/test/Core.Test/Services/LaunchDarklyFeatureServiceTests.cs b/test/Core.Test/Services/LaunchDarklyFeatureServiceTests.cs new file mode 100644 index 0000000000..1491f41aab --- /dev/null +++ b/test/Core.Test/Services/LaunchDarklyFeatureServiceTests.cs @@ -0,0 +1,28 @@ +using AutoFixture; +using Bit.Core.Services; +using Bit.Core.Settings; +using Bit.Test.Common.AutoFixture; +using Bit.Test.Common.AutoFixture.Attributes; +using Xunit; + +namespace Bit.Core.Test.Services; + +[SutProviderCustomize] +public class LaunchDarklyFeatureServiceTests +{ + public static SutProvider GetSutProvider(IGlobalSettings globalSettings) + { + var fixture = new Fixture(); + return new SutProvider(fixture) + .SetDependency(globalSettings) + .Create(); + } + + [Fact] + public void Offline_WhenSelfHost() + { + var sutProvider = GetSutProvider(new Core.Settings.GlobalSettings() { SelfHosted = true }); + + Assert.False(sutProvider.Sut.IsOnline()); + } +} diff --git a/test/Core.Test/packages.lock.json b/test/Core.Test/packages.lock.json index f955a523a2..327a197e54 100644 --- a/test/Core.Test/packages.lock.json +++ b/test/Core.Test/packages.lock.json @@ -330,6 +330,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -1415,8 +1467,8 @@ }, "System.Collections.Immutable": { "type": "Transitive", - "resolved": "1.7.0", - "contentHash": "RVSM6wZUo6L2y6P3vN6gjUtyJ2IF2RVtrepF3J7nrDKfFQd5u/SnSUFclchYQis8/k5scHy9E+fVeKVQLnnkzw==" + "resolved": "1.7.1", + "contentHash": "B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==" }, "System.Collections.NonGeneric": { "type": "Transitive", @@ -2810,7 +2862,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -2834,6 +2886,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", diff --git a/test/Icons.Test/packages.lock.json b/test/Icons.Test/packages.lock.json index 9748de731c..478c923df3 100644 --- a/test/Icons.Test/packages.lock.json +++ b/test/Icons.Test/packages.lock.json @@ -304,6 +304,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2928,6 +2980,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2956,14 +3009,14 @@ "type": "Project", "dependencies": { "AngleSharp": "[0.16.1, )", - "Core": "[2023.1.0, )", - "SharedWeb": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "SharedWeb": "[2023.2.0, )" } }, "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2971,7 +3024,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -2983,9 +3036,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/test/Identity.IntegrationTest/packages.lock.json b/test/Identity.IntegrationTest/packages.lock.json index e1cbb115a1..46ed51957f 100644 --- a/test/Identity.IntegrationTest/packages.lock.json +++ b/test/Identity.IntegrationTest/packages.lock.json @@ -351,6 +351,58 @@ "RichardSzalay.MockHttp": "6.0.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -3129,7 +3181,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -3153,6 +3205,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3180,15 +3233,15 @@ "identity": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "SharedWeb": "[2023.1.0, )", + "Core": "[2023.2.0, )", + "SharedWeb": "[2023.2.0, )", "Swashbuckle.AspNetCore.SwaggerGen": "[6.5.0, )" } }, "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3196,7 +3249,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -3208,8 +3261,8 @@ "integrationtestcommon": { "type": "Project", "dependencies": { - "Common": "[2023.1.0, )", - "Identity": "[2023.1.0, )", + "Common": "[2023.2.0, )", + "Identity": "[2023.2.0, )", "Microsoft.AspNetCore.Mvc.Testing": "[6.0.5, )", "Microsoft.EntityFrameworkCore.InMemory": "[6.0.5, )", "Microsoft.Extensions.Configuration": "[6.0.1, )" @@ -3218,9 +3271,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/test/Identity.Test/packages.lock.json b/test/Identity.Test/packages.lock.json index 40b0b4f5d0..c4392c5417 100644 --- a/test/Identity.Test/packages.lock.json +++ b/test/Identity.Test/packages.lock.json @@ -340,6 +340,58 @@ "RichardSzalay.MockHttp": "6.0.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2996,7 +3048,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -3020,6 +3072,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3047,15 +3100,15 @@ "identity": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "SharedWeb": "[2023.1.0, )", + "Core": "[2023.2.0, )", + "SharedWeb": "[2023.2.0, )", "Swashbuckle.AspNetCore.SwaggerGen": "[6.5.0, )" } }, "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3063,7 +3116,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -3075,9 +3128,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/test/Infrastructure.EFIntegration.Test/packages.lock.json b/test/Infrastructure.EFIntegration.Test/packages.lock.json index 6c4e327eba..fbfc4eeeac 100644 --- a/test/Infrastructure.EFIntegration.Test/packages.lock.json +++ b/test/Infrastructure.EFIntegration.Test/packages.lock.json @@ -351,6 +351,58 @@ "RichardSzalay.MockHttp": "6.0.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2986,7 +3038,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -3010,6 +3062,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3039,8 +3092,8 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Common": "[2023.1.0, )", - "Core": "[2023.1.0, )", + "Common": "[2023.2.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "Moq": "[4.17.2, )", @@ -3051,7 +3104,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3059,7 +3112,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", diff --git a/test/Infrastructure.IntegrationTest/packages.lock.json b/test/Infrastructure.IntegrationTest/packages.lock.json index 87b67248d9..c69c91304c 100644 --- a/test/Infrastructure.IntegrationTest/packages.lock.json +++ b/test/Infrastructure.IntegrationTest/packages.lock.json @@ -308,6 +308,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2858,6 +2910,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2885,7 +2938,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2893,7 +2946,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", diff --git a/test/IntegrationTestCommon/packages.lock.json b/test/IntegrationTestCommon/packages.lock.json index df6bebf4ed..80b81c6521 100644 --- a/test/IntegrationTestCommon/packages.lock.json +++ b/test/IntegrationTestCommon/packages.lock.json @@ -327,6 +327,58 @@ "RichardSzalay.MockHttp": "6.0.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -3115,7 +3167,7 @@ "dependencies": { "AutoFixture.AutoNSubstitute": "[4.17.0, )", "AutoFixture.Xunit2": "[4.17.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Kralizek.AutoFixture.Extensions.MockHttp": "[1.2.0, )", "Microsoft.NET.Test.Sdk": "[17.1.0, )", "NSubstitute": "[4.3.0, )", @@ -3139,6 +3191,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -3166,15 +3219,15 @@ "identity": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "SharedWeb": "[2023.1.0, )", + "Core": "[2023.2.0, )", + "SharedWeb": "[2023.2.0, )", "Swashbuckle.AspNetCore.SwaggerGen": "[6.5.0, )" } }, "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -3182,7 +3235,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -3194,9 +3247,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/util/Migrator/packages.lock.json b/util/Migrator/packages.lock.json index 3f4398b3a3..d4d5971108 100644 --- a/util/Migrator/packages.lock.json +++ b/util/Migrator/packages.lock.json @@ -247,6 +247,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -1296,8 +1348,8 @@ }, "System.Collections.Immutable": { "type": "Transitive", - "resolved": "1.7.0", - "contentHash": "RVSM6wZUo6L2y6P3vN6gjUtyJ2IF2RVtrepF3J7nrDKfFQd5u/SnSUFclchYQis8/k5scHy9E+fVeKVQLnnkzw==" + "resolved": "1.7.1", + "contentHash": "B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==" }, "System.Collections.NonGeneric": { "type": "Transitive", @@ -2657,6 +2709,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", diff --git a/util/MySqlMigrations/packages.lock.json b/util/MySqlMigrations/packages.lock.json index 209f5237d7..7273cd36ef 100644 --- a/util/MySqlMigrations/packages.lock.json +++ b/util/MySqlMigrations/packages.lock.json @@ -246,6 +246,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2753,6 +2805,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2781,7 +2834,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", diff --git a/util/PostgresMigrations/packages.lock.json b/util/PostgresMigrations/packages.lock.json index 209f5237d7..7273cd36ef 100644 --- a/util/PostgresMigrations/packages.lock.json +++ b/util/PostgresMigrations/packages.lock.json @@ -246,6 +246,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2753,6 +2805,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2781,7 +2834,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", diff --git a/util/Setup/packages.lock.json b/util/Setup/packages.lock.json index 3b729e4899..52bae7539a 100644 --- a/util/Setup/packages.lock.json +++ b/util/Setup/packages.lock.json @@ -253,6 +253,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -1302,8 +1354,8 @@ }, "System.Collections.Immutable": { "type": "Transitive", - "resolved": "1.7.0", - "contentHash": "RVSM6wZUo6L2y6P3vN6gjUtyJ2IF2RVtrepF3J7nrDKfFQd5u/SnSUFclchYQis8/k5scHy9E+fVeKVQLnnkzw==" + "resolved": "1.7.1", + "contentHash": "B43Zsz5EfMwyEbnObwRxW5u85fzJma3lrDeGcSAV1qkhSRTNY5uXAByTn9h9ddNdhM+4/YoLc/CI43umjwIl9Q==" }, "System.Collections.NonGeneric": { "type": "Transitive", @@ -2663,6 +2715,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", diff --git a/util/SqlServerEFScaffold/packages.lock.json b/util/SqlServerEFScaffold/packages.lock.json index 3135598017..ff5ef22ebd 100644 --- a/util/SqlServerEFScaffold/packages.lock.json +++ b/util/SqlServerEFScaffold/packages.lock.json @@ -261,6 +261,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2797,25 +2849,25 @@ "type": "Project", "dependencies": { "Azure.Messaging.EventGrid": "[4.10.0, )", - "Commercial.Core": "[2023.1.0, )", - "Commercial.Infrastructure.EntityFramework": "[2023.1.0, )", - "Core": "[2023.1.0, )", - "SharedWeb": "[2023.1.0, )", + "Commercial.Core": "[2023.2.0, )", + "Commercial.Infrastructure.EntityFramework": "[2023.2.0, )", + "Core": "[2023.2.0, )", + "SharedWeb": "[2023.2.0, )", "Swashbuckle.AspNetCore": "[6.5.0, )" } }, "commercial.core": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )" + "Core": "[2023.2.0, )" } }, "commercial.infrastructure.entityframework": { "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } }, "core": { @@ -2835,6 +2887,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2862,7 +2915,7 @@ "infrastructure.dapper": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Dapper": "[2.0.123, )" } }, @@ -2870,7 +2923,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", @@ -2882,9 +2935,9 @@ "sharedweb": { "type": "Project", "dependencies": { - "Core": "[2023.1.0, )", - "Infrastructure.Dapper": "[2023.1.0, )", - "Infrastructure.EntityFramework": "[2023.1.0, )" + "Core": "[2023.2.0, )", + "Infrastructure.Dapper": "[2023.2.0, )", + "Infrastructure.EntityFramework": "[2023.2.0, )" } } } diff --git a/util/SqliteMigrations/packages.lock.json b/util/SqliteMigrations/packages.lock.json index 209f5237d7..7273cd36ef 100644 --- a/util/SqliteMigrations/packages.lock.json +++ b/util/SqliteMigrations/packages.lock.json @@ -246,6 +246,58 @@ "IdentityModel": "4.4.0" } }, + "LaunchDarkly.Cache": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "0bEnUVFVeW1TTDXb/bW6kS3FLQTLeGtw7Xh8yt6WNO56utVmtgcrMLvcnF6yeTn+N4FXrKfW09KkLNmK8YYQvw==" + }, + "LaunchDarkly.CommonSdk": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "YYYq+41gZRMQ8dIoMC6HOq/dI+4RY3HsexLLAaE9T1+1tVMeQkbCqak7sVeKX4QcE7xlXx23lWgipYUkRoRUyw==", + "dependencies": { + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.EventSource": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "DN44Ry5M4lyrjiF7LEu0Ijco7Wm8R7mJopN+giYsYjkQlszsXdFvm3POoehIDAOtL1HHl5bZvF9k9xK034u3IA==", + "dependencies": { + "LaunchDarkly.Logging": "[1.0.1, 3.0.0)" + } + }, + "LaunchDarkly.InternalSdk": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "jW8VEfFciuCcJUEuvSzmrbMVYYXwGL/ZWHUZLiA4aDOQ1LcEXp32uK405NQW/izEypUfWB+9TaSjPpFIC+5Wzw==", + "dependencies": { + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.Logging": "[2.0.0, 3.0.0)", + "System.Collections.Immutable": "1.7.1" + } + }, + "LaunchDarkly.Logging": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "lsLKNqAZ7HIlkdTIrf4FetfRA1SUDE3WlaZQn79aSVkLjYWEhUhkDDK7hORGh4JoA3V2gXN+cIvJQax2uR/ijA==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "6.0.0" + } + }, + "LaunchDarkly.ServerSdk": { + "type": "Transitive", + "resolved": "7.0.0", + "contentHash": "gkTWb+f5QlsXIqFAciBef3qKZU2y0Hy3Fpt4pvZoxNcnBKg2PNTDSnbpbYEKPeQ1yk1avNaI/tKprnahfrmJFg==", + "dependencies": { + "LaunchDarkly.Cache": "1.0.2", + "LaunchDarkly.CommonSdk": "6.0.0", + "LaunchDarkly.EventSource": "5.0.1", + "LaunchDarkly.InternalSdk": "3.1.0", + "LaunchDarkly.Logging": "2.0.0", + "System.Collections.Immutable": "1.7.1" + } + }, "libsodium": { "type": "Transitive", "resolved": "1.0.18.2", @@ -2753,6 +2805,7 @@ "Handlebars.Net": "[2.1.2, )", "IdentityServer4": "[4.1.2, )", "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "LaunchDarkly.ServerSdk": "[7.0.0, )", "MailKit": "[3.2.0, )", "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", @@ -2781,7 +2834,7 @@ "type": "Project", "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "[11.0.0, )", - "Core": "[2023.1.0, )", + "Core": "[2023.2.0, )", "Microsoft.EntityFrameworkCore.Relational": "[6.0.12, )", "Microsoft.EntityFrameworkCore.SqlServer": "[6.0.12, )", "Microsoft.EntityFrameworkCore.Sqlite": "[6.0.12, )", From 9cbf254fefdaab17ca8a1b21f5ae0c4754dad3a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Ch=C4=99ci=C5=84ski?= Date: Mon, 6 Mar 2023 15:39:30 +0100 Subject: [PATCH 6/6] [DEVOPS-1215] Build migrator CLI project (#2747) * Add migrator cli * Ran format * Acc build workflow * Change paths in push and pr triggers * Add build migrator cli to build workflow * Remove build migrator cli workflow * Add different levels of logs for verbose * Rename migratorCLI to MsSqlMigratorUtility * Add MsSqlMigratorUtility to solution file * Remove the clean command * Fix name and path in build workflow * Add retry logic to DbMigrator instead of invocation * Add migrator with retry mechanism as a new method * Log the migration start log to migrate database method * Fix name in build * Fix cli leftovers * Fix exception var name * String interpolation * Remove redundant check for number * Remove CommandDotNet * dotnet format * Remove CommandDotNet from packages lock * Remove all cli * Trying to remove usings to see if this fixes linter * Add usings back again - uild is failing * Remove implicit usings * Trying to fix linter issues * Trying to fix linter --- .github/workflows/build.yml | 56 + bitwarden-server.sln | 4 +- util/Migrator/DbMigrator.cs | 36 +- .../MsSqlMigratorUtility.csproj | 15 + util/MsSqlMigratorUtility/Program.cs | 78 + util/MsSqlMigratorUtility/packages.lock.json | 2723 +++++++++++++++++ util/Setup/Program.cs | 34 +- 7 files changed, 2912 insertions(+), 34 deletions(-) create mode 100644 util/MsSqlMigratorUtility/MsSqlMigratorUtility.csproj create mode 100644 util/MsSqlMigratorUtility/Program.cs create mode 100644 util/MsSqlMigratorUtility/packages.lock.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 27de690f80..0755c1f974 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -467,6 +467,58 @@ jobs: path: swagger.json if-no-files-found: error + build-mssqlmigratorutility: + name: Build MsSqlMigratorUtility + runs-on: ubuntu-22.04 + needs: + - lint + defaults: + run: + shell: bash + working-directory: "util/MsSqlMigratorUtility" + strategy: + fail-fast: false + matrix: + target: + - osx-x64 + - linux-x64 + - win-x64 + + steps: + - name: Checkout repo + uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846 + + - name: Print environment + run: | + whoami + dotnet --info + echo "GitHub ref: $GITHUB_REF" + echo "GitHub event: $GITHUB_EVENT" + + - name: Restore project + run: | + echo "Restore" + dotnet restore + + - name: Publish project + run: dotnet publish -c "Release" -o obj/build-output/publish -r ${{ matrix.target }} --self-contained true + + - name: Upload project artifact Windows + if: ${{ contains(matrix.target, 'win') == true }} + uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 + with: + name: MsSqlMigratorUtility-${{ matrix.target }} + path: util/MsSqlMigratorUtility/obj/build-output/publish/MsSqlMigratorUtility.exe + if-no-files-found: error + + - name: Upload project artifact + if: ${{ contains(matrix.target, 'win') == false }} + uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 + with: + name: MsSqlMigratorUtility-${{ matrix.target }} + path: util/MsSqlMigratorUtility/obj/build-output/publish/MsSqlMigratorUtility + if-no-files-found: error + check-failures: name: Check for failures if: always() @@ -478,6 +530,7 @@ jobs: - build-artifacts - build-docker - upload + - build-mssqlmigratorutility steps: - name: Check if any job failed if: | @@ -491,6 +544,7 @@ jobs: BUILD_ARTIFACTS_STATUS: ${{ needs.build-artifacts.result }} BUILD_DOCKER_STATUS: ${{ needs.build-docker.result }} UPLOAD_STATUS: ${{ needs.upload.result }} + BUILD_MSSQLMIGRATORUTILITY_STATUS: ${{ needs.build-mssqlmigratorutility.result }} run: | if [ "$CLOC_STATUS" = "failure" ]; then exit 1 @@ -504,6 +558,8 @@ jobs: exit 1 elif [ "$UPLOAD_STATUS" = "failure" ]; then exit 1 + elif [ "$BUILD_MSSQLMIGRATORUTILITY_STATUS" = "failure" ]; then + exit 1 fi - name: Login to Azure - Prod Subscription diff --git a/bitwarden-server.sln b/bitwarden-server.sln index a8c3e22559..e9eda387f0 100644 --- a/bitwarden-server.sln +++ b/bitwarden-server.sln @@ -1,4 +1,4 @@ - + Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29102.190 @@ -112,6 +112,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Infrastructure.IntegrationT EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SqliteMigrations", "util\SqliteMigrations\SqliteMigrations.csproj", "{07143DFA-F242-47A4-A15E-39C9314D4140}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MsSqlMigratorUtility", "util\MsSqlMigratorUtility\MsSqlMigratorUtility.csproj", "{D9A2CCBB-FB0A-4BBA-A9ED-BA9FF277C880}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/util/Migrator/DbMigrator.cs b/util/Migrator/DbMigrator.cs index 3ef9fdbc03..2dca5006ae 100644 --- a/util/Migrator/DbMigrator.cs +++ b/util/Migrator/DbMigrator.cs @@ -23,10 +23,40 @@ public class DbMigrator }.ConnectionString; } - public bool MigrateMsSqlDatabase(bool enableLogging = true, + public bool MigrateMsSqlDatabaseWithRetries(bool enableLogging = true, CancellationToken cancellationToken = default(CancellationToken)) { - if (enableLogging && _logger != null) + var attempt = 1; + + while (attempt < 10) + { + try + { + var success = MigrateDatabase(enableLogging, cancellationToken); + return success; + } + catch (SqlException ex) + { + if (ex.Message.Contains("Server is in script upgrade mode")) + { + attempt++; + _logger.LogInformation("Database is in script upgrade mode. " + + $"Trying again (attempt #{attempt})..."); + Thread.Sleep(20000); + } + else + { + throw; + } + } + } + return false; + } + + public bool MigrateDatabase(bool enableLogging = true, + CancellationToken cancellationToken = default(CancellationToken)) + { + if (_logger != null) { _logger.LogInformation(Constants.BypassFiltersEventId, "Migrating database."); } @@ -89,7 +119,7 @@ public class DbMigrator var upgrader = builder.Build(); var result = upgrader.PerformUpgrade(); - if (enableLogging && _logger != null) + if (_logger != null) { if (result.Successful) { diff --git a/util/MsSqlMigratorUtility/MsSqlMigratorUtility.csproj b/util/MsSqlMigratorUtility/MsSqlMigratorUtility.csproj new file mode 100644 index 0000000000..8fc5fcaeb1 --- /dev/null +++ b/util/MsSqlMigratorUtility/MsSqlMigratorUtility.csproj @@ -0,0 +1,15 @@ + + + + Exe + + + + + + + + + + + diff --git a/util/MsSqlMigratorUtility/Program.cs b/util/MsSqlMigratorUtility/Program.cs new file mode 100644 index 0000000000..517b9ecd98 --- /dev/null +++ b/util/MsSqlMigratorUtility/Program.cs @@ -0,0 +1,78 @@ +using Bit.Migrator; +using Microsoft.Extensions.Logging; + +internal class Program +{ + private static int Main(string[] args) + { + if (args.Length == 0) + { + Console.WriteLine("Please enter a database connection string argument."); + WriteUsageToConsole(); + return 1; + } + + if (args.Length == 1 && (args[0] == "--verbose" || args[0] == "-v")) + { + Console.WriteLine($"Please enter a database connection string argument before {args[0]} option."); + WriteUsageToConsole(); + return 1; + } + + var databaseConnectionString = args[0]; + + var verbose = false; + + if (args.Length == 2 && (args[1] == "--verbose" || args[1] == "-v")) + { + verbose = true; + } + + var success = MigrateDatabase(databaseConnectionString, verbose); + + if (!success) + { + return -1; + } + + return 0; + } + + private static void WriteUsageToConsole() + { + Console.WriteLine("Usage: MsSqlMigratorUtility "); + Console.WriteLine("Usage: MsSqlMigratorUtility -v|--verbose (for verbose output of migrator logs)"); + } + + private static bool MigrateDatabase(string databaseConnectionString, bool verbose = false, int attempt = 1) + { + var logger = CreateLogger(verbose); + + var migrator = new DbMigrator(databaseConnectionString, logger); + var success = migrator.MigrateMsSqlDatabaseWithRetries(verbose); + + return success; + } + + private static ILogger CreateLogger(bool verbose) + { + var loggerFactory = LoggerFactory.Create(builder => + { + builder + .AddFilter("Microsoft", LogLevel.Warning) + .AddFilter("System", LogLevel.Warning) + .AddConsole(); + + if (verbose) + { + builder.AddFilter("DbMigrator.DbMigrator", LogLevel.Debug); + } + else + { + builder.AddFilter("DbMigrator.DbMigrator", LogLevel.Information); + } + }); + var logger = loggerFactory.CreateLogger(); + return logger; + } +} diff --git a/util/MsSqlMigratorUtility/packages.lock.json b/util/MsSqlMigratorUtility/packages.lock.json new file mode 100644 index 0000000000..75580714cb --- /dev/null +++ b/util/MsSqlMigratorUtility/packages.lock.json @@ -0,0 +1,2723 @@ +{ + "version": 1, + "dependencies": { + "net6.0": { + "Microsoft.Extensions.Logging": { + "type": "Direct", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "System.Diagnostics.DiagnosticSource": "6.0.0" + } + }, + "Microsoft.Extensions.Logging.Console": { + "type": "Direct", + "requested": "[6.0.0, )", + "resolved": "6.0.0", + "contentHash": "gsqKzOEdsvq28QiXFxagmn1oRB9GeI5GgYCkoybZtQA0IUb7QPwf1WmN3AwJeNIsadTvIFQCiVK0OVIgKfOBGg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Configuration": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "System.Text.Json": "6.0.0" + } + }, + "AspNetCoreRateLimit": { + "type": "Transitive", + "resolved": "4.0.2", + "contentHash": "FzXAJFgaRjKfnKAVwjEEC7OAGQM5v/I3sQw2tpzmR0yHTCGhUAxZzDuwZiXTk8XLrI6vovzkqKkfKmiDl3nYMg==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.1", + "Microsoft.Extensions.Options": "6.0.0", + "Newtonsoft.Json": "13.0.1" + } + }, + "AspNetCoreRateLimit.Redis": { + "type": "Transitive", + "resolved": "1.0.1", + "contentHash": "CsSGy/7SXt6iBOKg0xCvsRjb/ZHshbtr2Of1MHc912L2sLnZqadUrTboyXZC+ZlgEBeJ14GyjPTu8ZyfEhGUnw==", + "dependencies": { + "AspNetCoreRateLimit": "4.0.2", + "StackExchange.Redis": "2.5.43" + } + }, + "AWSSDK.Core": { + "type": "Transitive", + "resolved": "3.7.10.11", + "contentHash": "B+M7ggPC0FogATRPQxDXL0eTusCQtXulW4zCuX39yiHV8+u9MEXRytcAw0ZA3zFBYYx6ovl9lklho6OQo1DRRQ==" + }, + "AWSSDK.SimpleEmail": { + "type": "Transitive", + "resolved": "3.7.0.150", + "contentHash": "rc/4ZnISfbgTfqz5/BWqMHBAzk4R09qfe1xkdJf2jXo44Zn2X72W8IiLLweBtmNhL7d8Tcf6UCtOHYkFwxHvug==", + "dependencies": { + "AWSSDK.Core": "[3.7.10.11, 4.0.0)" + } + }, + "AWSSDK.SQS": { + "type": "Transitive", + "resolved": "3.7.2.47", + "contentHash": "RPTVBsY333n+aIEqw148Envx9OQkE1/jhjlioNXDP6BrA3fAPN9A+2HoA02c0KSp/sazXYWg8w/kDL8FchH8Dw==", + "dependencies": { + "AWSSDK.Core": "[3.7.10.11, 4.0.0)" + } + }, + "Azure.Core": { + "type": "Transitive", + "resolved": "1.25.0", + "contentHash": "X8Dd4sAggS84KScWIjEbFAdt2U1KDolQopTPoHVubG2y3CM54f9l6asVrP5Uy384NWXjsspPYaJgz5xHc+KvTA==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.Diagnostics.DiagnosticSource": "4.6.0", + "System.Memory.Data": "1.0.2", + "System.Numerics.Vectors": "4.5.0", + "System.Text.Encodings.Web": "4.7.2", + "System.Text.Json": "4.7.2", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Azure.Extensions.AspNetCore.DataProtection.Blobs": { + "type": "Transitive", + "resolved": "1.2.1", + "contentHash": "wxvkC6DeWThBtaPbsWdicp5Ltya4J8JuhxmZJDQkhnXG7oihfu8RqBV6w/X1nMieuIOq1qQaGTvjx7nEHHfxSQ==", + "dependencies": { + "Azure.Core": "1.14.0", + "Azure.Storage.Blobs": "12.8.0", + "Microsoft.AspNetCore.DataProtection": "2.1.0" + } + }, + "Azure.Identity": { + "type": "Transitive", + "resolved": "1.6.0", + "contentHash": "EycyMsb6rD2PK9P0SyibFfEhvWWttdrYhyPF4f41uzdB/44yQlV+2Wehxyg489Rj6gbPvSPgbKq0xsHJBhipZA==", + "dependencies": { + "Azure.Core": "1.24.0", + "Microsoft.Identity.Client": "4.39.0", + "Microsoft.Identity.Client.Extensions.Msal": "2.19.3", + "System.Memory": "4.5.4", + "System.Security.Cryptography.ProtectedData": "4.7.0", + "System.Text.Json": "4.7.2", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Azure.Storage.Blobs": { + "type": "Transitive", + "resolved": "12.14.1", + "contentHash": "DvRBWUDMB2LjdRbsBNtz/LiVIYk56hqzSooxx4uq4rCdLj2M+7Vvoa1r+W35Dz6ZXL6p+SNcgEae3oZ+CkPfow==", + "dependencies": { + "Azure.Storage.Common": "12.13.0", + "System.Text.Json": "4.7.2" + } + }, + "Azure.Storage.Common": { + "type": "Transitive", + "resolved": "12.13.0", + "contentHash": "jDv8xJWeZY2Er9zA6QO25BiGolxg87rItt9CwAp7L/V9EPJeaz8oJydaNL9Wj0+3ncceoMgdiyEv66OF8YUwWQ==", + "dependencies": { + "Azure.Core": "1.25.0", + "System.IO.Hashing": "6.0.0" + } + }, + "Azure.Storage.Queues": { + "type": "Transitive", + "resolved": "12.12.0", + "contentHash": "PwrfymLYFmmOt6A0vMiDVhBV7RoOAKftzzvrbSM3W9cJKpkxAg57AhM7/wbNb3P8Uq0B73lBurkFiFzWK9PXHg==", + "dependencies": { + "Azure.Storage.Common": "12.13.0", + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" + } + }, + "BitPay.Light": { + "type": "Transitive", + "resolved": "1.0.1907", + "contentHash": "QTTIgXakHrRNQPxNyH7bZ7frm0bI8N6gRDtiqVyKG/QYQ+KfjN70xt0zQ0kO0zf8UBaKuwcV5B7vvpXtzR9ijg==", + "dependencies": { + "Newtonsoft.Json": "12.0.2" + } + }, + "Braintree": { + "type": "Transitive", + "resolved": "5.12.0", + "contentHash": "bV2tsVIvBQeKwULT4qPZUWhxSr8mFwyAAcvLDvDpCU0cMYPHzGSahha+ghUdgGMb317BqL34/Od59n2s3MkhOQ==", + "dependencies": { + "Newtonsoft.Json": "9.0.1", + "System.Xml.XPath.XmlDocument": "4.3.0" + } + }, + "dbup-core": { + "type": "Transitive", + "resolved": "5.0.8", + "contentHash": "d+3RxJDftcarp1Y7jI78HRdRWRC7VFjM+rB2CFHWDmao6OixuLrqiyEo1DeuMNrWLTR5mmE8p1YTpFOvozI9ZQ==", + "dependencies": { + "Microsoft.CSharp": "4.7.0", + "System.Diagnostics.TraceSource": "4.3.0" + } + }, + "dbup-sqlserver": { + "type": "Transitive", + "resolved": "5.0.8", + "contentHash": "b954l5Zgj9qgHtm16SLq2qGLJ0gIZtrWdh6JHoUsCLMHYW+0K2Oevabquw447At4U6X2t4CNuy7ZLHYf/Z/8yg==", + "dependencies": { + "Microsoft.Azure.Services.AppAuthentication": "1.6.2", + "Microsoft.Data.SqlClient": "5.0.1", + "dbup-core": "5.0.8" + } + }, + "DnsClient": { + "type": "Transitive", + "resolved": "1.7.0", + "contentHash": "2hrXR83b5g6/ZMJOA36hXp4t56yb7G1mF3Hg6IkrHxvtyaoXRn2WVdgDPN3V8+GugOlUBbTWXgPaka4dXw1QIg==", + "dependencies": { + "Microsoft.Win32.Registry": "5.0.0" + } + }, + "Fido2": { + "type": "Transitive", + "resolved": "3.0.1", + "contentHash": "S0Bz1vfcKlO4Jase3AWp5XnQ746psf4oGx5kL+D2A10j1SsjoAOAIIpanSwfi0cEepDHgk1bClcOKY5TjOzGdA==", + "dependencies": { + "Fido2.Models": "3.0.1", + "Microsoft.Extensions.Http": "6.0.0", + "NSec.Cryptography": "22.4.0", + "System.Formats.Cbor": "6.0.0", + "System.IdentityModel.Tokens.Jwt": "6.17.0" + } + }, + "Fido2.AspNet": { + "type": "Transitive", + "resolved": "3.0.1", + "contentHash": "5n5shEXD7RFUyTesjUHGDjkpgES7j4KotQo1GwUcS08k+fx+1tl/zCFHJ9RFDuUwO+S681ZILT2PyA67IPYpaA==", + "dependencies": { + "Fido2": "3.0.1", + "Fido2.Models": "3.0.1" + } + }, + "Fido2.Models": { + "type": "Transitive", + "resolved": "3.0.1", + "contentHash": "mgjcuGETuYSCUEaZG+jQeeuuEMkDLc4GDJHBvKDdOz6oSOWp5adPdWP4btZx7Pi+9fu4szN3JIjJmby67MaILw==" + }, + "Handlebars.Net": { + "type": "Transitive", + "resolved": "2.1.2", + "contentHash": "p60QyeBYpZmcZdIXRMqs9XySIBaxJ0lj3+QD0EJVr4ybTigOTCumXMMin5dPwjo9At1UwkDZ3gGwa1lmGjG6DA==", + "dependencies": { + "Microsoft.CSharp": "4.7.0" + } + }, + "IdentityModel": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "b18wrIx5wnZlMxAX7oVsE+nDtAJ4hajYlH0xPlaRvo4r/fz08K6pPeZvbiqS9nfNbzfIgLFmNX+FL9qR9ZR5PA==", + "dependencies": { + "Newtonsoft.Json": "11.0.2", + "System.Text.Encodings.Web": "4.7.0" + } + }, + "IdentityModel.AspNetCore.OAuth2Introspection": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "ZNdMZMaj9fqR3j50vYsu+1U3QGd6n8+fqwf+a8mCTcmXGor+HgFDfdq0mM34bsmD6uEgAQup7sv2ZW5kR36dbA==", + "dependencies": { + "IdentityModel": "4.0.0" + } + }, + "IdentityServer4": { + "type": "Transitive", + "resolved": "4.1.2", + "contentHash": "blaxxGuOA7v/w1q+fxn97wZ+x2ecG1ZD4mc/N/ZOXMNeFZZhqv+4LF26Gecyik3nWrJPmbMEtQbLmRsKG8k61w==", + "dependencies": { + "IdentityModel": "4.4.0", + "IdentityServer4.Storage": "4.1.2", + "Microsoft.AspNetCore.Authentication.OpenIdConnect": "3.1.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "5.6.0", + "Newtonsoft.Json": "12.0.2" + } + }, + "IdentityServer4.AccessTokenValidation": { + "type": "Transitive", + "resolved": "3.0.1", + "contentHash": "qu/M6UyN4o9NVep7q545Ms7hYAnsQqSdLbN1Fjjrn4m35lyBfeQPSSNzDryAKHbodyWOQfHaOqKEyMEJQ5Rpgw==", + "dependencies": { + "IdentityModel.AspNetCore.OAuth2Introspection": "4.0.1", + "Microsoft.AspNetCore.Authentication.JwtBearer": "3.0.0" + } + }, + "IdentityServer4.Storage": { + "type": "Transitive", + "resolved": "4.1.2", + "contentHash": "KoSffyZyyeCNTIyJiZnCuPakJ1QbCHlpty6gbWUj/7yl+w0PXIchgmmJnJSvddzBb8iZ2xew/vGlxWUIP17P2g==", + "dependencies": { + "IdentityModel": "4.4.0" + } + }, + "libsodium": { + "type": "Transitive", + "resolved": "1.0.18.2", + "contentHash": "flArHoVdscSzyV8ZdPV+bqqY2TTFlaN+xZf/vIqsmHI51KVcD/mOdUPaK3n/k/wGKz8dppiktXUqSmf3AXFgig==" + }, + "MailKit": { + "type": "Transitive", + "resolved": "3.2.0", + "contentHash": "5MTpTqmjqT7HPvYbP3HozRZMth5vSaT0ReN0iM3rAM4CgLI/R1qqtLDDNWGnFFIlcNzeJkZQRJJMkv8cgzWBbA==", + "dependencies": { + "MimeKit": "3.2.0" + } + }, + "Microsoft.AspNetCore.Authentication.JwtBearer": { + "type": "Transitive", + "resolved": "6.0.4", + "contentHash": "joDS3+lD1i9qcdFLWP4D316t3bHpezmTNOzbMIf9ZcRPX4QTuiUutZcQn/kZplf3BiLHqwUChZXxPjCAMKaKAQ==", + "dependencies": { + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.10.0" + } + }, + "Microsoft.AspNetCore.Authentication.OpenIdConnect": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "O1cAQYUTU8EfRqwc5/rfTns4E4hKlFlg59fuKRrST+PzsxI6H07KqRN/JjdYhAuVYxF8jPnIGbj+zuc5paOWUw==", + "dependencies": { + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "5.5.0" + } + }, + "Microsoft.AspNetCore.Cryptography.Internal": { + "type": "Transitive", + "resolved": "6.0.4", + "contentHash": "/0FX1OqckMmXAAlsHgBFNymTZuq4nuAOMhiwm6e8CEMi2aOjnMYwiMc7mtvpGTAO0O4C0zwx+iaChxDgvqit2A==" + }, + "Microsoft.AspNetCore.Cryptography.KeyDerivation": { + "type": "Transitive", + "resolved": "6.0.4", + "contentHash": "1Lbwrxg/HRY/nbrkcrB3EUXUYQN8Tkw7Ktgb6/2on2P7ybT5aM59H05gk+OBC8ZTBxwdle9e1tyT3wxEYKw5xw==", + "dependencies": { + "Microsoft.AspNetCore.Cryptography.Internal": "6.0.4" + } + }, + "Microsoft.AspNetCore.DataProtection": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "G+UoMHL0xiyFh30wkL7Bv/XL6eugTAKYhLPS53k1/Me1bYRwOOw+8VL/q0ppq3/yMzpHX+MkExaCTDlYl48FgA==", + "dependencies": { + "Microsoft.AspNetCore.Cryptography.Internal": "2.1.0", + "Microsoft.AspNetCore.DataProtection.Abstractions": "2.1.0", + "Microsoft.AspNetCore.Hosting.Abstractions": "2.1.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.1.0", + "Microsoft.Extensions.Logging.Abstractions": "2.1.0", + "Microsoft.Extensions.Options": "2.1.0", + "Microsoft.Win32.Registry": "4.5.0", + "System.Security.Cryptography.Xml": "4.5.0", + "System.Security.Principal.Windows": "4.5.0" + } + }, + "Microsoft.AspNetCore.DataProtection.Abstractions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "2+HVDhUqrnV9+EJNEewSy+Gk4hOVPzLPMpFDZI7kuH7NWxtbNkI6A6gT5lO2/kEPMyM8/iLWtohbOwjpC9rHVw==" + }, + "Microsoft.AspNetCore.Hosting.Abstractions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "1TQgBfd/NPZLR2o/h6l5Cml2ZCF5hsyV4h9WEwWwAIavrbdTnaNozGGcTOd4AOgQvogMM9UM1ajflm9Cwd0jLQ==", + "dependencies": { + "Microsoft.AspNetCore.Hosting.Server.Abstractions": "2.1.0", + "Microsoft.AspNetCore.Http.Abstractions": "2.1.0", + "Microsoft.Extensions.Hosting.Abstractions": "2.1.0" + } + }, + "Microsoft.AspNetCore.Hosting.Server.Abstractions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "YTKMi2vHX6P+WHEVpW/DS+eFHnwivCSMklkyamcK1ETtc/4j8H3VR0kgW8XIBqukNxhD8k5wYt22P7PhrWSXjQ==", + "dependencies": { + "Microsoft.AspNetCore.Http.Features": "2.1.0", + "Microsoft.Extensions.Configuration.Abstractions": "2.1.0" + } + }, + "Microsoft.AspNetCore.Http.Abstractions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "vbFDyKsSYBnxl3+RABtN79b0vsTcG66fDY8vD6Nqvu9uLtSej70Q5NcbGlnN6bJpZci5orSdgFTHMhBywivDPg==", + "dependencies": { + "Microsoft.AspNetCore.Http.Features": "2.1.0", + "System.Text.Encodings.Web": "4.5.0" + } + }, + "Microsoft.AspNetCore.Http.Features": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "UmkUePxRjsQW0j5euFFscBwjvTu25b8+qIK/2fI3GvcqQ+mkwgbWNAT8b/Gkoei1m2bTWC07lSdutuRDPPLcJA==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.1.0" + } + }, + "Microsoft.Azure.Amqp": { + "type": "Transitive", + "resolved": "2.4.11", + "contentHash": "7x5fu2f6TLQDDJS0sY5qW8/daFwJaY9O75YvU8RcUfRzbug+9YGjXUBxoRrprgyi0jxdBAMQL05p1s783SOSFQ==", + "dependencies": { + "System.Net.WebSockets.Client": "4.0.2", + "System.Runtime.Serialization.Primitives": "4.1.1" + } + }, + "Microsoft.Azure.Cosmos": { + "type": "Transitive", + "resolved": "3.24.0", + "contentHash": "QpUe5ho6OzlXwgcJVgAmOR7t3XLC9RI4t8T96RZY61pSOIllPOJdp30L0LwA16tKcqi5r2KayEgWO/MS9fh/6A==", + "dependencies": { + "Azure.Core": "1.3.0", + "Microsoft.Bcl.AsyncInterfaces": "1.0.0", + "Microsoft.Bcl.HashCode": "1.1.0", + "Newtonsoft.Json": "10.0.2", + "System.Buffers": "4.5.1", + "System.Collections.Immutable": "1.7.0", + "System.Configuration.ConfigurationManager": "4.7.0", + "System.Memory": "4.5.4", + "System.Numerics.Vectors": "4.5.0", + "System.Runtime.CompilerServices.Unsafe": "4.5.3", + "System.Threading.Tasks.Extensions": "4.5.4", + "System.ValueTuple": "4.5.0" + } + }, + "Microsoft.Azure.Cosmos.Table": { + "type": "Transitive", + "resolved": "1.0.8", + "contentHash": "ToeEd1yijM7nQfLYvdFLG//RjKPmfqm45eOm86UAKrxtyGI/CXqP8iL74mzBp6mZ9A/K/ZYA2fVdpH0xHR5Keg==", + "dependencies": { + "Microsoft.Azure.DocumentDB.Core": "2.11.2", + "Microsoft.OData.Core": "7.6.4", + "Newtonsoft.Json": "10.0.2" + } + }, + "Microsoft.Azure.DocumentDB.Core": { + "type": "Transitive", + "resolved": "2.11.2", + "contentHash": "cA8eWrTFbYrkHrz095x4CUGb7wqQgA1slzFZCYexhNwz6Zcn3v+S1yvWMGwGRmRjT0MKU9tYdFWgLfT0OjSycw==", + "dependencies": { + "NETStandard.Library": "1.6.0", + "Newtonsoft.Json": "9.0.1", + "System.Collections.Immutable": "1.3.0", + "System.Collections.NonGeneric": "4.0.1", + "System.Collections.Specialized": "4.0.1", + "System.Diagnostics.TraceSource": "4.0.0", + "System.Dynamic.Runtime": "4.0.11", + "System.Linq.Queryable": "4.0.1", + "System.Net.Http": "4.3.4", + "System.Net.NameResolution": "4.0.0", + "System.Net.NetworkInformation": "4.1.0", + "System.Net.Requests": "4.0.11", + "System.Net.Security": "4.3.2", + "System.Net.WebHeaderCollection": "4.0.1", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Security.SecureString": "4.0.0" + } + }, + "Microsoft.Azure.NotificationHubs": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "C2SssjX3e6/HIo1OCImQDDVOn64d1+gkgEmgxJryzkwixyivJHWH2YIgxZs33pyzVQcZWx5PR2tqLkQ7riSq8Q==", + "dependencies": { + "Microsoft.Extensions.Caching.Memory": "3.1.8", + "Newtonsoft.Json": "12.0.3" + } + }, + "Microsoft.Azure.ServiceBus": { + "type": "Transitive", + "resolved": "5.2.0", + "contentHash": "wyZNJggyFNtKxd+HgvcTiuRYuTjDGi+pgE4RcBvFbfvNiarKr5AOlE4Ne7on1eUJZuMuEa19wN5dj694HlP60A==", + "dependencies": { + "Microsoft.Azure.Amqp": "2.4.11", + "Microsoft.Azure.Services.AppAuthentication": "[1.0.3, 2.0.0)", + "Newtonsoft.Json": "10.0.3", + "System.Diagnostics.DiagnosticSource": "4.5.1", + "System.IdentityModel.Tokens.Jwt": "5.4.0" + } + }, + "Microsoft.Azure.Services.AppAuthentication": { + "type": "Transitive", + "resolved": "1.6.2", + "contentHash": "rSQhTv43ionr9rWvE4vxIe/i73XR5hoBYfh7UUgdaVOGW1MZeikR9RmgaJhonTylimCcCuJvrU0zXsSIFOsTGw==", + "dependencies": { + "Microsoft.IdentityModel.Clients.ActiveDirectory": "5.2.9", + "System.Diagnostics.Process": "4.3.0" + } + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "1.1.1", + "contentHash": "yuvf07qFWFqtK3P/MRkEKLhn5r2UbSpVueRziSqj0yJQIKFwG1pq9mOayK3zE5qZCTs0CbrwL9M6R8VwqyGy2w==" + }, + "Microsoft.Bcl.HashCode": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "J2G1k+u5unBV+aYcwxo94ip16Rkp65pgWFb0R6zwJipzWNMgvqlWeuI7/+R+e8bob66LnSG+llLJ+z8wI94cHg==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.SqlClient": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "uu8dfrsx081cSbEevWuZAvqdmANDGJkbLBL2G3j0LAZxX1Oy8RCVAaC4Lcuak6jNicWP6CWvHqBTIEmQNSxQlw==", + "dependencies": { + "Azure.Identity": "1.6.0", + "Microsoft.Data.SqlClient.SNI.runtime": "5.0.1", + "Microsoft.Identity.Client": "4.45.0", + "Microsoft.IdentityModel.JsonWebTokens": "6.21.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.21.0", + "Microsoft.SqlServer.Server": "1.0.0", + "Microsoft.Win32.Registry": "5.0.0", + "System.Buffers": "4.5.1", + "System.Configuration.ConfigurationManager": "5.0.0", + "System.Diagnostics.DiagnosticSource": "5.0.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime.Caching": "5.0.0", + "System.Security.Cryptography.Cng": "5.0.0", + "System.Security.Principal.Windows": "5.0.0", + "System.Text.Encoding.CodePages": "5.0.0", + "System.Text.Encodings.Web": "4.7.2" + } + }, + "Microsoft.Data.SqlClient.SNI.runtime": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "y0X5MxiNdbITJYoafJ2ruaX6hqO0twpCGR/ipiDOe85JKLU8WL4TuAQfDe5qtt3bND5Je26HnrarLSAMMnVTNg==" + }, + "Microsoft.Extensions.Caching.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "bcz5sSFJbganH0+YrfvIjJDIcKNW7TL07C4d1eTmXy/wOt52iz4LVogJb6pazs7W0+74j0YpXFErvp++Aq5Bsw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "6.0.0" + } + }, + "Microsoft.Extensions.Caching.Memory": { + "type": "Transitive", + "resolved": "3.1.8", + "contentHash": "u04q7+tgc8l6pQ5HOcr6scgapkQQHnrhpGoCaaAZd24R36/NxGsGxuhSmhHOrQx9CsBLe2CVBN/4CkLlxtnnXw==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "3.1.8", + "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.8", + "Microsoft.Extensions.Logging.Abstractions": "3.1.8", + "Microsoft.Extensions.Options": "3.1.8" + } + }, + "Microsoft.Extensions.Caching.StackExchangeRedis": { + "type": "Transitive", + "resolved": "6.0.6", + "contentHash": "bdVQpYm1hcHf0pyAypMjtDw3HjWQJ89UzloyyF1OBs56QlgA1naM498tP2Vjlho5vVRALMGPYzdRKCen8koubw==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "StackExchange.Redis": "2.2.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "tq2wXyh3fL17EMF2bXgRhU7JrbO3on93MRKYxzz4JzzvuGSA1l0W3GI9/tl8EO89TH+KWEymP7bcFway6z9fXg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "qWzV9o+ZRWq+pGm+1dF+R7qTgTYoXvbyowRoBxQJGfqTpqDun2eteerjRQhq5PQ/14S+lqto3Ft4gYaRyl4rdQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "6.0.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "b3ErKzND8LIC7o08QAVlKfaEIYEvLJbtmVbFZVBRXeu9YkKfSSzLZfR1SUfQPBIy9mKLhEtJgGYImkcMNaKE0A==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0" + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "pnyXV1LFOsYjGveuC07xp0YHIyGq7jRq5Ncb5zrrIieMLWVwgMyYxcOH0jTnBedDT4Gh1QinSqsjqzcieHk1og==", + "dependencies": { + "Microsoft.Extensions.Configuration": "6.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0" + } + }, + "Microsoft.Extensions.Configuration.FileExtensions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "V4Dth2cYMZpw3HhGw9XUDIijpI6gN+22LDt0AhufIgOppCUfpWX4483OmN+dFXRJkJLc8Tv0Q8QK+1ingT2+KQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "6.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Physical": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" + } + }, + "Microsoft.Extensions.Configuration.Json": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "GJGery6QytCzS/BxJ96klgG9in3uH26KcUBbiVG/coNDXCRq6LGVVlUT4vXq34KPuM+R2av+LeYdX9h4IZOCUg==", + "dependencies": { + "Microsoft.Extensions.Configuration": "6.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", + "System.Text.Json": "6.0.0" + } + }, + "Microsoft.Extensions.Configuration.UserSecrets": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "Fy8yr4V6obi7ZxvKYI1i85jqtwMq8tqyxQVZpRSkgeA8enqy/KvBIMdcuNdznlxQMZa72mvbHqb7vbg4Pyx95w==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Configuration.Json": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Physical": "6.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==" + }, + "Microsoft.Extensions.DependencyModel": { + "type": "Transitive", + "resolved": "3.0.0", + "contentHash": "Iaectmzg9Dc4ZbKX/FurrRjgO/I8rTumL5UU+Uube6vZuGetcnXoIgTA94RthFWePhdMVm8MMhVFJZdbzMsdyQ==", + "dependencies": { + "System.Text.Json": "4.6.0" + } + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "0pd4/fho0gC12rQswaGQxbU34jOS1TPS8lZPpkFCH68ppQjHNHYle9iRuHeev1LhrJ94YPvzcRd8UmIuFk23Qw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "6.0.0" + } + }, + "Microsoft.Extensions.FileProviders.Physical": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "QvkL7l0nM8udt3gfyu0Vw8bbCXblxaKOl7c2oBfgGy4LCURRaL9XWZX1FWJrQc43oMokVneVxH38iz+bY1sbhg==", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" + } + }, + "Microsoft.Extensions.FileSystemGlobbing": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "ip8jnL1aPiaPeKINCqaTEbvBFDmVx9dXQEBZ2HOBRXPD1eabGNqP/bKlsIcp7U2lGxiXd5xIhoFcmY8nM4Hdiw==" + }, + "Microsoft.Extensions.Hosting.Abstractions": { + "type": "Transitive", + "resolved": "3.1.8", + "contentHash": "7ZJUKwPipkDvuv2KJPZ3r01wp2AWNMiYH+61i0dL89F7QICknjKpWgLKLpTSUYFgl77S3b4264I6i4HzDdrb2A==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "3.1.8", + "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.8", + "Microsoft.Extensions.FileProviders.Abstractions": "3.1.8", + "Microsoft.Extensions.Logging.Abstractions": "3.1.8" + } + }, + "Microsoft.Extensions.Http": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "15+pa2G0bAMHbHewaQIdr/y6ag2H3yh4rd9hTXavtWDzQBkvpe2RMqFg8BxDpcQWssmjmBApGPcw93QRz6YcMg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0" + } + }, + "Microsoft.Extensions.Identity.Core": { + "type": "Transitive", + "resolved": "6.0.4", + "contentHash": "8vBsyGkA8ZI3lZvm1nf+9ynRC/TzPD+UtbdgTlKk+cz+AW5I41LrK8f/adGej5uXgprOA2DMjZw33vZG6vyXxA==", + "dependencies": { + "Microsoft.AspNetCore.Cryptography.KeyDerivation": "6.0.4", + "Microsoft.Extensions.Logging": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0" + } + }, + "Microsoft.Extensions.Identity.Stores": { + "type": "Transitive", + "resolved": "6.0.4", + "contentHash": "linRCnWBfnqg8qjrd9u/KMISy8O4a6X/GRhpHXU0ar654YQw9LJ/Ht+psx8QLqSX5EsCBbBCZzuamatH2FWIyQ==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "6.0.0", + "Microsoft.Extensions.Identity.Core": "6.0.4", + "Microsoft.Extensions.Logging": "6.0.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "Transitive", + "resolved": "6.0.1", + "contentHash": "dzB2Cgg+JmrouhjkcQGzSFjjvpwlq353i8oBQO2GWNjCXSzhbtBRUf28HSauWe7eib3wYOdb3tItdjRwAdwCSg==" + }, + "Microsoft.Extensions.Logging.Configuration": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "ZDskjagmBAbv+K8rYW9VhjPplhbOE63xUD0DiuydZJwt15dRyoqicYklLd86zzeintUc7AptDkHn+YhhYkYo8A==", + "dependencies": { + "Microsoft.Extensions.Configuration": "6.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Configuration.Binder": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0" + } + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "bXWINbTn0vC0FYc9GaQTISbxhQLAMrvtbuvD9N6JelEaIS/Pr62wUCinrq5bf1WRBGczt1v4wDhxFtVFNcMdUQ==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Configuration.Binder": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "Microsoft.Identity.Client": { + "type": "Transitive", + "resolved": "4.45.0", + "contentHash": "ircobISCLWbtE5eEoLKU+ldfZ8O41vg4lcy38KRj/znH17jvBiAl8oxcyNp89CsuqE3onxIpn21Ca7riyDDrRw==", + "dependencies": { + "Microsoft.IdentityModel.Abstractions": "6.18.0" + } + }, + "Microsoft.Identity.Client.Extensions.Msal": { + "type": "Transitive", + "resolved": "2.19.3", + "contentHash": "zVVZjn8aW7W79rC1crioDgdOwaFTQorsSO6RgVlDDjc7MvbEGz071wSNrjVhzR0CdQn6Sefx7Abf1o7vasmrLg==", + "dependencies": { + "Microsoft.Identity.Client": "4.38.0", + "System.Security.Cryptography.ProtectedData": "4.5.0" + } + }, + "Microsoft.IdentityModel.Abstractions": { + "type": "Transitive", + "resolved": "6.21.0", + "contentHash": "XeE6LQtD719Qs2IG7HDi1TSw9LIkDbJ33xFiOBoHbApVw/8GpIBCbW+t7RwOjErUDyXZvjhZliwRkkLb8Z1uzg==" + }, + "Microsoft.IdentityModel.Clients.ActiveDirectory": { + "type": "Transitive", + "resolved": "5.2.9", + "contentHash": "WhBAG/9hWiMHIXve4ZgwXP3spRwf7kFFfejf76QA5BvumgnPp8iDkDCiJugzAcpW1YaHB526z1UVxHhVT1E5qw==", + "dependencies": { + "Microsoft.CSharp": "4.3.0", + "NETStandard.Library": "1.6.1", + "System.ComponentModel.TypeConverter": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Net.Http": "4.3.4", + "System.Private.Uri": "4.3.2", + "System.Runtime.Serialization.Formatters": "4.3.0", + "System.Runtime.Serialization.Json": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Security.SecureString": "4.3.0", + "System.Xml.XDocument": "4.3.0", + "System.Xml.XmlDocument": "4.3.0" + } + }, + "Microsoft.IdentityModel.JsonWebTokens": { + "type": "Transitive", + "resolved": "6.21.0", + "contentHash": "d3h1/BaMeylKTkdP6XwRCxuOoDJZ44V9xaXr6gl5QxmpnZGdoK3bySo3OQN8ehRLJHShb94ElLUvoXyglQtgAw==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "6.21.0" + } + }, + "Microsoft.IdentityModel.Logging": { + "type": "Transitive", + "resolved": "6.21.0", + "contentHash": "tuEhHIQwvBEhMf8I50hy8FHmRSUkffDFP5EdLsSDV4qRcl2wvOPkQxYqEzWkh+ytW6sbdJGEXElGhmhDfAxAKg==", + "dependencies": { + "Microsoft.IdentityModel.Abstractions": "6.21.0" + } + }, + "Microsoft.IdentityModel.Protocols": { + "type": "Transitive", + "resolved": "6.21.0", + "contentHash": "0FqY5cTLQKtHrClzHEI+QxJl8OBT2vUiEQQB7UKk832JDiJJmetzYZ3AdSrPjN/3l3nkhByeWzXnhrX0JbifKg==", + "dependencies": { + "Microsoft.IdentityModel.Logging": "6.21.0", + "Microsoft.IdentityModel.Tokens": "6.21.0" + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect": { + "type": "Transitive", + "resolved": "6.21.0", + "contentHash": "vtSKL7n6EnAsLyxmiviusm6LKrblT2ndnNqN6rvVq6iIHAnPCK9E2DkDx6h1Jrpy1cvbp40r0cnTg23nhEAGTA==", + "dependencies": { + "Microsoft.IdentityModel.Protocols": "6.21.0", + "System.IdentityModel.Tokens.Jwt": "6.21.0" + } + }, + "Microsoft.IdentityModel.Tokens": { + "type": "Transitive", + "resolved": "6.21.0", + "contentHash": "AAEHZvZyb597a+QJSmtxH3n2P1nIJGpZ4Q89GTenknRx6T6zyfzf592yW/jA5e8EHN4tNMjjXHQaYWEq5+L05w==", + "dependencies": { + "Microsoft.CSharp": "4.5.0", + "Microsoft.IdentityModel.Logging": "6.21.0", + "System.Security.Cryptography.Cng": "4.5.0" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" + }, + "Microsoft.NETCore.Targets": { + "type": "Transitive", + "resolved": "1.1.3", + "contentHash": "3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==" + }, + "Microsoft.OData.Core": { + "type": "Transitive", + "resolved": "7.6.4", + "contentHash": "/EjnJezMBjXf8OjcShhGzPY7pOO0CopgoZGhS6xsP3t2uhC+O72IBHgtQ7F3v1rRXWVtJwLGhzE1GfJUlx3c4Q==", + "dependencies": { + "Microsoft.OData.Edm": "[7.6.4]", + "Microsoft.Spatial": "[7.6.4]" + } + }, + "Microsoft.OData.Edm": { + "type": "Transitive", + "resolved": "7.6.4", + "contentHash": "MSSmA6kIfpgFTtNpOnnayoSj/6KSzHC1U9KOjF7cTA1PG4tZ7rIMi1pvjFc8CmYEvP4cxGl/+vrCn+HpK26HTQ==" + }, + "Microsoft.Spatial": { + "type": "Transitive", + "resolved": "7.6.4", + "contentHash": "3mB+Frn4LU4yb5ie9R752QiRn0Hvp9PITkSRofV/Lzm9EyLM87Fy9ziqgz75O/c712dh6GxuypMSBUGmNFwMeA==" + }, + "Microsoft.SqlServer.Server": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "N4KeF3cpcm1PUHym1RmakkzfkEv3GRMyofVv40uXsQhCQeglr2OHNcUk2WOG51AKpGO8ynGpo9M/kFXSzghwug==" + }, + "Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "Microsoft.Win32.Registry": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "Microsoft.Win32.SystemEvents": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==" + }, + "MimeKit": { + "type": "Transitive", + "resolved": "3.2.0", + "contentHash": "l9YHMBhBUwY7qQHUp8fw0EvjcbmhN4Iggz6MdjqIShBf42+0nJTa5gu0kuupCOPuiARc9ZaS9c9f0gKz4OnxKw==", + "dependencies": { + "Portable.BouncyCastle": "1.9.0", + "System.Security.Cryptography.Pkcs": "6.0.0" + } + }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "1.6.1", + "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.Win32.Primitives": "4.3.0", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.Compression.ZipFile": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Net.Sockets": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Timer": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.1", + "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" + }, + "NSec.Cryptography": { + "type": "Transitive", + "resolved": "22.4.0", + "contentHash": "lEntcPYd7h3aZ8xxi/y/4TML7o8w0GEGqd+w4L1omqFLbdCBmhxJAeO2YBmv/fXbJKgKCQLm7+TD4bR605PEUQ==", + "dependencies": { + "libsodium": "[1.0.18.2, 1.0.19)" + } + }, + "Otp.NET": { + "type": "Transitive", + "resolved": "1.2.2", + "contentHash": "2hrZfkbzeWJ3tNXXt/1beg4IY+nS4F3gIfh4NVFvW0f6Pj51hGpiJ4prBz7Dmrr4ZYrA96rTERVGieZ4xYm7jA==" + }, + "Pipelines.Sockets.Unofficial": { + "type": "Transitive", + "resolved": "2.2.2", + "contentHash": "Bhk0FWxH1paI+18zr1g5cTL+ebeuDcBCR+rRFO+fKEhretgjs7MF2Mc1P64FGLecWp4zKCUOPzngBNrqVyY7Zg==", + "dependencies": { + "System.IO.Pipelines": "5.0.1" + } + }, + "Portable.BouncyCastle": { + "type": "Transitive", + "resolved": "1.9.0", + "contentHash": "eZZBCABzVOek+id9Xy04HhmgykF0wZg9wpByzrWN7q8qEI0Qen9b7tfd7w8VA3dOeesumMG7C5ZPy0jk7PSRHw==" + }, + "Quartz": { + "type": "Transitive", + "resolved": "3.4.0", + "contentHash": "N8350OAlQhd8zKg0ARFikGjh3bfAW/CF/KVxu2fTIlAALB/oC1eg54n/QAPYR5ryHuYyDr5G8/Qa4k+D/7OFRQ==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "2.1.1", + "System.Configuration.ConfigurationManager": "4.7.0", + "System.Diagnostics.DiagnosticSource": "4.7.1" + } + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "7VSGO0URRKoMEAq0Sc9cRz8mb6zbyx/BZDEWhgPdzzpmFhkam3fJ1DAGWFXBI4nGlma+uPKpfuMQP5LXRnOH5g==" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "0oAaTAm6e2oVH+/Zttt0cuhGaePQYKII1dY8iaqP7CvOpVKgLybKRFvQjXR2LtxXOXTVPNv14j0ot8uV+HrUmw==" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "G24ibsCNi5Kbz0oXWynBoRgtGvsw5ZSVEWjv13/KiCAM8C6wz9zzcCniMeQFIkJ2tasjo2kXlvlBZhplL51kGg==" + }, + "runtime.native.System": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.IO.Compression": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Net.Security": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "M2nN92ePS8BgQ2oi6Jj3PlTUzadYSIWLdZrHY1n1ZcW9o4wAQQ6W+aQ2lfq1ysZQfVCgDwY58alUdowrzezztg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Security.Cryptography.Apple": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "QR1OwtwehHxSeQvZKXe+iSd+d3XZNkEcuWMFYa2i0aG1l+lR739HPicKMlTbJst3spmeekDVBUS7SeS26s4U/g==", + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "I+GNKGg2xCHueRd1m9PzeEW7WLbNNLznmTuEi8/vZX71HudUbx1UTwlGkiwMri7JLl8hGaIAWnA/GONhu+LOyQ==" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "1Z3TAq1ytS1IBRtPXJvEUZdVsfWfeNEhBkbiOCGEl9wwAfsjP2lz3ZFDx5tq8p60/EqbS0HItG5piHuB71RjoA==" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "6mU/cVmmHtQiDXhnzUImxIcDL48GbTk+TsptXyJA+MIOG9LRjPoAQC/qBFB7X+UNyK86bmvGwC8t+M66wsYC8w==" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "vjwG0GGcTW/PPg6KVud8F9GLWYuAV1rrw1BKAqY0oh4jcUqg15oYF1+qkGR2x2ZHM4DQnWKQ7cJgYbfncz/lYg==" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "7KMFpTkHC/zoExs+PwP8jDCWcrK9H6L7soowT80CUx3e+nxP/AFnq0AQAW5W76z2WYbLAYCRyPfwYFG6zkvQRw==" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "xrlmRCnKZJLHxyyLIqkZjNXqgxnKdZxfItrPkjI+6pkRo5lHX8YvSZlWrSI5AVwLMi4HbNWP7064hcAWeZKp5w==" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "leXiwfiIkW7Gmn7cgnNcdtNAU70SjmKW3jxGj1iKHOvdn0zRWsgv/l2OJUO5zdGdiv2VRFnAsxxhDgMzofPdWg==" + }, + "SendGrid": { + "type": "Transitive", + "resolved": "9.27.0", + "contentHash": "kMyXRQ8hmN2bG3tYZ7T31Ufl1kXkpuP5+WBh1BJ32WY31DTnBTCVGURoIqfbTo/tRuQfAYLxra6C8cQGN6kk+A==", + "dependencies": { + "Newtonsoft.Json": "9.0.1", + "starkbank-ecdsa": "[1.3.3, 2.0.0)" + } + }, + "Sentry": { + "type": "Transitive", + "resolved": "3.16.0", + "contentHash": "Pkw4+51EDUQ0X02jdCZIpaM2Q4UO06VKGDE+dYYNxgvOirRXGKTKxRk4NPKJTLSTNl+2JyT9HoE7C6BTlYhLOw==" + }, + "Sentry.Serilog": { + "type": "Transitive", + "resolved": "3.16.0", + "contentHash": "GFTVfQdOFqZ9Vmo8EEZTx1EQMDRJjka/4v2CwxnAUh+sqHDICga4eOm4AyGzDBbE4s9iAHMgMUCceIqo+7z84w==", + "dependencies": { + "Sentry": "3.16.0", + "Serilog": "2.10.0" + } + }, + "Serilog": { + "type": "Transitive", + "resolved": "2.10.0", + "contentHash": "+QX0hmf37a0/OZLxM3wL7V6/ADvC1XihXN4Kq/p6d8lCPfgkRdiuhbWlMaFjR9Av0dy5F0+MBeDmDdRZN/YwQA==" + }, + "Serilog.AspNetCore": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "/JO/txIxRR61x1UXQAgUzG2Sx05o1QHCkokVBWrKzmAoDu+p5EtCAj7L/TVVg7Ezhh3GPiZ0JI9OJCmRO9tSRw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Serilog": "2.10.0", + "Serilog.Extensions.Hosting": "4.2.0", + "Serilog.Formatting.Compact": "1.1.0", + "Serilog.Settings.Configuration": "3.3.0", + "Serilog.Sinks.Console": "4.0.1", + "Serilog.Sinks.Debug": "2.0.0", + "Serilog.Sinks.File": "5.0.0" + } + }, + "Serilog.Extensions.Hosting": { + "type": "Transitive", + "resolved": "4.2.0", + "contentHash": "gT2keceCmPQR9EX0VpXQZvUgELdfE7yqJ7MOxBhm3WLCblcvRgswEOOTgok/DHObbM15A3V/DtF3VdVDQPIZzQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.8", + "Microsoft.Extensions.Hosting.Abstractions": "3.1.8", + "Microsoft.Extensions.Logging.Abstractions": "3.1.8", + "Serilog": "2.10.0", + "Serilog.Extensions.Logging": "3.1.0" + } + }, + "Serilog.Extensions.Logging": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "IWfem7wfrFbB3iw1OikqPFNPEzfayvDuN4WP7Ue1AVFskalMByeWk3QbtUXQR34SBkv1EbZ3AySHda/ErDgpcg==", + "dependencies": { + "Microsoft.Extensions.Logging": "2.0.0", + "Serilog": "2.9.0" + } + }, + "Serilog.Extensions.Logging.File": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "usO0qr4v9VCMBWiTJ1nQmAbPNCt40FrkDol6CpfCXbsxGZS/hH+YCueF7vvPQ32ATI0GWcMWiKRdjXEE7/HxTQ==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.0.0", + "Microsoft.Extensions.Configuration.Binder": "2.0.0", + "Serilog": "2.5.0", + "Serilog.Extensions.Logging": "2.0.2", + "Serilog.Formatting.Compact": "1.0.0", + "Serilog.Sinks.Async": "1.1.0", + "Serilog.Sinks.RollingFile": "3.3.0" + } + }, + "Serilog.Formatting.Compact": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "pNroKVjo+rDqlxNG5PXkRLpfSCuDOBY0ri6jp9PLe505ljqwhwZz8ospy2vWhQlFu5GkIesh3FcDs4n7sWZODA==", + "dependencies": { + "Serilog": "2.8.0" + } + }, + "Serilog.Settings.Configuration": { + "type": "Transitive", + "resolved": "3.3.0", + "contentHash": "7GNudISZwqaT902hqEL2OFGTZeUFWfnrNLupJkOqeF41AR3GjcxX+Hwb30xb8gG2/CDXsCMVfF8o0+8KY0fJNg==", + "dependencies": { + "Microsoft.Extensions.DependencyModel": "3.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "2.0.0", + "Serilog": "2.10.0" + } + }, + "Serilog.Sinks.Async": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "xll0Kanz2BkCxuv+F3p1WXr47jdsVM0GU1n1LZvK+18QiRZ/WGFNxSNw9EMKFV5ED5gr7MUpAe6PCMNL1HGUMA==", + "dependencies": { + "Serilog": "2.1.0", + "System.Collections.Concurrent": "4.0.12" + } + }, + "Serilog.Sinks.AzureCosmosDB": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "Im2/ZqjXQIpsd727qEo5Pq+br0MiNVuTvI40Yk7736tgjCpEx+omPHv4+c4fEAxnOP2kL9Ge6UoDFoDw3cjF2A==", + "dependencies": { + "Microsoft.Azure.Cosmos": "3.24.0", + "Microsoft.CSharp": "4.7.0", + "Newtonsoft.Json": "13.0.1", + "Serilog": "2.10.0", + "Serilog.Sinks.PeriodicBatching": "2.3.1" + } + }, + "Serilog.Sinks.Console": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "apLOvSJQLlIbKlbx+Y2UDHSP05kJsV7mou+fvJoRGs/iR+jC22r8cuFVMjjfVxz/AD4B2UCltFhE1naRLXwKNw==", + "dependencies": { + "Serilog": "2.10.0" + } + }, + "Serilog.Sinks.Debug": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "Y6g3OBJ4JzTyyw16fDqtFcQ41qQAydnEvEqmXjhwhgjsnG/FaJ8GUqF5ldsC/bVkK8KYmqrPhDO+tm4dF6xx4A==", + "dependencies": { + "Serilog": "2.10.0" + } + }, + "Serilog.Sinks.File": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==", + "dependencies": { + "Serilog": "2.10.0" + } + }, + "Serilog.Sinks.PeriodicBatching": { + "type": "Transitive", + "resolved": "2.3.1", + "contentHash": "LVYvqpqjSTD8dhfxRnzpxTs8/ys3V2q01MvaY3r0eKsDgpKK1U1y/5N6gFHgiesbxG0V+O5IWdz4+c1DzoNyOQ==", + "dependencies": { + "Serilog": "2.0.0" + } + }, + "Serilog.Sinks.RollingFile": { + "type": "Transitive", + "resolved": "3.3.0", + "contentHash": "2lT5X1r3GH4P0bRWJfhA7etGl8Q2Ipw9AACvtAHWRUSpYZ42NGVyHoVs2ALBZ/cAkkS+tA4jl80Zie144eLQPg==", + "dependencies": { + "Serilog.Sinks.File": "3.2.0", + "System.IO": "4.1.0", + "System.IO.FileSystem.Primitives": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Text.Encoding.Extensions": "4.0.11" + } + }, + "Serilog.Sinks.SyslogMessages": { + "type": "Transitive", + "resolved": "2.0.6", + "contentHash": "V2Yq2GEbk7taEPbpBLFzLXhrHrUzKf4sQu/zLrANU8XIoUn/Mr08M2E8PrcrWVXCj0R4xLMWYe0Z1sxOrMF3IA==", + "dependencies": { + "Serilog": "2.5.0", + "Serilog.Sinks.PeriodicBatching": "2.3.0" + } + }, + "StackExchange.Redis": { + "type": "Transitive", + "resolved": "2.5.43", + "contentHash": "YQ38jVbX1b5mBi6lizESou+NpV6QZpeo6ofRR6qeuqJ8ePOmhcwhje3nDTNIGEkfPSK0sLuF6pR5rtFyq2F46g==", + "dependencies": { + "Pipelines.Sockets.Unofficial": "2.2.2", + "System.Diagnostics.PerformanceCounter": "5.0.0" + } + }, + "starkbank-ecdsa": { + "type": "Transitive", + "resolved": "1.3.3", + "contentHash": "OblOaKb1enXn+dSp7tsx9yjwV+/BEKM9jFhshIkZTwCk7LuTFTp+wSon6rFzuPiIiTGtvVWQNUw2slHjGktJog==" + }, + "Stripe.net": { + "type": "Transitive", + "resolved": "40.0.0", + "contentHash": "SD1bGiF+sVQG3p2LXNTZ5rEG2aCnXIHokcxYS9yyW3dR01J0ryf+iNFOwid148yePZ0gCBcRxj3wiW1mTmP7UQ==", + "dependencies": { + "Newtonsoft.Json": "12.0.3", + "System.Configuration.ConfigurationManager": "6.0.0" + } + }, + "System.AppContext": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" + }, + "System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Concurrent": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "1.7.0", + "contentHash": "RVSM6wZUo6L2y6P3vN6gjUtyJ2IF2RVtrepF3J7nrDKfFQd5u/SnSUFclchYQis8/k5scHy9E+fVeKVQLnnkzw==" + }, + "System.Collections.NonGeneric": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "prtjIEMhGUnQq6RnPEYLpFt8AtLbp9yq2zxOSrY7KJJZrw25Fi97IzBqY7iqssbM61Ek5b8f3MG/sG1N2sN5KA==", + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Collections.Specialized": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Epx8PoVZR0iuOnJJDzp7pWvdfMMOAvpUo95pC4ScH2mJuXkKA2Y4aR3cG9qt2klHgSons1WFh4kcGW7cSXvrxg==", + "dependencies": { + "System.Collections.NonGeneric": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.ComponentModel": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.ComponentModel.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==", + "dependencies": { + "System.ComponentModel": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.ComponentModel.TypeConverter": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "16pQ6P+EdhcXzPiEK4kbA953Fu0MNG2ovxTZU81/qsCd1zPRsKc3uif5NgvllCY598k6bI0KUyKW8fanlfaDQg==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.NonGeneric": "4.3.0", + "System.Collections.Specialized": "4.3.0", + "System.ComponentModel": "4.3.0", + "System.ComponentModel.Primitives": "4.3.0", + "System.Globalization": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==", + "dependencies": { + "System.Security.Cryptography.ProtectedData": "6.0.0", + "System.Security.Permissions": "6.0.0" + } + }, + "System.Console": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Diagnostics.PerformanceCounter": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "kcQWWtGVC3MWMNXdMDWfrmIlFZZ2OdoeT6pSNVRtk9+Sa7jwdPiMlNwb0ZQcS7NRlT92pCfmjRtkSWUW3RAKwg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "5.0.0", + "Microsoft.Win32.Registry": "5.0.0", + "System.Configuration.ConfigurationManager": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Diagnostics.Process": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "J0wOX07+QASQblsfxmIMFc9Iq7KTXYL3zs2G/Xc704Ylv3NpuVdo6gij6V3PGiptTxqsK0K7CdXenRvKUnkA2g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.Win32.Primitives": "4.3.0", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Thread": "4.3.0", + "System.Threading.ThreadPool": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Diagnostics.Tools": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.TraceSource": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VnYp1NxGx8Ww731y2LJ1vpfb/DKVNKEZ8Jsh5SgQTZREL/YpWRArgh9pI8CDLmgHspZmLL697CaLvH85qQpRiw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Diagnostics.Tracing": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "6.0.0" + } + }, + "System.Dynamic.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Formats.Asn1": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "T6fD00dQ3NTbPDy31m4eQUwKW84s03z0N2C8HpOklyeaDgaJPa/TexP4/SkORMSOwc7WhKifnA6Ya33AkzmafA==" + }, + "System.Formats.Cbor": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "mGaLOoiw7KurJagOOcIsWUoCT5ACIiGxKlCcbYQASefBGXjnCcKTq5Hdjb94eEAKg38zXKlHw4c6EjzgBl9dIw==" + }, + "System.Globalization": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Globalization.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "System.IdentityModel.Tokens.Jwt": { + "type": "Transitive", + "resolved": "6.21.0", + "contentHash": "JRD8AuypBE+2zYxT3dMJomQVsPYsCqlyZhWel3J1d5nzQokSRyTueF+Q4ID3Jcu6zSZKuzOdJ1MLTkbQsDqcvQ==", + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "6.21.0", + "Microsoft.IdentityModel.Tokens": "6.21.0" + } + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.Compression": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + } + }, + "System.IO.Compression.ZipFile": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", + "dependencies": { + "System.Buffers": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.IO.FileSystem": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Rfm2jYCaUeGysFEZjDe7j1R4x6Z6BzumS/vUT5a1AA/AWJuGX71PoGB0RmpyX3VmrGqVnAwtfMn39OHR8Y/5+g==" + }, + "System.IO.Pipelines": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "qEePWsaq9LoEEIqhbGe6D5J8c9IqQOUuTzzV6wn1POlfdLkJliZY3OlB0j0f17uMWlqZYjH7txj+2YbyrIA8Yg==" + }, + "System.Linq": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Linq.Queryable": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "Yn/WfYe9RoRfmSLvUt2JerP0BTGGykCZkQPgojaxgzF2N0oPo+/AhB8TXOpdCcNlrG3VRtsamtK2uzsp3cqRVw==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.Reflection": "4.1.0", + "System.Reflection.Extensions": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0" + } + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" + }, + "System.Memory.Data": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==", + "dependencies": { + "System.Text.Encodings.Web": "4.7.2", + "System.Text.Json": "4.6.0" + } + }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.4", + "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.1", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2" + } + }, + "System.Net.NameResolution": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "JdqRdM1Qym3YehqdKIi5LHrpypP4JMfxKQSNCJ2z4WawkG0il+N3XfNeJOxll2XrTnG7WgYYPoeiu/KOwg0DQw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Tracing": "4.1.0", + "System.Globalization": "4.0.11", + "System.Net.Primitives": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Security.Principal.Windows": "4.0.0", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11", + "runtime.native.System": "4.0.0" + } + }, + "System.Net.NetworkInformation": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "Q0rfeiW6QsiZuicGjrFA7cRr2+kXex0JIljTTxzI09GIftB8k+aNL31VsQD1sI2g31cw7UGDTgozA/FgeNSzsQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.Win32.Primitives": "4.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Tracing": "4.1.0", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.IO.FileSystem": "4.0.1", + "System.IO.FileSystem.Primitives": "4.0.1", + "System.Linq": "4.1.0", + "System.Net.Primitives": "4.0.11", + "System.Net.Sockets": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Security.Principal.Windows": "4.0.0", + "System.Threading": "4.0.11", + "System.Threading.Overlapped": "4.0.1", + "System.Threading.Tasks": "4.0.11", + "System.Threading.Thread": "4.0.0", + "System.Threading.ThreadPool": "4.0.10", + "runtime.native.System": "4.0.0" + } + }, + "System.Net.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Net.Requests": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "vxGt7C0cZixN+VqoSW4Yakc1Y9WknmxauDqzxgpw/FnBdz4kQNN51l4wxdXX5VY1xjqy//+G+4CvJWp1+f+y6Q==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Diagnostics.Tracing": "4.1.0", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Net.Http": "4.1.0", + "System.Net.Primitives": "4.0.11", + "System.Net.WebHeaderCollection": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11" + } + }, + "System.Net.Security": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "xT2jbYpbBo3ha87rViHoTA6WdvqOAW37drmqyx/6LD8p7HEPT2qgdxoimRzWtPg8Jh4X5G9BV2seeTv4x6FYlA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.Win32.Primitives": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Claims": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Security.Principal": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.ThreadPool": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Security": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.2" + } + }, + "System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Net.WebHeaderCollection": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "XX2TIAN+wBSAIV51BU2FvvXMdstUa8b0FBSZmDWjZdwUMmggQSifpTOZ5fNH20z9ZCg2fkV1L5SsZnpO2RQDRQ==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0" + } + }, + "System.Net.WebSockets": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "2KJo8hir6Edi9jnMDAMhiJoI691xRBmKcbNpwjrvpIMOCTYOtBpSsSEGBxBDV7PKbasJNaFp1+PZz1D7xS41Hg==", + "dependencies": { + "Microsoft.Win32.Primitives": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Threading.Tasks": "4.0.11" + } + }, + "System.Net.WebSockets.Client": { + "type": "Transitive", + "resolved": "4.0.2", + "contentHash": "NUCcDroX4lCQXgOrzlwIZ1u9YJ0krfyF0wk0ONnyLUmcQoEiYV2/OfUPRqUwQBbpH1BlGApkLgoQUwMqb5+c1g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.2", + "Microsoft.Win32.Primitives": "4.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Diagnostics.Tracing": "4.1.0", + "System.Globalization": "4.0.11", + "System.Net.Primitives": "4.0.11", + "System.Net.WebHeaderCollection": "4.0.1", + "System.Net.WebSockets": "4.0.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Security.Cryptography.X509Certificates": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" + }, + "System.ObjectModel": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Private.DataContractSerialization": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "yDaJ2x3mMmjdZEDB4IbezSnCsnjQ4BxinKhRAaP6kEgL6Bb6jANWphs5SzyD8imqeC/3FxgsuXT6ykkiH1uUmA==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0", + "System.Xml.XmlDocument": "4.3.0", + "System.Xml.XmlSerializer": "4.3.0" + } + }, + "System.Private.Uri": { + "type": "Transitive", + "resolved": "4.3.2", + "contentHash": "o1+7RJnu3Ik3PazR7Z7tJhjPdE000Eq2KGLLWhqJJKXj04wrS8lwb1OFtDF9jzXXADhUuZNJZlPc98uwwqmpFA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.1", + "Microsoft.NETCore.Targets": "1.1.3" + } + }, + "System.Reflection": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.ILGeneration": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.Lightweight": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.TypeExtensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "System.Runtime.Caching": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "30D6MkO8WF9jVGWZIP0hmCN8l9BTY4LCsAzLIe4xFSXzs+AjDotR7DpSmj27pFskDURzUvqYYY0ikModgBTxWw==", + "dependencies": { + "System.Configuration.ConfigurationManager": "5.0.0" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + }, + "System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Runtime.Numerics": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.Serialization.Formatters": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KT591AkTNFOTbhZlaeMVvfax3RqhH1EJlcwF50Wm7sfnBLuHiOeZRRKrr1ns3NESkM20KPZ5Ol/ueMq5vg4QoQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.3.0" + } + }, + "System.Runtime.Serialization.Json": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "CpVfOH0M/uZ5PH+M9+Gu56K0j9lJw3M+PKRegTkcrY/stOIvRUeonggxNrfBYLA5WOHL2j15KNJuTuld3x4o9w==", + "dependencies": { + "System.IO": "4.3.0", + "System.Private.DataContractSerialization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Serialization.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Wz+0KOukJGAlXjtKr+5Xpuxf8+c8739RI1C+A2BoQZT+wMCCoMDDdO8/4IRHfaVINqL78GO8dW8G2lW/e45Mcw==", + "dependencies": { + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==" + }, + "System.Security.Claims": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Security.Principal": "4.3.0" + } + }, + "System.Security.Cryptography.Algorithms": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Cng": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "jIMXsKn94T9JY7PvPq/tMfqa6GAaHpElRDpmG+SuL+D3+sTw2M8VhnibKnN8Tq+4JqbPJ/f+BwtLeDMEnzAvRg==", + "dependencies": { + "System.Formats.Asn1": "5.0.0" + } + }, + "System.Security.Cryptography.Csp": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Pkcs": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "elM3x+xSRhzQysiqo85SbidJJ2YbZlnvmh+53TuSZHsD7dNuuEWser+9EFtY+rYupBwkq2avc6ZCO3/6qACgmg==", + "dependencies": { + "System.Formats.Asn1": "6.0.0" + } + }, + "System.Security.Cryptography.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Security.Cryptography.ProtectedData": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==" + }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.Xml": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "i2Jn6rGXR63J0zIklImGRkDIJL4b1NfPSEbIVHBlqoIb12lfXIigCbDRpDmIEzwSo/v1U5y/rYJdzZYSyCWxvg==", + "dependencies": { + "System.Security.Cryptography.Pkcs": "4.5.0", + "System.Security.Permissions": "4.5.0" + } + }, + "System.Security.Permissions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Windows.Extensions": "6.0.0" + } + }, + "System.Security.Principal": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, + "System.Security.SecureString": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "PnXp38O9q/2Oe4iZHMH60kinScv6QiiL2XH54Pj2t0Y6c2zKPEiAZsM/M3wBOHLNTBDFP0zfy13WN2M0qFz5jg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "System.Text.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.CodePages": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "NyscU59xX6Uo91qvhOs2Ccho3AR2TnZPomo1Z0K6YpyztBPM/A5VbkzOO19sy3A3i1TtEnTxA7bCe3Us+r5MWg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "5.0.0" + } + }, + "System.Text.Encoding.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Text.Json": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "6.0.0" + } + }, + "System.Text.RegularExpressions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Threading": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.Overlapped": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "f7aLuLkBoCQM2kng7zqLFBXz9Gk48gDK8lk1ih9rH/1arJJzZK9gJwNvPDhL6Ps/l6rwOr8jw+4FCHL0KKWiEg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Handles": "4.0.1" + } + }, + "System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==" + }, + "System.Threading.Thread": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "OHmbT+Zz065NKII/ZHcH9XO1dEuLGI1L2k7uYss+9C1jLxTC9kTZZuzUOyXHayRk+dft9CiDf3I/QZ0t8JKyBQ==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Threading.ThreadPool": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "k/+g4b7vjdd4aix83sTgC9VG6oXYKAktSfNIJUNGxPEj7ryEOfzHHhfnmsZvjxawwcD9HyWXKCXmPjX8U4zeSw==", + "dependencies": { + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Threading.Timer": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.ValueTuple": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==" + }, + "System.Windows.Extensions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==", + "dependencies": { + "System.Drawing.Common": "6.0.0" + } + }, + "System.Xml.ReaderWriter": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XmlDocument": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "lJ8AxvkX7GQxpC6GFCeBj8ThYVyQczx2+f/cWHJU8tjS7YfI6Cv6bon70jVEgs2CiFbmmM8b9j1oZVx0dSI2Ww==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XmlSerializer": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "MYoTCP7EZ98RrANESW05J5ZwskKDoN0AuZ06ZflnowE50LTpbR5yRg3tHckTVm5j/m47stuGgCrCHWePyHS70Q==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XmlDocument": "4.3.0" + } + }, + "System.Xml.XPath": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "v1JQ5SETnQusqmS3RwStF7vwQ3L02imIzl++sewmt23VGygix04pEH+FCj1yWb+z4GDzKiljr1W7Wfvrx0YwgA==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, + "System.Xml.XPath.XmlDocument": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "A/uxsWi/Ifzkmd4ArTLISMbfFs6XpRPsXZonrIqyTY70xi8t+mDtvSM5Os0RqyRDobjMBwIDHDL4NOIbkDwf7A==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XPath": "4.3.0", + "System.Xml.XmlDocument": "4.3.0" + } + }, + "YubicoDotNetClient": { + "type": "Transitive", + "resolved": "1.2.0", + "contentHash": "uP5F3Ko1gqZi3lwS2R/jAAwhBxXs/6PKDpS6FdQjsBA5qmF0hQmbtfxM6QHTXOMoWbUtfetG7+LtgmG8T5zDIg==", + "dependencies": { + "NETStandard.Library": "1.6.1" + } + }, + "core": { + "type": "Project", + "dependencies": { + "AWSSDK.SQS": "[3.7.2.47, )", + "AWSSDK.SimpleEmail": "[3.7.0.150, )", + "AspNetCoreRateLimit": "[4.0.2, )", + "AspNetCoreRateLimit.Redis": "[1.0.1, )", + "Azure.Extensions.AspNetCore.DataProtection.Blobs": "[1.2.1, )", + "Azure.Storage.Blobs": "[12.14.1, )", + "Azure.Storage.Queues": "[12.12.0, )", + "BitPay.Light": "[1.0.1907, )", + "Braintree": "[5.12.0, )", + "DnsClient": "[1.7.0, )", + "Fido2.AspNet": "[3.0.1, )", + "Handlebars.Net": "[2.1.2, )", + "IdentityServer4": "[4.1.2, )", + "IdentityServer4.AccessTokenValidation": "[3.0.1, )", + "MailKit": "[3.2.0, )", + "Microsoft.AspNetCore.Authentication.JwtBearer": "[6.0.4, )", + "Microsoft.Azure.Cosmos.Table": "[1.0.8, )", + "Microsoft.Azure.NotificationHubs": "[4.1.0, )", + "Microsoft.Azure.ServiceBus": "[5.2.0, )", + "Microsoft.Data.SqlClient": "[5.0.1, )", + "Microsoft.Extensions.Caching.StackExchangeRedis": "[6.0.6, )", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "[6.0.1, )", + "Microsoft.Extensions.Configuration.UserSecrets": "[6.0.1, )", + "Microsoft.Extensions.Identity.Stores": "[6.0.4, )", + "Newtonsoft.Json": "[13.0.1, )", + "Otp.NET": "[1.2.2, )", + "Quartz": "[3.4.0, )", + "SendGrid": "[9.27.0, )", + "Sentry.Serilog": "[3.16.0, )", + "Serilog.AspNetCore": "[5.0.0, )", + "Serilog.Extensions.Logging": "[3.1.0, )", + "Serilog.Extensions.Logging.File": "[2.0.0, )", + "Serilog.Sinks.AzureCosmosDB": "[2.0.0, )", + "Serilog.Sinks.SyslogMessages": "[2.0.6, )", + "Stripe.net": "[40.0.0, )", + "YubicoDotNetClient": "[1.2.0, )" + } + }, + "migrator": { + "type": "Project", + "dependencies": { + "Core": "[2023.2.1, )", + "Microsoft.Extensions.Logging": "[6.0.0, )", + "dbup-sqlserver": "[5.0.8, )" + } + } + } + } +} \ No newline at end of file diff --git a/util/Setup/Program.cs b/util/Setup/Program.cs index e11c4ece9a..cd95ee1742 100644 --- a/util/Setup/Program.cs +++ b/util/Setup/Program.cs @@ -1,7 +1,6 @@ using System.Globalization; using System.Net.Http.Json; using Bit.Migrator; -using Microsoft.Data.SqlClient; namespace Bit.Setup; @@ -187,35 +186,10 @@ public class Program private static void MigrateDatabase(int attempt = 1) { - try - { - Helpers.WriteLine(_context, "Migrating database."); - var vaultConnectionString = Helpers.GetValueFromEnvFile("global", - "globalSettings__sqlServer__connectionString"); - var migrator = new DbMigrator(vaultConnectionString, null); - var success = migrator.MigrateMsSqlDatabase(false); - if (success) - { - Helpers.WriteLine(_context, "Migration successful."); - } - else - { - Helpers.WriteLine(_context, "Migration failed."); - } - } - catch (SqlException e) - { - if (e.Message.Contains("Server is in script upgrade mode") && attempt < 10) - { - var nextAttempt = attempt + 1; - Helpers.WriteLine(_context, "Database is in script upgrade mode. " + - "Trying again (attempt #{0})...", nextAttempt); - System.Threading.Thread.Sleep(20000); - MigrateDatabase(nextAttempt); - return; - } - throw; - } + var vaultConnectionString = Helpers.GetValueFromEnvFile("global", + "globalSettings__sqlServer__connectionString"); + var migrator = new DbMigrator(vaultConnectionString, null); + migrator.MigrateMsSqlDatabaseWithRetries(false); } private static bool ValidateInstallation()