mirror of
https://github.com/bitwarden/server.git
synced 2024-12-24 17:17:40 +01:00
785e788cb6
* Increase organization max seat size from 30k to 2b (#1274) * Increase organization max seat size from 30k to 2b * PR review. Do not modify unless state matches expected * Organization sync simultaneous event reporting (#1275) * Split up azure messages according to max size * Allow simultaneous login of organization user events * Early resolve small event lists * Clarify logic Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com> * Improve readability This comes at the cost of multiple serializations, but the improvement in wire-time should more than make up for this on message where serialization time matters Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com> * Queue emails (#1286) * Extract common Azure queue methods * Do not use internal entity framework namespace * Prefer IEnumerable to IList unless needed All of these implementations were just using `Count == 1`, which is easily replicated. This will be used when abstracting Azure queues * Add model for azure queue message * Abstract Azure queue for reuse * Creat service to enqueue mail messages for later processing Azure queue mail service uses Azure queues. Blocking just blocks until all the work is done -- This is how emailing works today * Provide mail queue service to DI * Queue organization invite emails for later processing All emails can later be added to this queue * Create Admin hosted service to process enqueued mail messages * Prefer constructors to static generators * Mass delete organization users (#1287) * Add delete many to Organization Users * Correct formatting * Remove erroneous migration * Clarify parameter name * Formatting fixes * Simplify bump account revision sproc * Formatting fixes * Match file names to objects * Indicate if large import is expected * Early pull all existing users we were planning on inviting (#1290) * Early pull all existing users we were planning on inviting * Improve sproc name * Batch upsert org users (#1289) * Add UpsertMany sprocs to OrganizationUser * Add method to create TVPs from any object. Uses DbOrder attribute to generate. Sproc will fail unless TVP column order matches that of the db type * Combine migrations * Correct formatting * Include sql objects in sql project * Keep consisten parameter names * Batch deletes for performance * Correct formatting * consolidate migrations * Use batch methods in OrganizationImport * Declare @BatchSize * Transaction names limited to 32 chars Drop sproc before creating it if it exists * Update import tests * Allow for more users in org upgrades * Fix formatting * Improve class hierarchy structure * Use name tuple types * Fix formatting * Front load all reflection * Format constructor * Simplify ToTvp as class-specific extension Co-authored-by: Chad Scharf <3904944+cscharf@users.noreply.github.com>
143 lines
3.1 KiB
Transact-SQL
143 lines
3.1 KiB
Transact-SQL
-- Create OrganizationUser Type
|
|
IF NOT EXISTS (
|
|
SELECT
|
|
*
|
|
FROM
|
|
sys.types
|
|
WHERE
|
|
[Name] = 'OrganizationUserType' AND
|
|
is_user_defined = 1
|
|
)
|
|
BEGIN
|
|
CREATE TYPE [dbo].[OrganizationUserType] AS TABLE(
|
|
[Id] UNIQUEIDENTIFIER,
|
|
[OrganizationId] UNIQUEIDENTIFIER,
|
|
[UserId] UNIQUEIDENTIFIER,
|
|
[Email] NVARCHAR(256),
|
|
[Key] VARCHAR(MAX),
|
|
[Status] TINYINT,
|
|
[Type] TINYINT,
|
|
[AccessAll] BIT,
|
|
[ExternalId] NVARCHAR(300),
|
|
[CreationDate] DATETIME2(7),
|
|
[RevisionDate] DATETIME2(7),
|
|
[Permissions] NVARCHAR(MAX),
|
|
[ResetPasswordKey] VARCHAR(MAX)
|
|
)
|
|
END
|
|
GO
|
|
|
|
-- Create many sproc
|
|
IF OBJECT_ID('[dbo].[OrganizationUser_CreateMany]') IS NOT NULL
|
|
BEGIN
|
|
DROP PROCEDURE [dbo].[OrganizationUser_CreateMany]
|
|
END
|
|
GO
|
|
|
|
CREATE PROCEDURE [dbo].[OrganizationUser_CreateMany]
|
|
@OrganizationUsersInput [dbo].[OrganizationUserType] READONLY
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON
|
|
|
|
INSERT INTO [dbo].[OrganizationUser]
|
|
(
|
|
[Id],
|
|
[OrganizationId],
|
|
[UserId],
|
|
[Email],
|
|
[Key],
|
|
[Status],
|
|
[Type],
|
|
[AccessAll],
|
|
[ExternalId],
|
|
[CreationDate],
|
|
[RevisionDate],
|
|
[Permissions],
|
|
[ResetPasswordKey]
|
|
)
|
|
SELECT
|
|
OU.[Id],
|
|
OU.[OrganizationId],
|
|
OU.[UserId],
|
|
OU.[Email],
|
|
OU.[Key],
|
|
OU.[Status],
|
|
OU.[Type],
|
|
OU.[AccessAll],
|
|
OU.[ExternalId],
|
|
OU.[CreationDate],
|
|
OU.[RevisionDate],
|
|
OU.[Permissions],
|
|
OU.[ResetPasswordKey]
|
|
FROM
|
|
@OrganizationUsersInput OU
|
|
END
|
|
GO
|
|
|
|
-- Bump many user account revision dates
|
|
IF OBJECT_ID('[dbo].[User_BumpManyAccountRevisionDates]') IS NOT NULL
|
|
BEGIN
|
|
DROP PROCEDURE [dbo].[User_BumpManyAccountRevisionDates]
|
|
END
|
|
GO
|
|
|
|
CREATE PROCEDURE [dbo].[User_BumpManyAccountRevisionDates]
|
|
@Ids [dbo].[GuidIdArray] READONLY
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON
|
|
|
|
UPDATE
|
|
U
|
|
SET
|
|
[AccountRevisionDate] = GETUTCDATE()
|
|
FROM
|
|
[dbo].[User] U
|
|
INNER JOIN
|
|
@Ids IDs ON IDs.Id = U.Id
|
|
END
|
|
GO
|
|
|
|
-- Update many OrganizationUsers
|
|
IF OBJECT_ID('[dbo].[OrganizationUser_UpdateMany]') IS NOT NULL
|
|
BEGIN
|
|
DROP PROCEDURE [dbo].[OrganizationUser_UpdateMany]
|
|
END
|
|
GO
|
|
|
|
CREATE PROCEDURE [dbo].[OrganizationUser_UpdateMany]
|
|
@OrganizationUsersInput [dbo].[OrganizationUserType] READONLY
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON
|
|
|
|
UPDATE
|
|
OU
|
|
SET
|
|
[OrganizationId] = OUI.[OrganizationId],
|
|
[UserId] = OUI.[UserId],
|
|
[Email] = OUI.[Email],
|
|
[Key] = OUI.[Key],
|
|
[Status] = OUI.[Status],
|
|
[Type] = OUI.[Type],
|
|
[AccessAll] = OUI.[AccessAll],
|
|
[ExternalId] = OUI.[ExternalId],
|
|
[CreationDate] = OUI.[CreationDate],
|
|
[RevisionDate] = OUI.[RevisionDate],
|
|
[Permissions] = OUI.[Permissions],
|
|
[ResetPasswordKey] = OUI.[ResetPasswordKey]
|
|
FROM
|
|
[dbo].[OrganizationUser] OU
|
|
INNER JOIN
|
|
@OrganizationUsersInput OUI ON OU.Id = OUI.Id
|
|
|
|
|
|
EXEC [dbo].[User_BumpManyAccountRevisionDates]
|
|
(
|
|
SELECT UserId
|
|
FROM @OrganizationUsersInput
|
|
)
|
|
END
|
|
GO
|