mirror of
https://github.com/bitwarden/server
synced 2026-01-27 06:43:19 +00:00
95 lines
2.3 KiB
Transact-SQL
95 lines
2.3 KiB
Transact-SQL
CREATE OR ALTER PROCEDURE [dbo].[Collection_CreateDefaultCollections]
|
|
@OrganizationId UNIQUEIDENTIFIER,
|
|
@DefaultCollectionName VARCHAR(MAX),
|
|
@OrganizationUserIdsJson NVARCHAR(MAX)
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON
|
|
|
|
-- Parse JSON once into table variable with pre-generated collection IDs
|
|
DECLARE @OrganizationUserIds TABLE
|
|
(
|
|
[OrganizationUserId] UNIQUEIDENTIFIER,
|
|
[CollectionId] UNIQUEIDENTIFIER
|
|
);
|
|
|
|
INSERT INTO @OrganizationUserIds
|
|
(
|
|
[OrganizationUserId],
|
|
[CollectionId]
|
|
)
|
|
SELECT
|
|
CAST([value] AS UNIQUEIDENTIFIER),
|
|
NEWID()
|
|
FROM
|
|
OPENJSON(@OrganizationUserIdsJson);
|
|
|
|
BEGIN TRANSACTION;
|
|
|
|
BEGIN TRY
|
|
-- Insert semaphore entries first to obtain the "lock"
|
|
-- If this fails due to duplicate key, the entire transaction will be rolled back
|
|
INSERT INTO [dbo].[DefaultCollectionSemaphore]
|
|
(
|
|
[OrganizationUserId],
|
|
[CreationDate]
|
|
)
|
|
SELECT
|
|
ou.[OrganizationUserId],
|
|
GETUTCDATE()
|
|
FROM
|
|
@OrganizationUserIds ou;
|
|
|
|
-- Insert collections for users who obtained semaphore entries
|
|
INSERT INTO [dbo].[Collection]
|
|
(
|
|
[Id],
|
|
[OrganizationId],
|
|
[Name],
|
|
[CreationDate],
|
|
[RevisionDate],
|
|
[Type],
|
|
[ExternalId],
|
|
[DefaultUserCollectionEmail]
|
|
)
|
|
SELECT
|
|
ou.[CollectionId],
|
|
@OrganizationId,
|
|
@DefaultCollectionName,
|
|
GETUTCDATE(),
|
|
GETUTCDATE(),
|
|
1, -- CollectionType.DefaultUserCollection
|
|
NULL,
|
|
NULL
|
|
FROM
|
|
@OrganizationUserIds ou;
|
|
|
|
-- Insert collection user mappings
|
|
INSERT INTO [dbo].[CollectionUser]
|
|
(
|
|
[CollectionId],
|
|
[OrganizationUserId],
|
|
[ReadOnly],
|
|
[HidePasswords],
|
|
[Manage]
|
|
)
|
|
SELECT
|
|
ou.[CollectionId],
|
|
ou.[OrganizationUserId],
|
|
0, -- ReadOnly = false
|
|
0, -- HidePasswords = false
|
|
1 -- Manage = true
|
|
FROM
|
|
@OrganizationUserIds ou;
|
|
|
|
COMMIT TRANSACTION;
|
|
END TRY
|
|
BEGIN CATCH
|
|
IF @@TRANCOUNT > 0
|
|
ROLLBACK TRANSACTION;
|
|
|
|
THROW;
|
|
END CATCH
|
|
END
|
|
GO
|