11 changed files with 229 additions and 6 deletions
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
namespace Bit.Core.Enums |
||||
{ |
||||
public enum CipherRepromptType : byte |
||||
{ |
||||
None = 0, |
||||
Password = 1, |
||||
} |
||||
} |
||||
@ -0,0 +1,196 @@
@@ -0,0 +1,196 @@
|
||||
IF COL_LENGTH('[dbo].[Cipher]', 'Reprompt') IS NULL |
||||
BEGIN |
||||
ALTER TABLE [dbo].[Cipher] |
||||
ADD [Reprompt] TINYINT NULL; |
||||
END |
||||
GO |
||||
|
||||
IF OBJECT_ID('[dbo].[CipherDetails]') IS NOT NULL |
||||
BEGIN |
||||
DROP FUNCTION [dbo].[CipherDetails] |
||||
END |
||||
GO |
||||
|
||||
CREATE FUNCTION [dbo].[CipherDetails](@UserId UNIQUEIDENTIFIER) |
||||
RETURNS TABLE |
||||
AS RETURN |
||||
SELECT |
||||
C.[Id], |
||||
C.[UserId], |
||||
C.[OrganizationId], |
||||
C.[Type], |
||||
C.[Data], |
||||
C.[Attachments], |
||||
C.[CreationDate], |
||||
C.[RevisionDate], |
||||
CASE |
||||
WHEN |
||||
@UserId IS NULL |
||||
OR C.[Favorites] IS NULL |
||||
OR JSON_VALUE(C.[Favorites], CONCAT('$."', @UserId, '"')) IS NULL |
||||
THEN 0 |
||||
ELSE 1 |
||||
END [Favorite], |
||||
CASE |
||||
WHEN |
||||
@UserId IS NULL |
||||
OR C.[Folders] IS NULL |
||||
THEN NULL |
||||
ELSE TRY_CONVERT(UNIQUEIDENTIFIER, JSON_VALUE(C.[Folders], CONCAT('$."', @UserId, '"'))) |
||||
END [FolderId], |
||||
C.[DeletedDate], |
||||
C.[Reprompt] |
||||
FROM |
||||
[dbo].[Cipher] C |
||||
GO |
||||
|
||||
IF OBJECT_ID('[dbo].[UserCipherDetails]') IS NOT NULL |
||||
BEGIN |
||||
EXECUTE sp_refreshsqlmodule N'[dbo].[UserCipherDetails]'; |
||||
END |
||||
GO |
||||
|
||||
IF OBJECT_ID('[dbo].[CipherDetails_Create]') IS NOT NULL |
||||
BEGIN |
||||
DROP PROCEDURE [dbo].[CipherDetails_Create] |
||||
END |
||||
GO |
||||
|
||||
CREATE PROCEDURE [dbo].[CipherDetails_Create] |
||||
@Id UNIQUEIDENTIFIER, |
||||
@UserId UNIQUEIDENTIFIER, |
||||
@OrganizationId UNIQUEIDENTIFIER, |
||||
@Type TINYINT, |
||||
@Data NVARCHAR(MAX), |
||||
@Favorites NVARCHAR(MAX), -- not used |
||||
@Folders NVARCHAR(MAX), -- not used |
||||
@Attachments NVARCHAR(MAX), -- not used |
||||
@CreationDate DATETIME2(7), |
||||
@RevisionDate DATETIME2(7), |
||||
@FolderId UNIQUEIDENTIFIER, |
||||
@Favorite BIT, |
||||
@Edit BIT, -- not used |
||||
@ViewPassword BIT, -- not used |
||||
@OrganizationUseTotp BIT, -- not used |
||||
@DeletedDate DATETIME2(7), |
||||
@Reprompt TINYINT |
||||
AS |
||||
BEGIN |
||||
SET NOCOUNT ON |
||||
|
||||
DECLARE @UserIdKey VARCHAR(50) = CONCAT('"', @UserId, '"') |
||||
DECLARE @UserIdPath VARCHAR(50) = CONCAT('$.', @UserIdKey) |
||||
|
||||
INSERT INTO [dbo].[Cipher] |
||||
( |
||||
[Id], |
||||
[UserId], |
||||
[OrganizationId], |
||||
[Type], |
||||
[Data], |
||||
[Favorites], |
||||
[Folders], |
||||
[CreationDate], |
||||
[RevisionDate], |
||||
[DeletedDate], |
||||
[Reprompt] |
||||
) |
||||
VALUES |
||||
( |
||||
@Id, |
||||
CASE WHEN @OrganizationId IS NULL THEN @UserId ELSE NULL END, |
||||
@OrganizationId, |
||||
@Type, |
||||
@Data, |
||||
CASE WHEN @Favorite = 1 THEN CONCAT('{', @UserIdKey, ':true}') ELSE NULL END, |
||||
CASE WHEN @FolderId IS NOT NULL THEN CONCAT('{', @UserIdKey, ':"', @FolderId, '"', '}') ELSE NULL END, |
||||
@CreationDate, |
||||
@RevisionDate, |
||||
@DeletedDate, |
||||
@Reprompt |
||||
) |
||||
|
||||
IF @OrganizationId IS NOT NULL |
||||
BEGIN |
||||
EXEC [dbo].[User_BumpAccountRevisionDateByCipherId] @Id, @OrganizationId |
||||
END |
||||
ELSE IF @UserId IS NOT NULL |
||||
BEGIN |
||||
EXEC [dbo].[User_BumpAccountRevisionDate] @UserId |
||||
END |
||||
END |
||||
GO |
||||
|
||||
IF OBJECT_ID('[dbo].[CipherDetails_Update]') IS NOT NULL |
||||
BEGIN |
||||
DROP PROCEDURE [dbo].[CipherDetails_Update] |
||||
END |
||||
GO |
||||
|
||||
CREATE PROCEDURE [dbo].[CipherDetails_Update] |
||||
@Id UNIQUEIDENTIFIER, |
||||
@UserId UNIQUEIDENTIFIER, |
||||
@OrganizationId UNIQUEIDENTIFIER, |
||||
@Type TINYINT, |
||||
@Data NVARCHAR(MAX), |
||||
@Favorites NVARCHAR(MAX), -- not used |
||||
@Folders NVARCHAR(MAX), -- not used |
||||
@Attachments NVARCHAR(MAX), -- not used |
||||
@CreationDate DATETIME2(7), |
||||
@RevisionDate DATETIME2(7), |
||||
@FolderId UNIQUEIDENTIFIER, |
||||
@Favorite BIT, |
||||
@Edit BIT, -- not used |
||||
@ViewPassword BIT, -- not used |
||||
@OrganizationUseTotp BIT, -- not used |
||||
@DeletedDate DATETIME2(2), |
||||
@Reprompt TINYINT |
||||
AS |
||||
BEGIN |
||||
SET NOCOUNT ON |
||||
|
||||
DECLARE @UserIdKey VARCHAR(50) = CONCAT('"', @UserId, '"') |
||||
DECLARE @UserIdPath VARCHAR(50) = CONCAT('$.', @UserIdKey) |
||||
|
||||
UPDATE |
||||
[dbo].[Cipher] |
||||
SET |
||||
[UserId] = CASE WHEN @OrganizationId IS NULL THEN @UserId ELSE NULL END, |
||||
[OrganizationId] = @OrganizationId, |
||||
[Type] = @Type, |
||||
[Data] = @Data, |
||||
[Folders] = |
||||
CASE |
||||
WHEN @FolderId IS NOT NULL AND [Folders] IS NULL THEN |
||||
CONCAT('{', @UserIdKey, ':"', @FolderId, '"', '}') |
||||
WHEN @FolderId IS NOT NULL THEN |
||||
JSON_MODIFY([Folders], @UserIdPath, CAST(@FolderId AS VARCHAR(50))) |
||||
ELSE |
||||
JSON_MODIFY([Folders], @UserIdPath, NULL) |
||||
END, |
||||
[Favorites] = |
||||
CASE |
||||
WHEN @Favorite = 1 AND [Favorites] IS NULL THEN |
||||
CONCAT('{', @UserIdKey, ':true}') |
||||
WHEN @Favorite = 1 THEN |
||||
JSON_MODIFY([Favorites], @UserIdPath, CAST(1 AS BIT)) |
||||
ELSE |
||||
JSON_MODIFY([Favorites], @UserIdPath, NULL) |
||||
END, |
||||
[Reprompt] = @Reprompt, |
||||
[CreationDate] = @CreationDate, |
||||
[RevisionDate] = @RevisionDate, |
||||
[DeletedDate] = @DeletedDate |
||||
WHERE |
||||
[Id] = @Id |
||||
|
||||
IF @OrganizationId IS NOT NULL |
||||
BEGIN |
||||
EXEC [dbo].[User_BumpAccountRevisionDateByCipherId] @Id, @OrganizationId |
||||
END |
||||
ELSE IF @UserId IS NOT NULL |
||||
BEGIN |
||||
EXEC [dbo].[User_BumpAccountRevisionDate] @UserId |
||||
END |
||||
END |
||||
GO |
||||
Loading…
Reference in new issue