diff --git a/util/MySqlMigrations/HelperScripts/2023-12-06_00_AccessAllCollectionGroups.sql b/util/MySqlMigrations/HelperScripts/2023-12-06_00_AccessAllCollectionGroups.sql
deleted file mode 100644
index 07783974bc..0000000000
--- a/util/MySqlMigrations/HelperScripts/2023-12-06_00_AccessAllCollectionGroups.sql
+++ /dev/null
@@ -1,28 +0,0 @@
--- Step 1: Create a temporary table to store the groups with AccessAll = 1
-CREATE TEMPORARY TABLE IF NOT EXISTS TempGroup AS
-SELECT `Id` AS `GroupId`, `OrganizationId`
-FROM `Group`
-WHERE `AccessAll` = 1;
-
--- Step 2: Update existing rows in `CollectionGroup`
-UPDATE `CollectionGroups` CG
-INNER JOIN `Collection` C ON CG.`CollectionId` = C.`Id`
-INNER JOIN TempGroup TG ON CG.`GroupId` = TG.`GroupId`
-SET
- CG.`ReadOnly` = 0,
- CG.`HidePasswords` = 0,
- CG.`Manage` = 0
-WHERE C.`OrganizationId` = TG.`OrganizationId`;
-
--- Step 3: Insert new rows into `CollectionGroup`
-INSERT INTO `CollectionGroups` (`CollectionId`, `GroupId`, `ReadOnly`, `HidePasswords`, `Manage`)
-SELECT C.`Id`, TG.`GroupId`, 0, 0, 0
-FROM `Collection` C
-INNER JOIN TempGroup TG
- ON C.`OrganizationId` = TG.`OrganizationId`
-LEFT JOIN `CollectionGroups` CG
- ON CG.`CollectionId` = C.`Id` AND CG.`GroupId` = TG.`GroupId`
-WHERE CG.`CollectionId` IS NULL;
-
--- Step 4: Drop the temporary table
-DROP TEMPORARY TABLE IF EXISTS TempGroup;
diff --git a/util/MySqlMigrations/HelperScripts/2024-01-12_00_AccessAllCollectionGroups.sql b/util/MySqlMigrations/HelperScripts/2024-01-12_00_AccessAllCollectionGroups.sql
new file mode 100644
index 0000000000..47fddf3f7f
--- /dev/null
+++ b/util/MySqlMigrations/HelperScripts/2024-01-12_00_AccessAllCollectionGroups.sql
@@ -0,0 +1,66 @@
+-- Step 1: Create a temporary table to store the groups with AccessAll = 1
+CREATE TEMPORARY TABLE IF NOT EXISTS TempGroup AS
+SELECT `Id` AS `GroupId`, `OrganizationId`
+FROM `Group`
+WHERE `AccessAll` = 1;
+
+-- Step 2: Create a temporary table to store distinct OrganizationUserIds
+CREATE TEMPORARY TABLE IF NOT EXISTS TempOrganizationUsers AS
+SELECT DISTINCT GU.`OrganizationUserId`
+FROM `GroupUser` GU
+JOIN TempGroup TG ON GU.`GroupId` = TG.`GroupId`;
+
+-- Step 3: Update existing rows in `CollectionGroups`
+UPDATE `CollectionGroups` CG
+INNER JOIN `Collection` C ON CG.`CollectionId` = C.`Id`
+INNER JOIN TempGroup TG ON CG.`GroupId` = TG.`GroupId`
+SET
+ CG.`ReadOnly` = 0,
+ CG.`HidePasswords` = 0,
+ CG.`Manage` = 0
+WHERE C.`OrganizationId` = TG.`OrganizationId`;
+
+-- Step 4: Insert new rows into `CollectionGroups`
+INSERT INTO `CollectionGroups` (`CollectionId`, `GroupId`, `ReadOnly`, `HidePasswords`, `Manage`)
+SELECT C.`Id`, TG.`GroupId`, 0, 0, 0
+FROM `Collection` C
+INNER JOIN TempGroup TG
+ ON C.`OrganizationId` = TG.`OrganizationId`
+LEFT JOIN `CollectionGroups` CG
+ ON CG.`CollectionId` = C.`Id` AND CG.`GroupId` = TG.`GroupId`
+WHERE CG.`CollectionId` IS NULL;
+
+-- Step 5: Update Group to clear AccessAll flag
+UPDATE `Group` G
+INNER JOIN TempGroup TG ON G.`Id` = TG.`GroupId`
+SET G.`AccessAll` = 0;
+
+-- Step 6: Update User AccountRevisionDate for each unique OrganizationUserId
+DECLARE Step1OrganizationUserId UUID;
+
+DECLARE UniqueOrgUserIdCursor CURSOR FOR
+SELECT `OrganizationUserId`
+FROM TempOrganizationUsers;
+
+OPEN UniqueOrgUserIdCursor;
+FETCH NEXT FROM UniqueOrgUserIdCursor INTO Step1OrganizationUserId;
+
+WHILE (FETCH_STATUS = 0) DO
+ -- Update User AccountRevisionDate for the current OrganizationUserId
+ UPDATE `User` U
+ SET U.`AccountRevisionDate` = UTC_TIMESTAMP()
+ FROM `User` U
+ INNER JOIN `OrganizationUser` OU ON OU.`UserId` = U.`Id`
+ WHERE OU.`Id` = Step1OrganizationUserId
+ AND OU.`Status` = 2;
+
+ -- Fetch the next row
+ FETCH NEXT FROM UniqueOrgUserIdCursor INTO Step1OrganizationUserId;
+END WHILE;
+
+CLOSE UniqueOrgUserIdCursor;
+DEALLOCATE UniqueOrgUserIdCursor;
+
+-- Step 7: Drop the temporary tables
+DROP TEMPORARY TABLE IF EXISTS TempGroup;
+DROP TEMPORARY TABLE IF EXISTS TempOrganizationUsers;
diff --git a/util/MySqlMigrations/HelperScripts/2023-12-06_01_AccessAllCollectionUsers.sql b/util/MySqlMigrations/HelperScripts/2024-01-12_01_AccessAllCollectionUsers.sql
similarity index 100%
rename from util/MySqlMigrations/HelperScripts/2023-12-06_01_AccessAllCollectionUsers.sql
rename to util/MySqlMigrations/HelperScripts/2024-01-12_01_AccessAllCollectionUsers.sql
diff --git a/util/MySqlMigrations/HelperScripts/2023-12-06_02_ManagersEditAssignedCollectionUsers.sql b/util/MySqlMigrations/HelperScripts/2024-01-12_02_ManagersEditAssignedCollectionUsers.sql
similarity index 100%
rename from util/MySqlMigrations/HelperScripts/2023-12-06_02_ManagersEditAssignedCollectionUsers.sql
rename to util/MySqlMigrations/HelperScripts/2024-01-12_02_ManagersEditAssignedCollectionUsers.sql
diff --git a/util/MySqlMigrations/HelperScripts/2024-01-12_03_EnableOrgsFlexibleCollections.sql b/util/MySqlMigrations/HelperScripts/2024-01-12_03_EnableOrgsFlexibleCollections.sql
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/util/MySqlMigrations/Migrations/20231219154701_FCAccessAllCollectionGroups.Designer.cs b/util/MySqlMigrations/Migrations/20240112123253_FCAccessAllCollectionGroups.Designer.cs
similarity index 96%
rename from util/MySqlMigrations/Migrations/20231219154701_FCAccessAllCollectionGroups.Designer.cs
rename to util/MySqlMigrations/Migrations/20240112123253_FCAccessAllCollectionGroups.Designer.cs
index d4f482acd7..d5ad94cc78 100644
--- a/util/MySqlMigrations/Migrations/20231219154701_FCAccessAllCollectionGroups.Designer.cs
+++ b/util/MySqlMigrations/Migrations/20240112123253_FCAccessAllCollectionGroups.Designer.cs
@@ -5,13 +5,14 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Bit.MySqlMigrations.Migrations
{
[DbContext(typeof(DatabaseContext))]
- [Migration("20231219154701_FCAccessAllCollectionGroups")]
+ [Migration("20240112123253_FCAccessAllCollectionGroups")]
partial class FCAccessAllCollectionGroups
{
///
@@ -68,6 +69,9 @@ namespace Bit.MySqlMigrations.Migrations
b.Property("ExpirationDate")
.HasColumnType("datetime(6)");
+ b.Property("FlexibleCollections")
+ .HasColumnType("tinyint(1)");
+
b.Property("Gateway")
.HasColumnType("tinyint unsigned");
@@ -203,6 +207,9 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("Id", "Enabled")
+ .HasAnnotation("Npgsql:IndexInclude", new[] { "UseTotp" });
+
b.ToTable("Organization", (string)null);
});
@@ -231,7 +238,12 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
- b.HasIndex("OrganizationId");
+ b.HasIndex("OrganizationId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("OrganizationId", "Type")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Policy", (string)null);
});
@@ -478,11 +490,13 @@ namespace Bit.MySqlMigrations.Migrations
modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.Grant", b =>
{
- b.Property("Key")
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property("ClientId")
+ .IsRequired()
.HasMaxLength(200)
.HasColumnType("varchar(200)");
@@ -493,6 +507,7 @@ namespace Bit.MySqlMigrations.Migrations
.HasColumnType("datetime(6)");
b.Property("Data")
+ .IsRequired()
.HasColumnType("longtext");
b.Property("Description")
@@ -502,6 +517,11 @@ namespace Bit.MySqlMigrations.Migrations
b.Property("ExpirationDate")
.HasColumnType("datetime(6)");
+ b.Property("Key")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
b.Property("SessionId")
.HasMaxLength(100)
.HasColumnType("varchar(100)");
@@ -511,10 +531,15 @@ namespace Bit.MySqlMigrations.Migrations
.HasColumnType("varchar(200)");
b.Property("Type")
+ .IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
- b.HasKey("Key");
+ b.HasKey("Id")
+ .HasAnnotation("SqlServer:Clustered", true);
+
+ b.HasIndex("Key")
+ .IsUnique();
b.ToTable("Grant", (string)null);
});
@@ -765,7 +790,15 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
- b.HasIndex("UserId");
+ b.HasIndex("Identifier")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "Identifier")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Device", (string)null);
});
@@ -838,6 +871,9 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("Date", "OrganizationId", "ActingUserId", "CipherId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.ToTable("Event", (string)null);
});
@@ -1038,6 +1074,9 @@ namespace Bit.MySqlMigrations.Migrations
b.HasIndex("SponsoringOrganizationId");
+ b.HasIndex("SponsoringOrganizationUserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.ToTable("OrganizationSponsorship", (string)null);
});
@@ -1089,9 +1128,15 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
- b.HasIndex("OrganizationId");
+ b.HasIndex("OrganizationId")
+ .HasAnnotation("SqlServer:Clustered", false);
- b.HasIndex("UserId");
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "OrganizationId", "Status")
+ .HasAnnotation("Npgsql:IndexInclude", new[] { "AccessAll" })
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("OrganizationUser", (string)null);
});
@@ -1146,9 +1191,16 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("DeletionDate")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.HasIndex("OrganizationId");
- b.HasIndex("UserId");
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "OrganizationId")
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Send", (string)null);
});
@@ -1226,7 +1278,11 @@ namespace Bit.MySqlMigrations.Migrations
b.HasIndex("OrganizationId");
- b.HasIndex("UserId");
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "OrganizationId", "CreationDate")
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Transaction", (string)null);
});
@@ -1376,6 +1432,13 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("Email")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("Premium", "PremiumExpirationDate", "RenewalReminderDate")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.ToTable("User", (string)null);
});
diff --git a/util/MySqlMigrations/Migrations/20231219154701_FCAccessAllCollectionGroups.cs b/util/MySqlMigrations/Migrations/20240112123253_FCAccessAllCollectionGroups.cs
similarity index 90%
rename from util/MySqlMigrations/Migrations/20231219154701_FCAccessAllCollectionGroups.cs
rename to util/MySqlMigrations/Migrations/20240112123253_FCAccessAllCollectionGroups.cs
index 3764df6ad0..e87f406a91 100644
--- a/util/MySqlMigrations/Migrations/20231219154701_FCAccessAllCollectionGroups.cs
+++ b/util/MySqlMigrations/Migrations/20240112123253_FCAccessAllCollectionGroups.cs
@@ -7,7 +7,7 @@ namespace Bit.MySqlMigrations.Migrations;
public partial class FCAccessAllCollectionGroups : Migration
{
- private const string _accessAllCollectionGroupsScript = "MySqlMigrations.HelperScripts.2023-12-06_00_AccessAllCollectionGroups.sql";
+ private const string _accessAllCollectionGroupsScript = "MySqlMigrations.HelperScripts.2024-01-12_00_AccessAllCollectionGroups.sql";
protected override void Up(MigrationBuilder migrationBuilder)
{
diff --git a/util/MySqlMigrations/Migrations/20231219154733_FCAccessAllCollectionUsers.Designer.cs b/util/MySqlMigrations/Migrations/20240112123310_FCAccessAllCollectionUsers.Designer.cs
similarity index 96%
rename from util/MySqlMigrations/Migrations/20231219154733_FCAccessAllCollectionUsers.Designer.cs
rename to util/MySqlMigrations/Migrations/20240112123310_FCAccessAllCollectionUsers.Designer.cs
index b5d02d2d30..8e269605cf 100644
--- a/util/MySqlMigrations/Migrations/20231219154733_FCAccessAllCollectionUsers.Designer.cs
+++ b/util/MySqlMigrations/Migrations/20240112123310_FCAccessAllCollectionUsers.Designer.cs
@@ -5,13 +5,14 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Bit.MySqlMigrations.Migrations
{
[DbContext(typeof(DatabaseContext))]
- [Migration("20231219154733_FCAccessAllCollectionUsers")]
+ [Migration("20240112123310_FCAccessAllCollectionUsers")]
partial class FCAccessAllCollectionUsers
{
///
@@ -68,6 +69,9 @@ namespace Bit.MySqlMigrations.Migrations
b.Property("ExpirationDate")
.HasColumnType("datetime(6)");
+ b.Property("FlexibleCollections")
+ .HasColumnType("tinyint(1)");
+
b.Property("Gateway")
.HasColumnType("tinyint unsigned");
@@ -203,6 +207,9 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("Id", "Enabled")
+ .HasAnnotation("Npgsql:IndexInclude", new[] { "UseTotp" });
+
b.ToTable("Organization", (string)null);
});
@@ -231,7 +238,12 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
- b.HasIndex("OrganizationId");
+ b.HasIndex("OrganizationId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("OrganizationId", "Type")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Policy", (string)null);
});
@@ -478,11 +490,13 @@ namespace Bit.MySqlMigrations.Migrations
modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.Grant", b =>
{
- b.Property("Key")
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property("ClientId")
+ .IsRequired()
.HasMaxLength(200)
.HasColumnType("varchar(200)");
@@ -493,6 +507,7 @@ namespace Bit.MySqlMigrations.Migrations
.HasColumnType("datetime(6)");
b.Property("Data")
+ .IsRequired()
.HasColumnType("longtext");
b.Property("Description")
@@ -502,6 +517,11 @@ namespace Bit.MySqlMigrations.Migrations
b.Property("ExpirationDate")
.HasColumnType("datetime(6)");
+ b.Property("Key")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
b.Property("SessionId")
.HasMaxLength(100)
.HasColumnType("varchar(100)");
@@ -511,10 +531,15 @@ namespace Bit.MySqlMigrations.Migrations
.HasColumnType("varchar(200)");
b.Property("Type")
+ .IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
- b.HasKey("Key");
+ b.HasKey("Id")
+ .HasAnnotation("SqlServer:Clustered", true);
+
+ b.HasIndex("Key")
+ .IsUnique();
b.ToTable("Grant", (string)null);
});
@@ -765,7 +790,15 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
- b.HasIndex("UserId");
+ b.HasIndex("Identifier")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "Identifier")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Device", (string)null);
});
@@ -838,6 +871,9 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("Date", "OrganizationId", "ActingUserId", "CipherId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.ToTable("Event", (string)null);
});
@@ -1038,6 +1074,9 @@ namespace Bit.MySqlMigrations.Migrations
b.HasIndex("SponsoringOrganizationId");
+ b.HasIndex("SponsoringOrganizationUserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.ToTable("OrganizationSponsorship", (string)null);
});
@@ -1089,9 +1128,15 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
- b.HasIndex("OrganizationId");
+ b.HasIndex("OrganizationId")
+ .HasAnnotation("SqlServer:Clustered", false);
- b.HasIndex("UserId");
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "OrganizationId", "Status")
+ .HasAnnotation("Npgsql:IndexInclude", new[] { "AccessAll" })
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("OrganizationUser", (string)null);
});
@@ -1146,9 +1191,16 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("DeletionDate")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.HasIndex("OrganizationId");
- b.HasIndex("UserId");
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "OrganizationId")
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Send", (string)null);
});
@@ -1226,7 +1278,11 @@ namespace Bit.MySqlMigrations.Migrations
b.HasIndex("OrganizationId");
- b.HasIndex("UserId");
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "OrganizationId", "CreationDate")
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Transaction", (string)null);
});
@@ -1376,6 +1432,13 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("Email")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("Premium", "PremiumExpirationDate", "RenewalReminderDate")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.ToTable("User", (string)null);
});
diff --git a/util/MySqlMigrations/Migrations/20231219154733_FCAccessAllCollectionUsers.cs b/util/MySqlMigrations/Migrations/20240112123310_FCAccessAllCollectionUsers.cs
similarity index 90%
rename from util/MySqlMigrations/Migrations/20231219154733_FCAccessAllCollectionUsers.cs
rename to util/MySqlMigrations/Migrations/20240112123310_FCAccessAllCollectionUsers.cs
index f6ff197d98..c79a28d6eb 100644
--- a/util/MySqlMigrations/Migrations/20231219154733_FCAccessAllCollectionUsers.cs
+++ b/util/MySqlMigrations/Migrations/20240112123310_FCAccessAllCollectionUsers.cs
@@ -7,7 +7,7 @@ namespace Bit.MySqlMigrations.Migrations;
public partial class FCAccessAllCollectionUsers : Migration
{
- private const string _accessAllCollectionUsersScript = "MySqlMigrations.HelperScripts.2023-12-06_01_AccessAllCollectionUsers.sql";
+ private const string _accessAllCollectionUsersScript = "MySqlMigrations.HelperScripts.2024-01-12_01_AccessAllCollectionUsers.sql";
protected override void Up(MigrationBuilder migrationBuilder)
{
diff --git a/util/MySqlMigrations/Migrations/20231219154825_FCManagersEditAssignedCollectionUsers.Designer.cs b/util/MySqlMigrations/Migrations/20240112123340_FCManagersEditAssignedCollectionUsers.Designer.cs
similarity index 96%
rename from util/MySqlMigrations/Migrations/20231219154825_FCManagersEditAssignedCollectionUsers.Designer.cs
rename to util/MySqlMigrations/Migrations/20240112123340_FCManagersEditAssignedCollectionUsers.Designer.cs
index 2bbf4e60f0..03442c205b 100644
--- a/util/MySqlMigrations/Migrations/20231219154825_FCManagersEditAssignedCollectionUsers.Designer.cs
+++ b/util/MySqlMigrations/Migrations/20240112123340_FCManagersEditAssignedCollectionUsers.Designer.cs
@@ -5,13 +5,14 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Bit.MySqlMigrations.Migrations
{
[DbContext(typeof(DatabaseContext))]
- [Migration("20231219154825_FCManagersEditAssignedCollectionUsers")]
+ [Migration("20240112123340_FCManagersEditAssignedCollectionUsers")]
partial class FCManagersEditAssignedCollectionUsers
{
///
@@ -68,6 +69,9 @@ namespace Bit.MySqlMigrations.Migrations
b.Property("ExpirationDate")
.HasColumnType("datetime(6)");
+ b.Property("FlexibleCollections")
+ .HasColumnType("tinyint(1)");
+
b.Property("Gateway")
.HasColumnType("tinyint unsigned");
@@ -203,6 +207,9 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("Id", "Enabled")
+ .HasAnnotation("Npgsql:IndexInclude", new[] { "UseTotp" });
+
b.ToTable("Organization", (string)null);
});
@@ -231,7 +238,12 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
- b.HasIndex("OrganizationId");
+ b.HasIndex("OrganizationId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("OrganizationId", "Type")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Policy", (string)null);
});
@@ -478,11 +490,13 @@ namespace Bit.MySqlMigrations.Migrations
modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.Grant", b =>
{
- b.Property("Key")
- .HasMaxLength(200)
- .HasColumnType("varchar(200)");
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property("ClientId")
+ .IsRequired()
.HasMaxLength(200)
.HasColumnType("varchar(200)");
@@ -493,6 +507,7 @@ namespace Bit.MySqlMigrations.Migrations
.HasColumnType("datetime(6)");
b.Property("Data")
+ .IsRequired()
.HasColumnType("longtext");
b.Property("Description")
@@ -502,6 +517,11 @@ namespace Bit.MySqlMigrations.Migrations
b.Property("ExpirationDate")
.HasColumnType("datetime(6)");
+ b.Property("Key")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
b.Property("SessionId")
.HasMaxLength(100)
.HasColumnType("varchar(100)");
@@ -511,10 +531,15 @@ namespace Bit.MySqlMigrations.Migrations
.HasColumnType("varchar(200)");
b.Property("Type")
+ .IsRequired()
.HasMaxLength(50)
.HasColumnType("varchar(50)");
- b.HasKey("Key");
+ b.HasKey("Id")
+ .HasAnnotation("SqlServer:Clustered", true);
+
+ b.HasIndex("Key")
+ .IsUnique();
b.ToTable("Grant", (string)null);
});
@@ -765,7 +790,15 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
- b.HasIndex("UserId");
+ b.HasIndex("Identifier")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "Identifier")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Device", (string)null);
});
@@ -838,6 +871,9 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("Date", "OrganizationId", "ActingUserId", "CipherId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.ToTable("Event", (string)null);
});
@@ -1038,6 +1074,9 @@ namespace Bit.MySqlMigrations.Migrations
b.HasIndex("SponsoringOrganizationId");
+ b.HasIndex("SponsoringOrganizationUserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.ToTable("OrganizationSponsorship", (string)null);
});
@@ -1089,9 +1128,15 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
- b.HasIndex("OrganizationId");
+ b.HasIndex("OrganizationId")
+ .HasAnnotation("SqlServer:Clustered", false);
- b.HasIndex("UserId");
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "OrganizationId", "Status")
+ .HasAnnotation("Npgsql:IndexInclude", new[] { "AccessAll" })
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("OrganizationUser", (string)null);
});
@@ -1146,9 +1191,16 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("DeletionDate")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.HasIndex("OrganizationId");
- b.HasIndex("UserId");
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "OrganizationId")
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Send", (string)null);
});
@@ -1226,7 +1278,11 @@ namespace Bit.MySqlMigrations.Migrations
b.HasIndex("OrganizationId");
- b.HasIndex("UserId");
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "OrganizationId", "CreationDate")
+ .HasAnnotation("SqlServer:Clustered", false);
b.ToTable("Transaction", (string)null);
});
@@ -1376,6 +1432,13 @@ namespace Bit.MySqlMigrations.Migrations
b.HasKey("Id");
+ b.HasIndex("Email")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("Premium", "PremiumExpirationDate", "RenewalReminderDate")
+ .HasAnnotation("SqlServer:Clustered", false);
+
b.ToTable("User", (string)null);
});
diff --git a/util/MySqlMigrations/Migrations/20231219154825_FCManagersEditAssignedCollectionUsers.cs b/util/MySqlMigrations/Migrations/20240112123340_FCManagersEditAssignedCollectionUsers.cs
similarity index 90%
rename from util/MySqlMigrations/Migrations/20231219154825_FCManagersEditAssignedCollectionUsers.cs
rename to util/MySqlMigrations/Migrations/20240112123340_FCManagersEditAssignedCollectionUsers.cs
index e507685c6e..d63b20fc24 100644
--- a/util/MySqlMigrations/Migrations/20231219154825_FCManagersEditAssignedCollectionUsers.cs
+++ b/util/MySqlMigrations/Migrations/20240112123340_FCManagersEditAssignedCollectionUsers.cs
@@ -7,7 +7,7 @@ namespace Bit.MySqlMigrations.Migrations;
public partial class FCManagersEditAssignedCollectionUsers : Migration
{
- private const string _managersEditAssignedCollectionUsersScript = "MySqlMigrations.HelperScripts.2023-12-06_02_ManagersEditAssignedCollectionUsers.sql";
+ private const string _managersEditAssignedCollectionUsersScript = "MySqlMigrations.HelperScripts.2024-01-12_02_ManagersEditAssignedCollectionUsers.sql";
protected override void Up(MigrationBuilder migrationBuilder)
{
diff --git a/util/MySqlMigrations/Migrations/20240112123440_FCEnableOrgsFlexibleCollections.Designer.cs b/util/MySqlMigrations/Migrations/20240112123440_FCEnableOrgsFlexibleCollections.Designer.cs
new file mode 100644
index 0000000000..285b5a5e7a
--- /dev/null
+++ b/util/MySqlMigrations/Migrations/20240112123440_FCEnableOrgsFlexibleCollections.Designer.cs
@@ -0,0 +1,2385 @@
+//
+using System;
+using Bit.Infrastructure.EntityFramework.Repositories;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace Bit.MySqlMigrations.Migrations
+{
+ [DbContext(typeof(DatabaseContext))]
+ [Migration("20240112123440_FCEnableOrgsFlexibleCollections")]
+ partial class FCEnableOrgsFlexibleCollections
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "7.0.14")
+ .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("AllowAdminAccessToAllCollectionItems")
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue(true);
+
+ b.Property("BillingEmail")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("BusinessAddress1")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("BusinessAddress2")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("BusinessAddress3")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("BusinessCountry")
+ .HasMaxLength(2)
+ .HasColumnType("varchar(2)");
+
+ b.Property("BusinessName")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("BusinessTaxNumber")
+ .HasMaxLength(30)
+ .HasColumnType("varchar(30)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Enabled")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("ExpirationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("FlexibleCollections")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("Gateway")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("GatewayCustomerId")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("GatewaySubscriptionId")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("Identifier")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("LicenseKey")
+ .HasMaxLength(100)
+ .HasColumnType("varchar(100)");
+
+ b.Property("LimitCollectionCreationDeletion")
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue(true);
+
+ b.Property("MaxAutoscaleSeats")
+ .HasColumnType("int");
+
+ b.Property("MaxAutoscaleSmSeats")
+ .HasColumnType("int");
+
+ b.Property("MaxAutoscaleSmServiceAccounts")
+ .HasColumnType("int");
+
+ b.Property("MaxCollections")
+ .HasColumnType("smallint");
+
+ b.Property("MaxStorageGb")
+ .HasColumnType("smallint");
+
+ b.Property("Name")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("OwnersNotifiedOfAutoscaling")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Plan")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("PlanType")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("PrivateKey")
+ .HasColumnType("longtext");
+
+ b.Property("PublicKey")
+ .HasColumnType("longtext");
+
+ b.Property("ReferenceData")
+ .HasColumnType("longtext");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Seats")
+ .HasColumnType("int");
+
+ b.Property("SecretsManagerBeta")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("SelfHost")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("SmSeats")
+ .HasColumnType("int");
+
+ b.Property("SmServiceAccounts")
+ .HasColumnType("int");
+
+ b.Property("Status")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("Storage")
+ .HasColumnType("bigint");
+
+ b.Property("TwoFactorProviders")
+ .HasColumnType("longtext");
+
+ b.Property("Use2fa")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseApi")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseCustomPermissions")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseDirectory")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseEvents")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseGroups")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseKeyConnector")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UsePasswordManager")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UsePolicies")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseResetPassword")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseScim")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseSecretsManager")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseSso")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseTotp")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UsersGetPremium")
+ .HasColumnType("tinyint(1)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Id", "Enabled")
+ .HasAnnotation("Npgsql:IndexInclude", new[] { "UseTotp" });
+
+ b.ToTable("Organization", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Policy", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Data")
+ .HasColumnType("longtext");
+
+ b.Property("Enabled")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("OrganizationId")
+ .HasColumnType("char(36)");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Type")
+ .HasColumnType("tinyint unsigned");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("OrganizationId", "Type")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.ToTable("Policy", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.Provider", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("BillingEmail")
+ .HasColumnType("longtext");
+
+ b.Property("BillingPhone")
+ .HasColumnType("longtext");
+
+ b.Property("BusinessAddress1")
+ .HasColumnType("longtext");
+
+ b.Property("BusinessAddress2")
+ .HasColumnType("longtext");
+
+ b.Property("BusinessAddress3")
+ .HasColumnType("longtext");
+
+ b.Property("BusinessCountry")
+ .HasColumnType("longtext");
+
+ b.Property("BusinessName")
+ .HasColumnType("longtext");
+
+ b.Property("BusinessTaxNumber")
+ .HasColumnType("longtext");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Enabled")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("Name")
+ .HasColumnType("longtext");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Status")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("Type")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("UseEvents")
+ .HasColumnType("tinyint(1)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Provider", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderOrganization", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Key")
+ .HasColumnType("longtext");
+
+ b.Property("OrganizationId")
+ .HasColumnType("char(36)");
+
+ b.Property("ProviderId")
+ .HasColumnType("char(36)");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Settings")
+ .HasColumnType("longtext");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.HasIndex("ProviderId");
+
+ b.ToTable("ProviderOrganization", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Provider.ProviderUser", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Email")
+ .HasColumnType("longtext");
+
+ b.Property("Key")
+ .HasColumnType("longtext");
+
+ b.Property("Permissions")
+ .HasColumnType("longtext");
+
+ b.Property("ProviderId")
+ .HasColumnType("char(36)");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Status")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("Type")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("UserId")
+ .HasColumnType("char(36)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProviderId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("ProviderUser", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.AuthRequest", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("AccessCode")
+ .HasMaxLength(25)
+ .HasColumnType("varchar(25)");
+
+ b.Property("Approved")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("AuthenticationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Key")
+ .HasColumnType("longtext");
+
+ b.Property("MasterPasswordHash")
+ .HasColumnType("longtext");
+
+ b.Property("OrganizationId")
+ .HasColumnType("char(36)");
+
+ b.Property("PublicKey")
+ .HasColumnType("longtext");
+
+ b.Property("RequestDeviceIdentifier")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("RequestDeviceType")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("RequestIpAddress")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("ResponseDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("ResponseDeviceId")
+ .HasColumnType("char(36)");
+
+ b.Property("Type")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("UserId")
+ .HasColumnType("char(36)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.HasIndex("ResponseDeviceId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AuthRequest", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.EmergencyAccess", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Email")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("GranteeId")
+ .HasColumnType("char(36)");
+
+ b.Property("GrantorId")
+ .HasColumnType("char(36)");
+
+ b.Property("KeyEncrypted")
+ .HasColumnType("longtext");
+
+ b.Property("LastNotificationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("RecoveryInitiatedDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Status")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("Type")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("WaitTimeDays")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GranteeId");
+
+ b.HasIndex("GrantorId");
+
+ b.ToTable("EmergencyAccess", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.Grant", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("ClientId")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
+ b.Property("ConsumedDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Data")
+ .IsRequired()
+ .HasColumnType("longtext");
+
+ b.Property("Description")
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
+ b.Property("ExpirationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Key")
+ .IsRequired()
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
+ b.Property("SessionId")
+ .HasMaxLength(100)
+ .HasColumnType("varchar(100)");
+
+ b.Property("SubjectId")
+ .HasMaxLength(200)
+ .HasColumnType("varchar(200)");
+
+ b.Property("Type")
+ .IsRequired()
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.HasKey("Id")
+ .HasAnnotation("SqlServer:Clustered", true);
+
+ b.HasIndex("Key")
+ .IsUnique();
+
+ b.ToTable("Grant", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoConfig", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Data")
+ .HasColumnType("longtext");
+
+ b.Property("Enabled")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("OrganizationId")
+ .HasColumnType("char(36)");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.ToTable("SsoConfig", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.SsoUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("ExternalId")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("OrganizationId")
+ .HasColumnType("char(36)");
+
+ b.Property("UserId")
+ .HasColumnType("char(36)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("SsoUser", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Auth.Models.WebAuthnCredential", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("AaGuid")
+ .HasColumnType("char(36)");
+
+ b.Property("Counter")
+ .HasColumnType("int");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("CredentialId")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("EncryptedPrivateKey")
+ .HasMaxLength(2000)
+ .HasColumnType("varchar(2000)");
+
+ b.Property("EncryptedPublicKey")
+ .HasMaxLength(2000)
+ .HasColumnType("varchar(2000)");
+
+ b.Property("EncryptedUserKey")
+ .HasMaxLength(2000)
+ .HasColumnType("varchar(2000)");
+
+ b.Property("Name")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("PublicKey")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("SupportsPrf")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("Type")
+ .HasMaxLength(20)
+ .HasColumnType("varchar(20)");
+
+ b.Property("UserId")
+ .HasColumnType("char(36)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("WebAuthnCredential", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Collection", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("ExternalId")
+ .HasMaxLength(300)
+ .HasColumnType("varchar(300)");
+
+ b.Property("Name")
+ .HasColumnType("longtext");
+
+ b.Property("OrganizationId")
+ .HasColumnType("char(36)");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.ToTable("Collection", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionCipher", b =>
+ {
+ b.Property("CollectionId")
+ .HasColumnType("char(36)");
+
+ b.Property("CipherId")
+ .HasColumnType("char(36)");
+
+ b.HasKey("CollectionId", "CipherId");
+
+ b.HasIndex("CipherId");
+
+ b.ToTable("CollectionCipher", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionGroup", b =>
+ {
+ b.Property("CollectionId")
+ .HasColumnType("char(36)");
+
+ b.Property("GroupId")
+ .HasColumnType("char(36)");
+
+ b.Property("HidePasswords")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("Manage")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("ReadOnly")
+ .HasColumnType("tinyint(1)");
+
+ b.HasKey("CollectionId", "GroupId");
+
+ b.HasIndex("GroupId");
+
+ b.ToTable("CollectionGroups");
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.CollectionUser", b =>
+ {
+ b.Property("CollectionId")
+ .HasColumnType("char(36)");
+
+ b.Property("OrganizationUserId")
+ .HasColumnType("char(36)");
+
+ b.Property("HidePasswords")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("Manage")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("ReadOnly")
+ .HasColumnType("tinyint(1)");
+
+ b.HasKey("CollectionId", "OrganizationUserId");
+
+ b.HasIndex("OrganizationUserId");
+
+ b.ToTable("CollectionUsers");
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Device", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("char(36)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("EncryptedPrivateKey")
+ .HasColumnType("longtext");
+
+ b.Property("EncryptedPublicKey")
+ .HasColumnType("longtext");
+
+ b.Property("EncryptedUserKey")
+ .HasColumnType("longtext");
+
+ b.Property("Identifier")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("Name")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("PushToken")
+ .HasMaxLength(255)
+ .HasColumnType("varchar(255)");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Type")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("UserId")
+ .HasColumnType("char(36)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Identifier")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.HasIndex("UserId", "Identifier")
+ .IsUnique()
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.ToTable("Device", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Event", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("ActingUserId")
+ .HasColumnType("char(36)");
+
+ b.Property("CipherId")
+ .HasColumnType("char(36)");
+
+ b.Property("CollectionId")
+ .HasColumnType("char(36)");
+
+ b.Property("Date")
+ .HasColumnType("datetime(6)");
+
+ b.Property("DeviceType")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("DomainName")
+ .HasColumnType("longtext");
+
+ b.Property("GroupId")
+ .HasColumnType("char(36)");
+
+ b.Property("InstallationId")
+ .HasColumnType("char(36)");
+
+ b.Property("IpAddress")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("OrganizationId")
+ .HasColumnType("char(36)");
+
+ b.Property("OrganizationUserId")
+ .HasColumnType("char(36)");
+
+ b.Property("PolicyId")
+ .HasColumnType("char(36)");
+
+ b.Property("ProviderId")
+ .HasColumnType("char(36)");
+
+ b.Property("ProviderOrganizationId")
+ .HasColumnType("char(36)");
+
+ b.Property("ProviderUserId")
+ .HasColumnType("char(36)");
+
+ b.Property("SecretId")
+ .HasColumnType("char(36)");
+
+ b.Property("ServiceAccountId")
+ .HasColumnType("char(36)");
+
+ b.Property("SystemUser")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("Type")
+ .HasColumnType("int");
+
+ b.Property("UserId")
+ .HasColumnType("char(36)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Date", "OrganizationId", "ActingUserId", "CipherId")
+ .HasAnnotation("SqlServer:Clustered", false);
+
+ b.ToTable("Event", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Group", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("AccessAll")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("ExternalId")
+ .HasMaxLength(300)
+ .HasColumnType("varchar(300)");
+
+ b.Property("Name")
+ .HasMaxLength(100)
+ .HasColumnType("varchar(100)");
+
+ b.Property("OrganizationId")
+ .HasColumnType("char(36)");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.ToTable("Group", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.GroupUser", b =>
+ {
+ b.Property("GroupId")
+ .HasColumnType("char(36)");
+
+ b.Property("OrganizationUserId")
+ .HasColumnType("char(36)");
+
+ b.HasKey("GroupId", "OrganizationUserId");
+
+ b.HasIndex("OrganizationUserId");
+
+ b.ToTable("GroupUser", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.Models.Installation", b =>
+ {
+ b.Property