1
0
mirror of https://github.com/bitwarden/server.git synced 2025-02-22 02:51:33 +01:00

apis for purging user vault

This commit is contained in:
Kyle Spearrin 2017-10-25 21:26:09 -04:00
parent 3e04377e67
commit a042fd10f1
6 changed files with 84 additions and 0 deletions

View File

@ -353,6 +353,13 @@ namespace Bit.Api.Controllers
string.IsNullOrWhiteSpace(model.FolderId) ? (Guid?)null : new Guid(model.FolderId), userId);
}
[HttpPost("purge")]
public async Task PostPurge()
{
var userId = _userService.GetProperUserId(User).Value;
await _cipherRepository.DeleteByUserIdAsync(userId);
}
[HttpPost("{id}/attachment")]
[DisableFormValueModelBinding]
public async Task<CipherResponseModel> PostAttachment(string id)

View File

@ -25,6 +25,7 @@ namespace Bit.Core.Repositories
Task DeleteAttachmentAsync(Guid cipherId, string attachmentId);
Task DeleteAsync(IEnumerable<Guid> ids, Guid userId);
Task MoveAsync(IEnumerable<Guid> ids, Guid? folderId, Guid userId);
Task DeleteByUserIdAsync(Guid userId);
Task UpdateUserKeysAndCiphersAsync(User user, IEnumerable<Cipher> ciphers, IEnumerable<Folder> folders);
Task CreateAsync(IEnumerable<Cipher> ciphers, IEnumerable<Folder> folders);
Task CreateAsync(IEnumerable<Cipher> ciphers, IEnumerable<Collection> collections,

View File

@ -235,6 +235,17 @@ namespace Bit.Core.Repositories.SqlServer
}
}
public async Task DeleteByUserIdAsync(Guid userId)
{
using(var connection = new SqlConnection(ConnectionString))
{
var results = await connection.ExecuteAsync(
$"[{Schema}].[Cipher_DeleteByUserId]",
new { UserId = userId },
commandType: CommandType.StoredProcedure);
}
}
public Task UpdateUserKeysAndCiphersAsync(User user, IEnumerable<Cipher> ciphers, IEnumerable<Folder> folders)
{
using(var connection = new SqlConnection(ConnectionString))

View File

@ -213,5 +213,6 @@
<Build Include="dbo\Stored Procedures\Organization_ReadByEnabled.sql" />
<Build Include="dbo\Stored Procedures\User_ReadByPremium.sql" />
<Build Include="dbo\Stored Procedures\CipherDetails_ReadById.sql" />
<Build Include="dbo\Stored Procedures\Cipher_DeleteByUserId.sql" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,28 @@
CREATE PROCEDURE [dbo].[Cipher_DeleteByUserId]
@UserId AS UNIQUEIDENTIFIER
AS
BEGIN
SET NOCOUNT ON
DECLARE @BatchSize INT = 100
-- Delete ciphers
WHILE @BatchSize > 0
BEGIN
BEGIN TRANSACTION Cipher_DeleteByUserId_Ciphers
DELETE TOP(@BatchSize)
FROM
[dbo].[Cipher]
WHERE
[UserId] = @UserId
SET @BatchSize = @@ROWCOUNT
COMMIT TRANSACTION Cipher_DeleteByUserId_Ciphers
END
-- Cleanup user
EXEC [dbo].[User_UpdateStorage] @UserId
EXEC [dbo].[User_BumpAccountRevisionDate] @UserId
END

View File

@ -294,3 +294,39 @@ BEGIN
[Id] = @Id
END
GO
IF OBJECT_ID('[dbo].[Cipher_DeleteByUserId]') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[Cipher_DeleteByUserId]
END
GO
CREATE PROCEDURE [dbo].[Cipher_DeleteByUserId]
@UserId AS UNIQUEIDENTIFIER
AS
BEGIN
SET NOCOUNT ON
DECLARE @BatchSize INT = 100
-- Delete ciphers
WHILE @BatchSize > 0
BEGIN
BEGIN TRANSACTION Cipher_DeleteByUserId_Ciphers
DELETE TOP(@BatchSize)
FROM
[dbo].[Cipher]
WHERE
[UserId] = @UserId
SET @BatchSize = @@ROWCOUNT
COMMIT TRANSACTION Cipher_DeleteByUserId_Ciphers
END
-- Cleanup user
EXEC [dbo].[User_UpdateStorage] @UserId
EXEC [dbo].[User_BumpAccountRevisionDate] @UserId
END
GO