diff --git a/src/Sql/dbo/Vault/Stored Procedures/Cipher/Cipher_Create.sql b/src/Sql/dbo/Vault/Stored Procedures/Cipher/Cipher_Create.sql index eb49136895..be110c898a 100644 --- a/src/Sql/dbo/Vault/Stored Procedures/Cipher/Cipher_Create.sql +++ b/src/Sql/dbo/Vault/Stored Procedures/Cipher/Cipher_Create.sql @@ -13,6 +13,7 @@ @Reprompt TINYINT, @Key VARCHAR(MAX) = NULL, @ArchivedDate DATETIME2(7) = NULL + @Archives NVARCHAR(MAX) = NULL AS BEGIN SET NOCOUNT ON @@ -31,7 +32,8 @@ BEGIN [DeletedDate], [Reprompt], [Key], - [ArchivedDate] + [ArchivedDate], + [Archives] ) VALUES ( @@ -47,7 +49,8 @@ BEGIN @DeletedDate, @Reprompt, @Key, - @ArchivedDate + @ArchivedDate, + @Archives ) IF @OrganizationId IS NOT NULL diff --git a/src/Sql/dbo/Vault/Stored Procedures/Cipher/Cipher_CreateWithCollections.sql b/src/Sql/dbo/Vault/Stored Procedures/Cipher/Cipher_CreateWithCollections.sql index c6816a1226..2a53a2d095 100644 --- a/src/Sql/dbo/Vault/Stored Procedures/Cipher/Cipher_CreateWithCollections.sql +++ b/src/Sql/dbo/Vault/Stored Procedures/Cipher/Cipher_CreateWithCollections.sql @@ -13,7 +13,8 @@ @Reprompt TINYINT, @Key VARCHAR(MAX) = NULL, @CollectionIds AS [dbo].[GuidIdArray] READONLY, - @ArchivedDate DATETIME2(7) = NULL + @ArchivedDate DATETIME2(7) = NULL, + @Archives NVARCHAR(MAX) = NULL AS BEGIN SET NOCOUNT ON diff --git a/util/Migrator/DbScripts/2025-12-02_AddCipherArchives.sql b/util/Migrator/DbScripts/2025-12-02_AddCipherArchives.sql index bbfe5d91e3..681c25d3b1 100644 --- a/util/Migrator/DbScripts/2025-12-02_AddCipherArchives.sql +++ b/util/Migrator/DbScripts/2025-12-02_AddCipherArchives.sql @@ -262,3 +262,116 @@ BEGIN SELECT @UtcNow END GO + +IF OBJECT_ID('[dbo].[Cipher_Create]') IS NOT NULL +BEGIN + DROP PROCEDURE [dbo].[Cipher_Create]; +END +GO + +CREATE PROCEDURE [dbo].[Cipher_Create] + @Id UNIQUEIDENTIFIER OUTPUT, + @UserId UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Type TINYINT, + @Data NVARCHAR(MAX), + @Favorites NVARCHAR(MAX), + @Folders NVARCHAR(MAX), + @Attachments NVARCHAR(MAX), -- not used + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7), + @DeletedDate DATETIME2(7), + @Reprompt TINYINT, + @Key VARCHAR(MAX) = NULL, + @ArchivedDate DATETIME2(7) = NULL + @Archives NVARCHAR(MAX) = NULL +AS +BEGIN + SET NOCOUNT ON + + INSERT INTO [dbo].[Cipher] + ( + [Id], + [UserId], + [OrganizationId], + [Type], + [Data], + [Favorites], + [Folders], + [CreationDate], + [RevisionDate], + [DeletedDate], + [Reprompt], + [Key], + [ArchivedDate], + [Archives] + ) + VALUES + ( + @Id, + CASE WHEN @OrganizationId IS NULL THEN @UserId ELSE NULL END, + @OrganizationId, + @Type, + @Data, + @Favorites, + @Folders, + @CreationDate, + @RevisionDate, + @DeletedDate, + @Reprompt, + @Key, + @ArchivedDate, + @Archives + ) + + IF @OrganizationId IS NOT NULL + BEGIN + EXEC [dbo].[User_BumpAccountRevisionDateByCipherId] @Id, @OrganizationId + END + ELSE IF @UserId IS NOT NULL + BEGIN + EXEC [dbo].[User_BumpAccountRevisionDate] @UserId + END +END +GO + +IF OBJECT_ID('[dbo].[Cipher_CreateWithCollections]') IS NOT NULL +BEGIN + DROP PROCEDURE [dbo].[Cipher_CreateWithCollections]; +END +GO + +CREATE PROCEDURE [dbo].[Cipher_CreateWithCollections] + @Id UNIQUEIDENTIFIER, + @UserId UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Type TINYINT, + @Data NVARCHAR(MAX), + @Favorites NVARCHAR(MAX), + @Folders NVARCHAR(MAX), + @Attachments NVARCHAR(MAX), + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7), + @DeletedDate DATETIME2(7), + @Reprompt TINYINT, + @Key VARCHAR(MAX) = NULL, + @CollectionIds AS [dbo].[GuidIdArray] READONLY, + @ArchivedDate DATETIME2(7) = NULL, + @Archives NVARCHAR(MAX) = NULL +AS +BEGIN + SET NOCOUNT ON + + EXEC [dbo].[Cipher_Create] @Id, @UserId, @OrganizationId, @Type, @Data, @Favorites, @Folders, + @Attachments, @CreationDate, @RevisionDate, @DeletedDate, @Reprompt, @Key, @ArchivedDate + + DECLARE @UpdateCollectionsSuccess INT + EXEC @UpdateCollectionsSuccess = [dbo].[Cipher_UpdateCollections] @Id, @UserId, @OrganizationId, @CollectionIds + + -- Bump the account revision date AFTER collections are assigned. + IF @UpdateCollectionsSuccess = 0 + BEGIN + EXEC [dbo].[User_BumpAccountRevisionDateByCipherId] @Id, @OrganizationId + END +END +GO diff --git a/util/MySqlMigrations/Migrations/20251203004842_AddCipherArchives.Designer.cs b/util/MySqlMigrations/Migrations/20251203174921_AddCipherArchives.Designer.cs similarity index 99% rename from util/MySqlMigrations/Migrations/20251203004842_AddCipherArchives.Designer.cs rename to util/MySqlMigrations/Migrations/20251203174921_AddCipherArchives.Designer.cs index b795566ae6..87c784da2a 100644 --- a/util/MySqlMigrations/Migrations/20251203004842_AddCipherArchives.Designer.cs +++ b/util/MySqlMigrations/Migrations/20251203174921_AddCipherArchives.Designer.cs @@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Bit.MySqlMigrations.Migrations { [DbContext(typeof(DatabaseContext))] - [Migration("20251203004842_AddCipherArchives")] + [Migration("20251203174921_AddCipherArchives")] partial class AddCipherArchives { /// diff --git a/util/MySqlMigrations/Migrations/20251203004842_AddCipherArchives.cs b/util/MySqlMigrations/Migrations/20251203174921_AddCipherArchives.cs similarity index 55% rename from util/MySqlMigrations/Migrations/20251203004842_AddCipherArchives.cs rename to util/MySqlMigrations/Migrations/20251203174921_AddCipherArchives.cs index 90638b3e5b..31b7ca2249 100644 --- a/util/MySqlMigrations/Migrations/20251203004842_AddCipherArchives.cs +++ b/util/MySqlMigrations/Migrations/20251203174921_AddCipherArchives.cs @@ -10,19 +10,12 @@ public partial class AddCipherArchives : Migration /// protected override void Up(MigrationBuilder migrationBuilder) { - migrationBuilder.AddColumn( - name: "Archives", - table: "Cipher", - type: "longtext", - nullable: true) - .Annotation("MySql:CharSet", "utf8mb4"); + } /// protected override void Down(MigrationBuilder migrationBuilder) { - migrationBuilder.DropColumn( - name: "Archives", - table: "Cipher"); + } } diff --git a/util/PostgresMigrations/Migrations/20251203004812_AddCipherArchives.Designer.cs b/util/PostgresMigrations/Migrations/20251203174911_AddCipherArchives.Designer.cs similarity index 99% rename from util/PostgresMigrations/Migrations/20251203004812_AddCipherArchives.Designer.cs rename to util/PostgresMigrations/Migrations/20251203174911_AddCipherArchives.Designer.cs index 108dbb505f..c9125eac9f 100644 --- a/util/PostgresMigrations/Migrations/20251203004812_AddCipherArchives.Designer.cs +++ b/util/PostgresMigrations/Migrations/20251203174911_AddCipherArchives.Designer.cs @@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace Bit.PostgresMigrations.Migrations { [DbContext(typeof(DatabaseContext))] - [Migration("20251203004812_AddCipherArchives")] + [Migration("20251203174911_AddCipherArchives")] partial class AddCipherArchives { /// diff --git a/util/PostgresMigrations/Migrations/20251203004812_AddCipherArchives.cs b/util/PostgresMigrations/Migrations/20251203174911_AddCipherArchives.cs similarity index 60% rename from util/PostgresMigrations/Migrations/20251203004812_AddCipherArchives.cs rename to util/PostgresMigrations/Migrations/20251203174911_AddCipherArchives.cs index 9deab6d279..3cf4a55dda 100644 --- a/util/PostgresMigrations/Migrations/20251203004812_AddCipherArchives.cs +++ b/util/PostgresMigrations/Migrations/20251203174911_AddCipherArchives.cs @@ -10,18 +10,12 @@ public partial class AddCipherArchives : Migration /// protected override void Up(MigrationBuilder migrationBuilder) { - migrationBuilder.AddColumn( - name: "Archives", - table: "Cipher", - type: "text", - nullable: true); + } /// protected override void Down(MigrationBuilder migrationBuilder) { - migrationBuilder.DropColumn( - name: "Archives", - table: "Cipher"); + } } diff --git a/util/SqliteMigrations/Migrations/20251203004807_AddCipherArchives.Designer.cs b/util/SqliteMigrations/Migrations/20251203174916_AddCipherArchives.Designer.cs similarity index 99% rename from util/SqliteMigrations/Migrations/20251203004807_AddCipherArchives.Designer.cs rename to util/SqliteMigrations/Migrations/20251203174916_AddCipherArchives.Designer.cs index 18e0246492..7f2f49c811 100644 --- a/util/SqliteMigrations/Migrations/20251203004807_AddCipherArchives.Designer.cs +++ b/util/SqliteMigrations/Migrations/20251203174916_AddCipherArchives.Designer.cs @@ -11,7 +11,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Bit.SqliteMigrations.Migrations { [DbContext(typeof(DatabaseContext))] - [Migration("20251203004807_AddCipherArchives")] + [Migration("20251203174916_AddCipherArchives")] partial class AddCipherArchives { /// diff --git a/util/SqliteMigrations/Migrations/20251203004807_AddCipherArchives.cs b/util/SqliteMigrations/Migrations/20251203174916_AddCipherArchives.cs similarity index 60% rename from util/SqliteMigrations/Migrations/20251203004807_AddCipherArchives.cs rename to util/SqliteMigrations/Migrations/20251203174916_AddCipherArchives.cs index 287926db02..0616caa2fd 100644 --- a/util/SqliteMigrations/Migrations/20251203004807_AddCipherArchives.cs +++ b/util/SqliteMigrations/Migrations/20251203174916_AddCipherArchives.cs @@ -10,18 +10,12 @@ public partial class AddCipherArchives : Migration /// protected override void Up(MigrationBuilder migrationBuilder) { - migrationBuilder.AddColumn( - name: "Archives", - table: "Cipher", - type: "TEXT", - nullable: true); + } /// protected override void Down(MigrationBuilder migrationBuilder) { - migrationBuilder.DropColumn( - name: "Archives", - table: "Cipher"); + } }