diff --git a/src/Sql/Sql.sqlproj b/src/Sql/Sql.sqlproj
index 009c63fee7..3eebc0ec43 100644
--- a/src/Sql/Sql.sqlproj
+++ b/src/Sql/Sql.sqlproj
@@ -65,27 +65,23 @@
-
-
+
+
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Sql/dbo/Stored Procedures/Folder_Create.sql b/src/Sql/dbo/Stored Procedures/Cipher_Create.sql
similarity index 56%
rename from src/Sql/dbo/Stored Procedures/Folder_Create.sql
rename to src/Sql/dbo/Stored Procedures/Cipher_Create.sql
index a3b05d19c0..569dc71e8c 100644
--- a/src/Sql/dbo/Stored Procedures/Folder_Create.sql
+++ b/src/Sql/dbo/Stored Procedures/Cipher_Create.sql
@@ -1,16 +1,20 @@
-CREATE PROCEDURE [dbo].[Folder_Create]
+CREATE PROCEDURE [dbo].[Cipher_Create]
@Id UNIQUEIDENTIFIER,
@UserId UNIQUEIDENTIFIER,
- @Name NVARCHAR(MAX),
+ @FolderId UNIQUEIDENTIFIER,
+ @Type TINYINT,
+ @Data NVARCHAR(MAX),
@CreationDate DATETIME2(7),
@RevisionDate DATETIME2(7)
AS
BEGIN
- INSERT INTO [dbo].[Folder]
+ INSERT INTO [dbo].[Cipher]
(
[Id],
[UserId],
- [Name],
+ [FolderId],
+ [Type],
+ [Data],
[CreationDate],
[RevisionDate]
)
@@ -18,7 +22,9 @@ BEGIN
(
@Id,
@UserId,
- @Name,
+ @FolderId,
+ @Type,
+ @Data,
@CreationDate,
@RevisionDate
)
diff --git a/src/Sql/dbo/Stored Procedures/Cipher_DeleteById.sql b/src/Sql/dbo/Stored Procedures/Cipher_DeleteById.sql
new file mode 100644
index 0000000000..29b81210ef
--- /dev/null
+++ b/src/Sql/dbo/Stored Procedures/Cipher_DeleteById.sql
@@ -0,0 +1,21 @@
+CREATE PROCEDURE [dbo].[Cipher_DeleteById]
+ @Id UNIQUEIDENTIFIER
+AS
+BEGIN
+ BEGIN TRANSACTION Cipher_DeleteById
+
+ UPDATE
+ [dbo].[Cipher]
+ SET
+ [FolderId] = NULL
+ WHERE
+ [FolderId] = @Id
+
+ DELETE
+ FROM
+ [dbo].[Cipher]
+ WHERE
+ [Id] = @Id
+
+ COMMIT TRANSACTION Cipher_DeleteById
+END
diff --git a/src/Sql/dbo/Stored Procedures/Site_ReadById.sql b/src/Sql/dbo/Stored Procedures/Cipher_ReadById.sql
similarity index 57%
rename from src/Sql/dbo/Stored Procedures/Site_ReadById.sql
rename to src/Sql/dbo/Stored Procedures/Cipher_ReadById.sql
index c585f08d4d..f098517ca4 100644
--- a/src/Sql/dbo/Stored Procedures/Site_ReadById.sql
+++ b/src/Sql/dbo/Stored Procedures/Cipher_ReadById.sql
@@ -1,11 +1,11 @@
-CREATE PROCEDURE [dbo].[Site_ReadById]
+CREATE PROCEDURE [dbo].[Cipher_ReadById]
@Id UNIQUEIDENTIFIER
AS
BEGIN
SELECT
*
FROM
- [dbo].[SiteView]
+ [dbo].[CipherView]
WHERE
[Id] = @Id
END
diff --git a/src/Sql/dbo/Stored Procedures/Cipher_ReadByUserId.sql b/src/Sql/dbo/Stored Procedures/Cipher_ReadByUserId.sql
index d6f16b40b7..c9e1528750 100644
--- a/src/Sql/dbo/Stored Procedures/Cipher_ReadByUserId.sql
+++ b/src/Sql/dbo/Stored Procedures/Cipher_ReadByUserId.sql
@@ -5,14 +5,7 @@ BEGIN
SELECT
*
FROM
- [dbo].[FolderView]
- WHERE
- [UserId] = @UserId
-
- SELECT
- *
- FROM
- [dbo].[SiteView]
+ [dbo].[CipherView]
WHERE
[UserId] = @UserId
END
diff --git a/src/Sql/dbo/Stored Procedures/Folder_Update.sql b/src/Sql/dbo/Stored Procedures/Cipher_Update.sql
similarity index 56%
rename from src/Sql/dbo/Stored Procedures/Folder_Update.sql
rename to src/Sql/dbo/Stored Procedures/Cipher_Update.sql
index 4415a93187..c2cd7d7f52 100644
--- a/src/Sql/dbo/Stored Procedures/Folder_Update.sql
+++ b/src/Sql/dbo/Stored Procedures/Cipher_Update.sql
@@ -1,16 +1,20 @@
-CREATE PROCEDURE [dbo].[Folder_Update]
+CREATE PROCEDURE [dbo].[Cipher_Update]
@Id UNIQUEIDENTIFIER,
@UserId UNIQUEIDENTIFIER,
- @Name NVARCHAR(MAX),
+ @FolderId UNIQUEIDENTIFIER,
+ @Type TINYINT,
+ @Data NVARCHAR(MAX),
@CreationDate DATETIME2(7),
@RevisionDate DATETIME2(7)
AS
BEGIN
UPDATE
- [dbo].[Folder]
+ [dbo].[Cipher]
SET
[UserId] = @UserId,
- [Name] = @Name,
+ [FolderId] = @FolderId,
+ [Type] = @Type,
+ [Data] = @Data,
[CreationDate] = @CreationDate,
[RevisionDate] = @RevisionDate
WHERE
diff --git a/src/Sql/dbo/Stored Procedures/Folder_DeleteById.sql b/src/Sql/dbo/Stored Procedures/Folder_DeleteById.sql
deleted file mode 100644
index 7fcc5eedda..0000000000
--- a/src/Sql/dbo/Stored Procedures/Folder_DeleteById.sql
+++ /dev/null
@@ -1,21 +0,0 @@
-CREATE PROCEDURE [dbo].[Folder_DeleteById]
- @Id UNIQUEIDENTIFIER
-AS
-BEGIN
- BEGIN TRANSACTION Folder_DeleteById
-
- UPDATE
- [dbo].[Site]
- SET
- [FolderId] = NULL
- WHERE
- [FolderId] = @Id
-
- DELETE
- FROM
- [dbo].[Folder]
- WHERE
- [Id] = @Id
-
- COMMIT TRANSACTION Folder_DeleteById
-END
diff --git a/src/Sql/dbo/Stored Procedures/Folder_ReadById.sql b/src/Sql/dbo/Stored Procedures/Folder_ReadById.sql
deleted file mode 100644
index 3c322f660c..0000000000
--- a/src/Sql/dbo/Stored Procedures/Folder_ReadById.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-CREATE PROCEDURE [dbo].[Folder_ReadById]
- @Id UNIQUEIDENTIFIER
-AS
-BEGIN
- SELECT
- *
- FROM
- [dbo].[FolderView]
- WHERE
- [Id] = @Id
-END
diff --git a/src/Sql/dbo/Stored Procedures/Folder_ReadByUserId.sql b/src/Sql/dbo/Stored Procedures/Folder_ReadByUserId.sql
deleted file mode 100644
index 6cda77314a..0000000000
--- a/src/Sql/dbo/Stored Procedures/Folder_ReadByUserId.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-CREATE PROCEDURE [dbo].[Folder_ReadByUserId]
- @UserId UNIQUEIDENTIFIER
-AS
-BEGIN
- SELECT
- *
- FROM
- [dbo].[FolderView]
- WHERE
- [UserId] = @UserId
-END
diff --git a/src/Sql/dbo/Stored Procedures/History_Create.sql b/src/Sql/dbo/Stored Procedures/History_Create.sql
new file mode 100644
index 0000000000..81d65673fa
--- /dev/null
+++ b/src/Sql/dbo/Stored Procedures/History_Create.sql
@@ -0,0 +1,22 @@
+CREATE PROCEDURE [dbo].[History_Create]
+ @UserId UNIQUEIDENTIFIER,
+ @CipherId UNIQUEIDENTIFIER,
+ @Event TINYINT,
+ @Date DATETIME2(7)
+AS
+BEGIN
+ INSERT INTO [dbo].[History]
+ (
+ [UserId],
+ [CipherId],
+ [Event],
+ [Date]
+ )
+ VALUES
+ (
+ @UserId,
+ @CipherId,
+ @Event,
+ @Date
+ )
+END
diff --git a/src/Sql/dbo/Stored Procedures/History_ReadById.sql b/src/Sql/dbo/Stored Procedures/History_ReadById.sql
new file mode 100644
index 0000000000..48b528e63d
--- /dev/null
+++ b/src/Sql/dbo/Stored Procedures/History_ReadById.sql
@@ -0,0 +1,11 @@
+CREATE PROCEDURE [dbo].[History_ReadById]
+ @Id BIGINT
+AS
+BEGIN
+ SELECT
+ *
+ FROM
+ [dbo].[HistoryView]
+ WHERE
+ [Id] = @Id
+END
diff --git a/src/Sql/dbo/Stored Procedures/Site_Create.sql b/src/Sql/dbo/Stored Procedures/Site_Create.sql
deleted file mode 100644
index 82eb157ff6..0000000000
--- a/src/Sql/dbo/Stored Procedures/Site_Create.sql
+++ /dev/null
@@ -1,40 +0,0 @@
-CREATE PROCEDURE [dbo].[Site_Create]
- @Id UNIQUEIDENTIFIER,
- @UserId UNIQUEIDENTIFIER,
- @FolderId UNIQUEIDENTIFIER,
- @Name NVARCHAR(MAX),
- @Uri NVARCHAR(MAX),
- @Username NVARCHAR(MAX),
- @Password NVARCHAR(MAX),
- @Notes NVARCHAR(MAX),
- @CreationDate DATETIME2(7),
- @RevisionDate DATETIME2(7)
-AS
-BEGIN
- INSERT INTO [dbo].[Site]
- (
- [Id],
- [UserId],
- [FolderId],
- [Name],
- [Uri],
- [Username],
- [Password],
- [Notes],
- [CreationDate],
- [RevisionDate]
- )
- VALUES
- (
- @Id,
- @UserId,
- @FolderId,
- @Name,
- @Uri,
- @Username,
- @Password,
- @Notes,
- @CreationDate,
- @RevisionDate
- )
-END
diff --git a/src/Sql/dbo/Stored Procedures/Site_DeleteById.sql b/src/Sql/dbo/Stored Procedures/Site_DeleteById.sql
deleted file mode 100644
index 097600fb17..0000000000
--- a/src/Sql/dbo/Stored Procedures/Site_DeleteById.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE PROCEDURE [dbo].[Site_DeleteById]
- @Id UNIQUEIDENTIFIER
-AS
-BEGIN
- DELETE
- FROM
- [dbo].[Site]
- WHERE
- [Id] = @Id
-END
diff --git a/src/Sql/dbo/Stored Procedures/Site_ReadByUserId.sql b/src/Sql/dbo/Stored Procedures/Site_ReadByUserId.sql
deleted file mode 100644
index 7b15030920..0000000000
--- a/src/Sql/dbo/Stored Procedures/Site_ReadByUserId.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-CREATE PROCEDURE [dbo].[Site_ReadByUserId]
- @UserId UNIQUEIDENTIFIER
-AS
-BEGIN
- SELECT
- *
- FROM
- [dbo].[SiteView]
- WHERE
- [UserId] = @UserId
-END
diff --git a/src/Sql/dbo/Stored Procedures/Site_Update.sql b/src/Sql/dbo/Stored Procedures/Site_Update.sql
deleted file mode 100644
index fb9786713b..0000000000
--- a/src/Sql/dbo/Stored Procedures/Site_Update.sql
+++ /dev/null
@@ -1,28 +0,0 @@
-CREATE PROCEDURE [dbo].[Site_Update]
- @Id UNIQUEIDENTIFIER,
- @UserId UNIQUEIDENTIFIER,
- @FolderId UNIQUEIDENTIFIER,
- @Name NVARCHAR(MAX),
- @Uri NVARCHAR(MAX),
- @Username NVARCHAR(MAX),
- @Password NVARCHAR(MAX),
- @Notes NVARCHAR(MAX),
- @CreationDate DATETIME2(7),
- @RevisionDate DATETIME2(7)
-AS
-BEGIN
- UPDATE
- [dbo].[Site]
- SET
- [UserId] = @UserId,
- [FolderId] = @FolderId,
- [Name] = @Name,
- [Uri] = @Uri,
- [Username] = @Username,
- [Password] = @Password,
- [Notes] = @Notes,
- [CreationDate] = @CreationDate,
- [RevisionDate] = @RevisionDate
- WHERE
- [Id] = @Id
-END
diff --git a/src/Sql/dbo/Stored Procedures/User_DeleteById.sql b/src/Sql/dbo/Stored Procedures/User_DeleteById.sql
index 4971ef4f22..c2d1c93f52 100644
--- a/src/Sql/dbo/Stored Procedures/User_DeleteById.sql
+++ b/src/Sql/dbo/Stored Procedures/User_DeleteById.sql
@@ -6,13 +6,7 @@ BEGIN
DELETE
FROM
- [dbo].[Site]
- WHERE
- [UserId] = @Id
-
- DELETE
- FROM
- [dbo].[Folder]
+ [dbo].[Cipher]
WHERE
[UserId] = @Id
diff --git a/src/Sql/dbo/Tables/Cipher.sql b/src/Sql/dbo/Tables/Cipher.sql
new file mode 100644
index 0000000000..9e981e6878
--- /dev/null
+++ b/src/Sql/dbo/Tables/Cipher.sql
@@ -0,0 +1,61 @@
+CREATE TABLE [dbo].[Cipher] (
+ [Id] UNIQUEIDENTIFIER NOT NULL,
+ [UserId] UNIQUEIDENTIFIER NOT NULL,
+ [FolderId] UNIQUEIDENTIFIER NULL,
+ [Type] TINYINT NOT NULL,
+ [Data] NVARCHAR (MAX) NOT NULL,
+ [CreationDate] DATETIME2 (7) NOT NULL,
+ [RevisionDate] DATETIME2 (7) NOT NULL,
+ CONSTRAINT [PK_Cipher] PRIMARY KEY CLUSTERED ([Id] ASC),
+ CONSTRAINT [FK_Cipher_Folder] FOREIGN KEY ([FolderId]) REFERENCES [dbo].[Cipher] ([Id]),
+ CONSTRAINT [FK_Cipher_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id])
+);
+
+
+GO
+CREATE NONCLUSTERED INDEX [IX_Cipher_UserId]
+ ON [dbo].[Cipher]([UserId] ASC);
+
+
+GO
+CREATE TRIGGER [dbo].[Cipher_Inserted]
+ON [dbo].[Cipher] AFTER INSERT
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ DECLARE @UserId UNIQUEIDENTIFIER = (SELECT [UserId] FROM INSERTED)
+ DECLARE @CipherId UNIQUEIDENTIFIER = (SELECT [Id] FROM INSERTED)
+ DECLARE @Date DATETIME2(7) = (SELECT [CreationDate] FROM INSERTED)
+
+ EXEC [dbo].[History_Create] @UserId, @CipherId, 0 /* Insert */, @Date
+END
+
+
+GO
+CREATE TRIGGER [dbo].[Cipher_Updated]
+ON [dbo].[Cipher] AFTER UPDATE
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ DECLARE @UserId UNIQUEIDENTIFIER = (SELECT [UserId] FROM INSERTED)
+ DECLARE @CipherId UNIQUEIDENTIFIER = (SELECT [Id] FROM INSERTED)
+ DECLARE @Date DATETIME2(7) = (SELECT [RevisionDate] FROM INSERTED)
+
+ EXEC [dbo].[History_Create] @UserId, @CipherId, 1 /* Update */, @Date
+END
+
+
+GO
+CREATE TRIGGER [dbo].[Cipher_Deleted]
+ON [dbo].[Cipher] AFTER DELETE
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ DECLARE @UserId UNIQUEIDENTIFIER = (SELECT [UserId] FROM DELETED)
+ DECLARE @CipherId UNIQUEIDENTIFIER = (SELECT [Id] FROM DELETED)
+
+ EXEC [dbo].[History_Create] @UserId, @CipherId, 2 /* Delete */, GETUTCDATE
+END
diff --git a/src/Sql/dbo/Tables/Folder.sql b/src/Sql/dbo/Tables/Folder.sql
deleted file mode 100644
index 5b1d63d504..0000000000
--- a/src/Sql/dbo/Tables/Folder.sql
+++ /dev/null
@@ -1,15 +0,0 @@
-CREATE TABLE [dbo].[Folder] (
- [Id] UNIQUEIDENTIFIER NOT NULL,
- [UserId] UNIQUEIDENTIFIER NOT NULL,
- [Name] NVARCHAR (MAX) NOT NULL,
- [CreationDate] DATETIME2 (7) NOT NULL,
- [RevisionDate] DATETIME2 (7) NOT NULL,
- CONSTRAINT [PK_Folder] PRIMARY KEY CLUSTERED ([Id] ASC),
- CONSTRAINT [FK_Folder_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id])
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_Folder_UserId]
- ON [dbo].[Folder]([UserId] ASC);
-
diff --git a/src/Sql/dbo/Tables/History.sql b/src/Sql/dbo/Tables/History.sql
new file mode 100644
index 0000000000..c5e994aa98
--- /dev/null
+++ b/src/Sql/dbo/Tables/History.sql
@@ -0,0 +1,11 @@
+CREATE TABLE [dbo].[History] (
+ [Id] BIGINT IDENTITY (1, 1) NOT NULL,
+ [UserId] UNIQUEIDENTIFIER NOT NULL,
+ [CipherId] UNIQUEIDENTIFIER NOT NULL,
+ [Event] TINYINT NOT NULL,
+ [Date] DATETIME2 (7) NOT NULL,
+ CONSTRAINT [PK_CipherHistory] PRIMARY KEY CLUSTERED ([Id] ASC),
+ CONSTRAINT [FK_CipherHistory_Cipher] FOREIGN KEY ([CipherId]) REFERENCES [dbo].[Cipher] ([Id]),
+ CONSTRAINT [FK_CipherHistory_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id])
+);
+
diff --git a/src/Sql/dbo/Tables/Site.sql b/src/Sql/dbo/Tables/Site.sql
deleted file mode 100644
index 7dbbf7e4bf..0000000000
--- a/src/Sql/dbo/Tables/Site.sql
+++ /dev/null
@@ -1,21 +0,0 @@
-CREATE TABLE [dbo].[Site] (
- [Id] UNIQUEIDENTIFIER NOT NULL,
- [UserId] UNIQUEIDENTIFIER NOT NULL,
- [FolderId] UNIQUEIDENTIFIER NULL,
- [Name] NVARCHAR (MAX) NOT NULL,
- [Uri] NVARCHAR (MAX) NULL,
- [Username] NVARCHAR (MAX) NULL,
- [Password] NVARCHAR (MAX) NULL,
- [Notes] NVARCHAR (MAX) NULL,
- [CreationDate] DATETIME2 (7) NOT NULL,
- [RevisionDate] DATETIME2 (7) NOT NULL,
- CONSTRAINT [PK_Site] PRIMARY KEY CLUSTERED ([Id] ASC),
- CONSTRAINT [FK_Site_Folder] FOREIGN KEY ([FolderId]) REFERENCES [dbo].[Folder] ([Id]),
- CONSTRAINT [FK_Site_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id])
-);
-
-
-GO
-CREATE NONCLUSTERED INDEX [IX_Site_UserId]
- ON [dbo].[Site]([UserId] ASC);
-
diff --git a/src/Sql/dbo/Views/CipherView.sql b/src/Sql/dbo/Views/CipherView.sql
new file mode 100644
index 0000000000..58a144318e
--- /dev/null
+++ b/src/Sql/dbo/Views/CipherView.sql
@@ -0,0 +1,6 @@
+CREATE VIEW [dbo].[CipherView]
+AS
+SELECT
+ *
+FROM
+ [dbo].[Cipher]
diff --git a/src/Sql/dbo/Views/FolderView.sql b/src/Sql/dbo/Views/FolderView.sql
deleted file mode 100644
index 4a6fc91581..0000000000
--- a/src/Sql/dbo/Views/FolderView.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-CREATE VIEW [dbo].[FolderView]
-AS
-SELECT
- *
-FROM
- [dbo].[Folder]
diff --git a/src/Sql/dbo/Views/HistoryView.sql b/src/Sql/dbo/Views/HistoryView.sql
new file mode 100644
index 0000000000..0b0caceda6
--- /dev/null
+++ b/src/Sql/dbo/Views/HistoryView.sql
@@ -0,0 +1,6 @@
+CREATE VIEW [dbo].[HistoryView]
+AS
+SELECT
+ *
+FROM
+ [dbo].[History]
diff --git a/src/Sql/dbo/Views/SiteView.sql b/src/Sql/dbo/Views/SiteView.sql
deleted file mode 100644
index 02cb44fd10..0000000000
--- a/src/Sql/dbo/Views/SiteView.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-CREATE VIEW [dbo].[SiteView]
-AS
-SELECT
- *
-FROM
- [dbo].[Site]