mirror of
https://github.com/bitwarden/server
synced 2026-01-04 09:33:40 +00:00
Merge branch 'main' into feat/pm-14496-non-root-self-hosted-images
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
BEGIN
|
||||
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Notification_SecurityTask')
|
||||
BEGIN
|
||||
ALTER TABLE [dbo].[Notification]
|
||||
DROP CONSTRAINT [FK_Notification_SecurityTask]
|
||||
END
|
||||
|
||||
ALTER TABLE [dbo].[Notification]
|
||||
ADD CONSTRAINT [FK_Notification_SecurityTask] FOREIGN KEY ([TaskId]) REFERENCES [dbo].[SecurityTask] ([Id]) ON DELETE CASCADE
|
||||
END
|
||||
GO
|
||||
@@ -0,0 +1,350 @@
|
||||
CREATE OR ALTER PROCEDURE [dbo].[Cipher_UpdateAttachment]
|
||||
@Id UNIQUEIDENTIFIER,
|
||||
@UserId UNIQUEIDENTIFIER,
|
||||
@OrganizationId UNIQUEIDENTIFIER,
|
||||
@AttachmentId VARCHAR(50),
|
||||
@AttachmentData NVARCHAR(MAX)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
-- Validate that AttachmentData is valid JSON
|
||||
IF ISJSON(@AttachmentData) = 0
|
||||
BEGIN
|
||||
THROW 50000, 'Invalid JSON format in AttachmentData parameter', 1;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
-- Validate that AttachmentData has the expected structure
|
||||
-- Check for required fields
|
||||
IF JSON_VALUE(@AttachmentData, '$.FileName') IS NULL OR
|
||||
JSON_VALUE(@AttachmentData, '$.Size') IS NULL
|
||||
BEGIN
|
||||
THROW 50000, 'AttachmentData is missing required fields (FileName, Size)', 1;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
-- Validate data types for critical fields
|
||||
DECLARE @Size BIGINT = TRY_CAST(JSON_VALUE(@AttachmentData, '$.Size') AS BIGINT)
|
||||
IF @Size IS NULL OR @Size <= 0
|
||||
BEGIN
|
||||
THROW 50000, 'AttachmentData has invalid Size value', 1;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
DECLARE @AttachmentIdKey VARCHAR(50) = CONCAT('"', @AttachmentId, '"')
|
||||
DECLARE @AttachmentIdPath VARCHAR(50) = CONCAT('$.', @AttachmentIdKey)
|
||||
DECLARE @NewAttachments NVARCHAR(MAX)
|
||||
|
||||
-- Get current attachments
|
||||
DECLARE @CurrentAttachments NVARCHAR(MAX)
|
||||
SELECT @CurrentAttachments = [Attachments] FROM [dbo].[Cipher] WHERE [Id] = @Id
|
||||
|
||||
-- Prepare the new attachments value based on current state
|
||||
IF @CurrentAttachments IS NULL
|
||||
BEGIN
|
||||
-- Create new JSON object with the attachment
|
||||
SET @NewAttachments = CONCAT('{', @AttachmentIdKey, ':', @AttachmentData, '}')
|
||||
|
||||
-- Validate the constructed JSON
|
||||
IF ISJSON(@NewAttachments) = 0
|
||||
BEGIN
|
||||
THROW 50000, 'Failed to create valid JSON when adding new attachment', 1;
|
||||
RETURN;
|
||||
END
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
-- Validate existing attachments
|
||||
IF ISJSON(@CurrentAttachments) = 0
|
||||
BEGIN
|
||||
THROW 50000, 'Current attachments data is not valid JSON', 1;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
-- Modify existing JSON
|
||||
SET @NewAttachments = JSON_MODIFY(@CurrentAttachments, @AttachmentIdPath, JSON_QUERY(@AttachmentData, '$'))
|
||||
|
||||
-- Validate the modified JSON
|
||||
IF ISJSON(@NewAttachments) = 0
|
||||
BEGIN
|
||||
THROW 50000, 'Failed to create valid JSON when updating existing attachments', 1;
|
||||
RETURN;
|
||||
END
|
||||
END
|
||||
|
||||
-- Update with validated JSON
|
||||
UPDATE [dbo].[Cipher]
|
||||
SET [Attachments] = @NewAttachments
|
||||
WHERE [Id] = @Id
|
||||
|
||||
IF @OrganizationId IS NOT NULL
|
||||
BEGIN
|
||||
EXEC [dbo].[Organization_UpdateStorage] @OrganizationId
|
||||
EXEC [dbo].[User_BumpAccountRevisionDateByCipherId] @Id, @OrganizationId
|
||||
END
|
||||
ELSE IF @UserId IS NOT NULL
|
||||
BEGIN
|
||||
EXEC [dbo].[User_UpdateStorage] @UserId
|
||||
EXEC [dbo].[User_BumpAccountRevisionDate] @UserId
|
||||
END
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[Cipher_DeleteAttachment]
|
||||
@Id UNIQUEIDENTIFIER,
|
||||
@AttachmentId VARCHAR(50)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
DECLARE @AttachmentIdKey VARCHAR(50) = CONCAT('"', @AttachmentId, '"')
|
||||
DECLARE @AttachmentIdPath VARCHAR(50) = CONCAT('$.', @AttachmentIdKey)
|
||||
|
||||
DECLARE @UserId UNIQUEIDENTIFIER
|
||||
DECLARE @OrganizationId UNIQUEIDENTIFIER
|
||||
DECLARE @CurrentAttachments NVARCHAR(MAX)
|
||||
DECLARE @NewAttachments NVARCHAR(MAX)
|
||||
|
||||
-- Get current cipher data
|
||||
SELECT
|
||||
@UserId = [UserId],
|
||||
@OrganizationId = [OrganizationId],
|
||||
@CurrentAttachments = [Attachments]
|
||||
FROM
|
||||
[dbo].[Cipher]
|
||||
WHERE [Id] = @Id
|
||||
|
||||
-- If there are no attachments, nothing to do
|
||||
IF @CurrentAttachments IS NULL
|
||||
BEGIN
|
||||
RETURN;
|
||||
END
|
||||
|
||||
-- Validate the initial JSON
|
||||
IF ISJSON(@CurrentAttachments) = 0
|
||||
BEGIN
|
||||
THROW 50000, 'Current initial attachments data is not valid JSON', 1;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
-- Check if the attachment exists before trying to remove it
|
||||
IF JSON_PATH_EXISTS(@CurrentAttachments, @AttachmentIdPath) = 0
|
||||
BEGIN
|
||||
-- Attachment doesn't exist, nothing to do
|
||||
RETURN;
|
||||
END
|
||||
|
||||
-- Create the new attachments JSON with the specified attachment removed
|
||||
SET @NewAttachments = JSON_MODIFY(@CurrentAttachments, @AttachmentIdPath, NULL)
|
||||
|
||||
-- Validate the resulting JSON
|
||||
IF ISJSON(@NewAttachments) = 0
|
||||
BEGIN
|
||||
THROW 50000, 'Failed to create valid JSON when removing attachment', 1;
|
||||
RETURN;
|
||||
END
|
||||
|
||||
-- Check if we've removed all attachments and have an empty object
|
||||
IF @NewAttachments = '{}'
|
||||
BEGIN
|
||||
-- If we have an empty JSON object, set to NULL instead
|
||||
SET @NewAttachments = NULL;
|
||||
END
|
||||
|
||||
-- Update with validated JSON
|
||||
UPDATE [dbo].[Cipher]
|
||||
SET [Attachments] = @NewAttachments
|
||||
WHERE [Id] = @Id
|
||||
|
||||
IF @OrganizationId IS NOT NULL
|
||||
BEGIN
|
||||
EXEC [dbo].[Organization_UpdateStorage] @OrganizationId
|
||||
EXEC [dbo].[User_BumpAccountRevisionDateByCipherId] @Id, @OrganizationId
|
||||
END
|
||||
ELSE IF @UserId IS NOT NULL
|
||||
BEGIN
|
||||
EXEC [dbo].[User_UpdateStorage] @UserId
|
||||
EXEC [dbo].[User_BumpAccountRevisionDate] @UserId
|
||||
END
|
||||
END
|
||||
GO
|
||||
|
||||
-- Remove [Attachments] assignment from Cipher_Create, Cipher_Update, and CipherDetails_Update procedures
|
||||
|
||||
CREATE OR ALTER 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
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
INSERT INTO [dbo].[Cipher]
|
||||
(
|
||||
[Id],
|
||||
[UserId],
|
||||
[OrganizationId],
|
||||
[Type],
|
||||
[Data],
|
||||
[Favorites],
|
||||
[Folders],
|
||||
[CreationDate],
|
||||
[RevisionDate],
|
||||
[DeletedDate],
|
||||
[Reprompt],
|
||||
[Key]
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@Id,
|
||||
CASE WHEN @OrganizationId IS NULL THEN @UserId ELSE NULL END,
|
||||
@OrganizationId,
|
||||
@Type,
|
||||
@Data,
|
||||
@Favorites,
|
||||
@Folders,
|
||||
@CreationDate,
|
||||
@RevisionDate,
|
||||
@DeletedDate,
|
||||
@Reprompt,
|
||||
@Key
|
||||
)
|
||||
|
||||
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
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[CipherDetails_Update]
|
||||
@Id UNIQUEIDENTIFIER,
|
||||
@UserId UNIQUEIDENTIFIER,
|
||||
@OrganizationId UNIQUEIDENTIFIER,
|
||||
@Type TINYINT,
|
||||
@Data NVARCHAR(MAX),
|
||||
@Favorites NVARCHAR(MAX), -- not used
|
||||
@Folders NVARCHAR(MAX), -- not used
|
||||
@Attachments NVARCHAR(MAX), -- not used
|
||||
@CreationDate DATETIME2(7),
|
||||
@RevisionDate DATETIME2(7),
|
||||
@FolderId UNIQUEIDENTIFIER,
|
||||
@Favorite BIT,
|
||||
@Edit BIT, -- not used
|
||||
@ViewPassword BIT, -- not used
|
||||
@Manage BIT, -- not used
|
||||
@OrganizationUseTotp BIT, -- not used
|
||||
@DeletedDate DATETIME2(2),
|
||||
@Reprompt TINYINT,
|
||||
@Key VARCHAR(MAX) = NULL
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
DECLARE @UserIdKey VARCHAR(50) = CONCAT('"', @UserId, '"')
|
||||
DECLARE @UserIdPath VARCHAR(50) = CONCAT('$.', @UserIdKey)
|
||||
|
||||
UPDATE
|
||||
[dbo].[Cipher]
|
||||
SET
|
||||
[UserId] = CASE WHEN @OrganizationId IS NULL THEN @UserId ELSE NULL END,
|
||||
[OrganizationId] = @OrganizationId,
|
||||
[Type] = @Type,
|
||||
[Data] = @Data,
|
||||
[Folders] =
|
||||
CASE
|
||||
WHEN @FolderId IS NOT NULL AND [Folders] IS NULL THEN
|
||||
CONCAT('{', @UserIdKey, ':"', @FolderId, '"', '}')
|
||||
WHEN @FolderId IS NOT NULL THEN
|
||||
JSON_MODIFY([Folders], @UserIdPath, CAST(@FolderId AS VARCHAR(50)))
|
||||
ELSE
|
||||
JSON_MODIFY([Folders], @UserIdPath, NULL)
|
||||
END,
|
||||
[Favorites] =
|
||||
CASE
|
||||
WHEN @Favorite = 1 AND [Favorites] IS NULL THEN
|
||||
CONCAT('{', @UserIdKey, ':true}')
|
||||
WHEN @Favorite = 1 THEN
|
||||
JSON_MODIFY([Favorites], @UserIdPath, CAST(1 AS BIT))
|
||||
ELSE
|
||||
JSON_MODIFY([Favorites], @UserIdPath, NULL)
|
||||
END,
|
||||
[Reprompt] = @Reprompt,
|
||||
[CreationDate] = @CreationDate,
|
||||
[RevisionDate] = @RevisionDate,
|
||||
[DeletedDate] = @DeletedDate,
|
||||
[Key] = @Key
|
||||
WHERE
|
||||
[Id] = @Id
|
||||
|
||||
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
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[Cipher_Update]
|
||||
@Id UNIQUEIDENTIFIER,
|
||||
@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
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
UPDATE
|
||||
[dbo].[Cipher]
|
||||
SET
|
||||
[UserId] = CASE WHEN @OrganizationId IS NULL THEN @UserId ELSE NULL END,
|
||||
[OrganizationId] = @OrganizationId,
|
||||
[Type] = @Type,
|
||||
[Data] = @Data,
|
||||
[Favorites] = @Favorites,
|
||||
[Folders] = @Folders,
|
||||
[CreationDate] = @CreationDate,
|
||||
[RevisionDate] = @RevisionDate,
|
||||
[DeletedDate] = @DeletedDate,
|
||||
[Reprompt] = @Reprompt,
|
||||
[Key] = @Key
|
||||
WHERE
|
||||
[Id] = @Id
|
||||
|
||||
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
|
||||
@@ -0,0 +1,11 @@
|
||||
BEGIN
|
||||
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_PasswordHealthReportApplication_Organization')
|
||||
BEGIN
|
||||
ALTER TABLE [dbo].[PasswordHealthReportApplication]
|
||||
DROP CONSTRAINT [FK_PasswordHealthReportApplication_Organization]
|
||||
END
|
||||
|
||||
ALTER TABLE [dbo].[PasswordHealthReportApplication]
|
||||
ADD CONSTRAINT [FK_PasswordHealthReportApplication_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]) ON DELETE CASCADE
|
||||
END
|
||||
GO
|
||||
@@ -0,0 +1,32 @@
|
||||
-- Update OrganizationUser_ReadOccupiedSeatCountByOrganizationId to include admin-initiated sponsorships
|
||||
-- Based on https://bitwarden.atlassian.net/browse/PM-17772
|
||||
IF OBJECT_ID('[dbo].[OrganizationUser_ReadOccupiedSeatCountByOrganizationId]') IS NOT NULL
|
||||
BEGIN
|
||||
DROP PROCEDURE [dbo].[OrganizationUser_ReadOccupiedSeatCountByOrganizationId]
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[OrganizationUser_ReadOccupiedSeatCountByOrganizationId]
|
||||
@OrganizationId UNIQUEIDENTIFIER
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
SELECT
|
||||
(
|
||||
-- Count organization users
|
||||
SELECT COUNT(1)
|
||||
FROM [dbo].[OrganizationUserView]
|
||||
WHERE OrganizationId = @OrganizationId
|
||||
AND Status >= 0 --Invited
|
||||
) +
|
||||
(
|
||||
-- Count admin-initiated sponsorships towards the seat count
|
||||
-- Introduced in https://bitwarden.atlassian.net/browse/PM-17772
|
||||
SELECT COUNT(1)
|
||||
FROM [dbo].[OrganizationSponsorship]
|
||||
WHERE SponsoringOrganizationId = @OrganizationId
|
||||
AND IsAdminInitiated = 1
|
||||
)
|
||||
END
|
||||
GO
|
||||
@@ -0,0 +1,41 @@
|
||||
IF OBJECT_ID('[dbo].[OrganizationUser_ReadOccupiedSeatCountByOrganizationId]') IS NOT NULL
|
||||
BEGIN
|
||||
DROP PROCEDURE [dbo].[OrganizationUser_ReadOccupiedSeatCountByOrganizationId]
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[OrganizationUser_ReadOccupiedSeatCountByOrganizationId]
|
||||
@OrganizationId UNIQUEIDENTIFIER
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
SELECT
|
||||
(
|
||||
SELECT COUNT(1)
|
||||
FROM [dbo].[OrganizationUserView]
|
||||
WHERE OrganizationId = @OrganizationId
|
||||
AND Status >= 0 --Invited
|
||||
) +
|
||||
(
|
||||
SELECT COUNT(1)
|
||||
FROM [dbo].[OrganizationSponsorship]
|
||||
WHERE SponsoringOrganizationId = @OrganizationId
|
||||
AND IsAdminInitiated = 1
|
||||
AND (
|
||||
-- Not marked for deletion - always count
|
||||
(ToDelete = 0)
|
||||
OR
|
||||
-- Marked for deletion but has a valid until date in the future (RevokeWhenExpired status)
|
||||
(ToDelete = 1 AND ValidUntil IS NOT NULL AND ValidUntil > GETUTCDATE())
|
||||
)
|
||||
AND (
|
||||
-- SENT status: When SponsoredOrganizationId is null
|
||||
SponsoredOrganizationId IS NULL
|
||||
OR
|
||||
-- ACCEPTED status: When SponsoredOrganizationId is not null and ValidUntil is null or in the future
|
||||
(SponsoredOrganizationId IS NOT NULL AND (ValidUntil IS NULL OR ValidUntil > GETUTCDATE()))
|
||||
)
|
||||
)
|
||||
END
|
||||
GO
|
||||
3111
util/MySqlMigrations/Migrations/20250422181736_NotificationCascadeDelete.Designer.cs
generated
Normal file
3111
util/MySqlMigrations/Migrations/20250422181736_NotificationCascadeDelete.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,40 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Bit.MySqlMigrations.Migrations;
|
||||
|
||||
/// <inheritdoc />
|
||||
public partial class NotificationCascadeDelete : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification",
|
||||
column: "TaskId",
|
||||
principalTable: "SecurityTask",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification",
|
||||
column: "TaskId",
|
||||
principalTable: "SecurityTask",
|
||||
principalColumn: "Id");
|
||||
}
|
||||
}
|
||||
3112
util/MySqlMigrations/Migrations/20250422183835_SecurityTaskCascadeDelete.Designer.cs
generated
Normal file
3112
util/MySqlMigrations/Migrations/20250422183835_SecurityTaskCascadeDelete.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,40 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Bit.MySqlMigrations.Migrations;
|
||||
|
||||
/// <inheritdoc />
|
||||
public partial class SecurityTaskCascadeDelete : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask",
|
||||
column: "CipherId",
|
||||
principalTable: "Cipher",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask",
|
||||
column: "CipherId",
|
||||
principalTable: "Cipher",
|
||||
principalColumn: "Id");
|
||||
}
|
||||
}
|
||||
@@ -2737,7 +2737,8 @@ namespace Bit.MySqlMigrations.Migrations
|
||||
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", "Task")
|
||||
.WithMany()
|
||||
.HasForeignKey("TaskId");
|
||||
.HasForeignKey("TaskId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User")
|
||||
.WithMany()
|
||||
@@ -2852,7 +2853,8 @@ namespace Bit.MySqlMigrations.Migrations
|
||||
{
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", "Cipher")
|
||||
.WithMany()
|
||||
.HasForeignKey("CipherId");
|
||||
.HasForeignKey("CipherId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization")
|
||||
.WithMany()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.8">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="[8.0.8]">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
|
||||
3117
util/PostgresMigrations/Migrations/20250422181741_NotificationCascadeDelete.Designer.cs
generated
Normal file
3117
util/PostgresMigrations/Migrations/20250422181741_NotificationCascadeDelete.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,40 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Bit.PostgresMigrations.Migrations;
|
||||
|
||||
/// <inheritdoc />
|
||||
public partial class NotificationCascadeDelete : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification",
|
||||
column: "TaskId",
|
||||
principalTable: "SecurityTask",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification",
|
||||
column: "TaskId",
|
||||
principalTable: "SecurityTask",
|
||||
principalColumn: "Id");
|
||||
}
|
||||
}
|
||||
3118
util/PostgresMigrations/Migrations/20250422183847_SecurityTaskCascadeDelete.Designer.cs
generated
Normal file
3118
util/PostgresMigrations/Migrations/20250422183847_SecurityTaskCascadeDelete.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,40 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Bit.PostgresMigrations.Migrations;
|
||||
|
||||
/// <inheritdoc />
|
||||
public partial class SecurityTaskCascadeDelete : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask",
|
||||
column: "CipherId",
|
||||
principalTable: "Cipher",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask",
|
||||
column: "CipherId",
|
||||
principalTable: "Cipher",
|
||||
principalColumn: "Id");
|
||||
}
|
||||
}
|
||||
@@ -2743,7 +2743,8 @@ namespace Bit.PostgresMigrations.Migrations
|
||||
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", "Task")
|
||||
.WithMany()
|
||||
.HasForeignKey("TaskId");
|
||||
.HasForeignKey("TaskId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User")
|
||||
.WithMany()
|
||||
@@ -2858,7 +2859,8 @@ namespace Bit.PostgresMigrations.Migrations
|
||||
{
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", "Cipher")
|
||||
.WithMany()
|
||||
.HasForeignKey("CipherId");
|
||||
.HasForeignKey("CipherId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization")
|
||||
.WithMany()
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.8">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="[8.0.8]">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.8">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="[8.0.8]">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
|
||||
3100
util/SqliteMigrations/Migrations/20250422181747_NotificationCascadeDelete.Designer.cs
generated
Normal file
3100
util/SqliteMigrations/Migrations/20250422181747_NotificationCascadeDelete.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,40 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Bit.SqliteMigrations.Migrations;
|
||||
|
||||
/// <inheritdoc />
|
||||
public partial class NotificationCascadeDelete : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification",
|
||||
column: "TaskId",
|
||||
principalTable: "SecurityTask",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_Notification_SecurityTask_TaskId",
|
||||
table: "Notification",
|
||||
column: "TaskId",
|
||||
principalTable: "SecurityTask",
|
||||
principalColumn: "Id");
|
||||
}
|
||||
}
|
||||
3101
util/SqliteMigrations/Migrations/20250422183841_SecurityTaskCascadeDelete.Designer.cs
generated
Normal file
3101
util/SqliteMigrations/Migrations/20250422183841_SecurityTaskCascadeDelete.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,40 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace Bit.SqliteMigrations.Migrations;
|
||||
|
||||
/// <inheritdoc />
|
||||
public partial class SecurityTaskCascadeDelete : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask",
|
||||
column: "CipherId",
|
||||
principalTable: "Cipher",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask");
|
||||
|
||||
migrationBuilder.AddForeignKey(
|
||||
name: "FK_SecurityTask_Cipher_CipherId",
|
||||
table: "SecurityTask",
|
||||
column: "CipherId",
|
||||
principalTable: "Cipher",
|
||||
principalColumn: "Id");
|
||||
}
|
||||
}
|
||||
@@ -2726,7 +2726,8 @@ namespace Bit.SqliteMigrations.Migrations
|
||||
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.SecurityTask", "Task")
|
||||
.WithMany()
|
||||
.HasForeignKey("TaskId");
|
||||
.HasForeignKey("TaskId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.Models.User", "User")
|
||||
.WithMany()
|
||||
@@ -2841,7 +2842,8 @@ namespace Bit.SqliteMigrations.Migrations
|
||||
{
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.Vault.Models.Cipher", "Cipher")
|
||||
.WithMany()
|
||||
.HasForeignKey("CipherId");
|
||||
.HasForeignKey("CipherId")
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
b.HasOne("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", "Organization")
|
||||
.WithMany()
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.8">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="[8.0.8]">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
|
||||
Reference in New Issue
Block a user