1
0
mirror of https://github.com/bitwarden/server.git synced 2025-07-17 23:50:58 -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:
Oscar Hinton
2021-06-03 18:58:29 +02:00
committed by GitHub
parent 58954f161e
commit fe1ffb6a22
58 changed files with 2110 additions and 6 deletions

View File

@ -136,6 +136,7 @@
<Build Include="dbo\Stored Procedures\User_BumpAccountRevisionDateByOrganizationId.sql" />
<Build Include="dbo\Stored Procedures\User_BumpAccountRevisionDateByOrganizationUserId.sql" />
<Build Include="dbo\Stored Procedures\User_BumpAccountRevisionDateByOrganizationUserIds.sql" />
<Build Include="dbo\Stored Procedures\User_BumpAccountRevisionDateByProviderUserIds.sql" />
<Build Include="dbo\Stored Procedures\Cipher_Delete.sql" />
<Build Include="dbo\Stored Procedures\User_ReadPublicKeyById.sql" />
<Build Include="dbo\Stored Procedures\User_ReadPublicKeysByOrganizationUserIds.sql" />
@ -330,14 +331,18 @@
<Build Include="dbo\Stored Procedures\Provider_Update.sql" />
<Build Include="dbo\Stored Procedures\Provider_DeleteById.sql" />
<Build Include="dbo\Stored Procedures\Provider_ReadById.sql" />
<Build Include="dbo\Stored Procedures\Provider_Search.sql" />
<Build Include="dbo\Tables\ProviderUser.sql" />
<Build Include="dbo\Views\ProviderUserView.sql" />
<Build Include="dbo\Stored Procedures\ProviderUser_Create.sql" />
<Build Include="dbo\Stored Procedures\ProviderUser_Update.sql" />
<Build Include="dbo\Stored Procedures\ProviderUser_DeleteById.sql" />
<Build Include="dbo\Stored Procedures\ProviderUser_DeleteByIds.sql" />
<Build Include="dbo\Stored Procedures\ProviderUser_ReadById.sql" />
<Build Include="dbo\Stored Procedures\ProviderUser_ReadByIds.sql" />
<Build Include="dbo\Stored Procedures\ProviderUser_ReadByProviderId.sql" />
<Build Include="dbo\Stored Procedures\ProviderUser_ReadByUserId.sql" />
<Build Include="dbo\Stored Procedures\ProviderUser_ReadCountByProviderIdEmail.sql" />
<Build Include="dbo\Tables\ProviderOrganization.sql" />
<Build Include="dbo\Views\ProviderOrganizationView.sql" />
<Build Include="dbo\Stored Procedures\ProviderOrganization_Create.sql" />

View File

@ -0,0 +1,42 @@
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

View File

@ -0,0 +1,18 @@
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

View File

@ -1,5 +1,6 @@
CREATE PROCEDURE [dbo].[ProviderUser_ReadByProviderId]
@ProviderId UNIQUEIDENTIFIER
@ProviderId UNIQUEIDENTIFIER,
@Type TINYINT
AS
BEGIN
SET NOCOUNT ON
@ -10,4 +11,5 @@ BEGIN
[dbo].[ProviderUserView]
WHERE
[ProviderId] = @ProviderId
AND [Type] = COALESCE(@Type, [Type])
END

View File

@ -0,0 +1,21 @@
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

View File

@ -0,0 +1,41 @@
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

View File

@ -0,0 +1,18 @@
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

View File

@ -1,13 +1,13 @@
CREATE TABLE [dbo].[Provider] (
[Id] UNIQUEIDENTIFIER NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
[Name] NVARCHAR (50) NULL,
[BusinessName] NVARCHAR (50) NULL,
[BusinessAddress1] NVARCHAR (50) NULL,
[BusinessAddress2] NVARCHAR (50) NULL,
[BusinessAddress3] NVARCHAR (50) NULL,
[BusinessCountry] VARCHAR (2) NULL,
[BusinessTaxNumber] NVARCHAR (30) NULL,
[BillingEmail] NVARCHAR (256) NOT NULL,
[BillingEmail] NVARCHAR (256) NULL,
[Status] TINYINT NOT NULL,
[Enabled] BIT NOT NULL,
[CreationDate] DATETIME2 (7) NOT NULL,