mirror of
https://github.com/bitwarden/server.git
synced 2025-06-30 15:42:48 -05:00
[Provider] Server entities and models (#1370)
* Mock out provider models and service * Implement CreateAsync, CompleteSetupAsync, UpdateAsync, InviteUserAsync and ResendInvitesAsync * Implement AcceptUserAsync and ConfirmUsersAsync * Implement SaveUserAsync and DeleteUserAsync * Add email templates * Add admin operations for providers * Fix mail template names * Rename roles * Verify provider has provideradmin * Add self hosted check to admin controller * Resolve review comments * Update sql queries * Change create provider to use email instead of userId
This commit is contained in:
@ -95,6 +95,12 @@ BEGIN
|
||||
END
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[Provider] ALTER COLUMN [Name] NVARCHAR (50) NULL;
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[Provider] ALTER COLUMN [BillingEmail] NVARCHAR (256) NULL;
|
||||
GO
|
||||
|
||||
IF EXISTS(SELECT * FROM sys.views WHERE [Name] = 'ProviderView')
|
||||
BEGIN
|
||||
DROP VIEW [dbo].[ProviderView];
|
||||
@ -454,7 +460,8 @@ END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[ProviderUser_ReadByProviderId]
|
||||
@ProviderId UNIQUEIDENTIFIER
|
||||
@ProviderId UNIQUEIDENTIFIER,
|
||||
@Type TINYINT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
@ -465,6 +472,7 @@ BEGIN
|
||||
[dbo].[ProviderUserView]
|
||||
WHERE
|
||||
[ProviderId] = @ProviderId
|
||||
AND [Type] = COALESCE(@Type, [Type])
|
||||
END
|
||||
GO
|
||||
|
||||
@ -797,3 +805,182 @@ BEGIN
|
||||
EXEC [dbo].[User_BumpAccountRevisionDateByProviderUserId] @ProviderUserId
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID('[dbo].[ProviderUser_ReadCountByProviderIdEmail]') IS NOT NULL
|
||||
BEGIN
|
||||
DROP PROCEDURE [dbo].[ProviderUser_ReadCountByProviderIdEmail]
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[ProviderUser_ReadCountByProviderIdEmail]
|
||||
@ProviderId UNIQUEIDENTIFIER,
|
||||
@Email NVARCHAR(256),
|
||||
@OnlyUsers BIT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
SELECT
|
||||
COUNT(1)
|
||||
FROM
|
||||
[dbo].[ProviderUser] OU
|
||||
LEFT JOIN
|
||||
[dbo].[User] U ON OU.[UserId] = U.[Id]
|
||||
WHERE
|
||||
OU.[ProviderId] = @ProviderId
|
||||
AND (
|
||||
(@OnlyUsers = 0 AND @Email IN (OU.[Email], U.[Email]))
|
||||
OR (@OnlyUsers = 1 AND U.[Email] = @Email)
|
||||
)
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID('[dbo].[ProviderUser_ReadByIds]') IS NOT NULL
|
||||
BEGIN
|
||||
DROP PROCEDURE [dbo].[ProviderUser_ReadByIds]
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[ProviderUser_ReadByIds]
|
||||
@Ids AS [dbo].[GuidIdArray] READONLY
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
IF (SELECT COUNT(1) FROM @Ids) < 1
|
||||
BEGIN
|
||||
RETURN(-1)
|
||||
END
|
||||
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
[dbo].[ProviderUserView]
|
||||
WHERE
|
||||
[Id] IN (SELECT [Id] FROM @Ids)
|
||||
END
|
||||
GO
|
||||
|
||||
|
||||
IF OBJECT_ID('[dbo].[User_BumpAccountRevisionDateByProviderUserIds]') IS NOT NULL
|
||||
BEGIN
|
||||
DROP PROCEDURE [dbo].[User_BumpAccountRevisionDateByProviderUserIds]
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[User_BumpAccountRevisionDateByProviderUserIds]
|
||||
@ProviderUserIds [dbo].[GuidIdArray] READONLY
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
UPDATE
|
||||
U
|
||||
SET
|
||||
U.[AccountRevisionDate] = GETUTCDATE()
|
||||
FROM
|
||||
@ProviderUserIds OUIDs
|
||||
INNER JOIN
|
||||
[dbo].[ProviderUser] PU ON OUIDs.Id = PU.Id AND PU.[Status] = 2 -- Confirmed
|
||||
INNER JOIN
|
||||
[dbo].[User] U ON PU.UserId = U.Id
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID('[dbo].[ProviderUser_DeleteByIds]') IS NOT NULL
|
||||
BEGIN
|
||||
DROP PROCEDURE [dbo].[ProviderUser_DeleteByIds]
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[ProviderUser_DeleteByIds]
|
||||
@Ids [dbo].[GuidIdArray] READONLY
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
EXEC [dbo].[User_BumpAccountRevisionDateByProviderUserIds] @Ids
|
||||
|
||||
DECLARE @UserAndProviderIds [dbo].[TwoGuidIdArray]
|
||||
|
||||
INSERT INTO @UserAndProviderIds
|
||||
(Id1, Id2)
|
||||
SELECT
|
||||
UserId,
|
||||
ProviderId
|
||||
FROM
|
||||
[dbo].[ProviderUser] PU
|
||||
INNER JOIN
|
||||
@Ids PUIds ON PUIds.Id = PU.Id
|
||||
WHERE
|
||||
UserId IS NOT NULL AND
|
||||
ProviderId IS NOT NULL
|
||||
|
||||
DECLARE @BatchSize INT = 100
|
||||
|
||||
-- Delete ProviderUsers
|
||||
WHILE @BatchSize > 0
|
||||
BEGIN
|
||||
BEGIN TRANSACTION ProviderUser_DeleteMany_PUs
|
||||
|
||||
DELETE TOP(@BatchSize) OU
|
||||
FROM
|
||||
[dbo].[ProviderUser] PU
|
||||
INNER JOIN
|
||||
@Ids I ON I.Id = PU.Id
|
||||
|
||||
SET @BatchSize = @@ROWCOUNT
|
||||
|
||||
COMMIT TRANSACTION ProviderUser_DeleteMany_PUs
|
||||
END
|
||||
END
|
||||
GO
|
||||
|
||||
IF OBJECT_ID('[dbo].[Provider_Search]') IS NOT NULL
|
||||
BEGIN
|
||||
DROP PROCEDURE [dbo].[Provider_Search]
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[Provider_Search]
|
||||
@Name NVARCHAR(50),
|
||||
@UserEmail NVARCHAR(256),
|
||||
@Skip INT = 0,
|
||||
@Take INT = 25
|
||||
WITH RECOMPILE
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
DECLARE @NameLikeSearch NVARCHAR(55) = '%' + @Name + '%'
|
||||
|
||||
IF @UserEmail IS NOT NULL
|
||||
BEGIN
|
||||
SELECT
|
||||
O.*
|
||||
FROM
|
||||
[dbo].[ProviderView] O
|
||||
INNER JOIN
|
||||
[dbo].[ProviderUser] OU ON O.[Id] = OU.[ProviderId]
|
||||
INNER JOIN
|
||||
[dbo].[User] U ON U.[Id] = OU.[UserId]
|
||||
WHERE
|
||||
(@Name IS NULL OR O.[Name] LIKE @NameLikeSearch)
|
||||
AND U.[Email] = COALESCE(@UserEmail, U.[Email])
|
||||
ORDER BY O.[CreationDate] DESC
|
||||
OFFSET @Skip ROWS
|
||||
FETCH NEXT @Take ROWS ONLY
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SELECT
|
||||
O.*
|
||||
FROM
|
||||
[dbo].[ProviderView] O
|
||||
WHERE
|
||||
(@Name IS NULL OR O.[Name] LIKE @NameLikeSearch)
|
||||
ORDER BY O.[CreationDate] DESC
|
||||
OFFSET @Skip ROWS
|
||||
FETCH NEXT @Take ROWS ONLY
|
||||
END
|
||||
END
|
||||
GO
|
Reference in New Issue
Block a user