diff --git a/src/Core/Domains/User.cs b/src/Core/Domains/User.cs index eb2b557f47..1f4fcab88f 100644 --- a/src/Core/Domains/User.cs +++ b/src/Core/Domains/User.cs @@ -8,6 +8,7 @@ namespace Bit.Core.Domains public string Id { get; set; } public string Name { get; set; } public string Email { get; set; } + public bool EmailVerified { get; set; } public string MasterPassword { get; set; } public string MasterPasswordHint { get; set; } public string Culture { get; set; } = "en-US"; diff --git a/src/Core/Repositories/SqlServer/CipherRepository.cs b/src/Core/Repositories/SqlServer/CipherRepository.cs index 750c273847..f861c664bd 100644 --- a/src/Core/Repositories/SqlServer/CipherRepository.cs +++ b/src/Core/Repositories/SqlServer/CipherRepository.cs @@ -39,6 +39,7 @@ namespace Bit.Core.Repositories.SqlServer cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@Id", SqlDbType.UniqueIdentifier).Value = new Guid(user.Id); cmd.Parameters.Add("@Email", SqlDbType.NVarChar).Value = user.Email; + cmd.Parameters.Add("@EmailVerified", SqlDbType.NVarChar).Value = user.EmailVerified; cmd.Parameters.Add("@MasterPassword", SqlDbType.NVarChar).Value = user.MasterPassword; cmd.Parameters.Add("@SecurityStamp", SqlDbType.NVarChar).Value = user.SecurityStamp; cmd.Parameters.Add("@RevisionDate", SqlDbType.DateTime2).Value = user.RevisionDate; diff --git a/src/Core/Repositories/SqlServer/Models/UserTableModel.cs b/src/Core/Repositories/SqlServer/Models/UserTableModel.cs index 8806ce9c8e..9aba406ee5 100644 --- a/src/Core/Repositories/SqlServer/Models/UserTableModel.cs +++ b/src/Core/Repositories/SqlServer/Models/UserTableModel.cs @@ -13,6 +13,7 @@ namespace Bit.Core.Repositories.SqlServer.Models Id = new Guid(user.Id); Name = user.Name; Email = user.Email; + EmailVerified = user.EmailVerified; MasterPassword = user.MasterPassword; MasterPasswordHint = user.MasterPasswordHint; Culture = user.Culture; @@ -27,6 +28,7 @@ namespace Bit.Core.Repositories.SqlServer.Models public Guid Id { get; set; } public string Name { get; set; } public string Email { get; set; } + public bool EmailVerified { get; set; } public string MasterPassword { get; set; } public string MasterPasswordHint { get; set; } public string Culture { get; set; } @@ -44,6 +46,7 @@ namespace Bit.Core.Repositories.SqlServer.Models Id = Id.ToString(), Name = Name, Email = Email, + EmailVerified = EmailVerified, MasterPassword = MasterPassword, MasterPasswordHint = MasterPasswordHint, Culture = Culture, diff --git a/src/Core/Services/UserService.cs b/src/Core/Services/UserService.cs index 11c6ef760c..deb462d4d0 100644 --- a/src/Core/Services/UserService.cs +++ b/src/Core/Services/UserService.cs @@ -140,6 +140,7 @@ namespace Bit.Core.Services } user.Email = newEmail; + user.EmailVerified = true; await _cipherRepository.UpdateUserEmailPasswordAndCiphersAsync(user, ciphers); return IdentityResult.Success; } diff --git a/src/Sql/dbo/Stored Procedures/User_Create.sql b/src/Sql/dbo/Stored Procedures/User_Create.sql index 0084f1d28d..8a6b71e255 100644 --- a/src/Sql/dbo/Stored Procedures/User_Create.sql +++ b/src/Sql/dbo/Stored Procedures/User_Create.sql @@ -2,6 +2,7 @@ @Id UNIQUEIDENTIFIER, @Name NVARCHAR(50), @Email NVARCHAR(50), + @EmailVerified BIT, @MasterPassword NVARCHAR(300), @MasterPasswordHint NVARCHAR(50), @Culture NVARCHAR(10), @@ -18,6 +19,7 @@ BEGIN [Id], [Name], [Email], + [EmailVerified], [MasterPassword], [MasterPasswordHint], [Culture], @@ -33,6 +35,7 @@ BEGIN @Id, @Name, @Email, + @EmailVerified, @MasterPassword, @MasterPasswordHint, @Culture, diff --git a/src/Sql/dbo/Stored Procedures/User_Update.sql b/src/Sql/dbo/Stored Procedures/User_Update.sql index 019f7ed5df..d2d5583b46 100644 --- a/src/Sql/dbo/Stored Procedures/User_Update.sql +++ b/src/Sql/dbo/Stored Procedures/User_Update.sql @@ -2,6 +2,7 @@ @Id UNIQUEIDENTIFIER, @Name NVARCHAR(50), @Email NVARCHAR(50), + @EmailVerified BIT, @MasterPassword NVARCHAR(300), @MasterPasswordHint NVARCHAR(50), @Culture NVARCHAR(10), @@ -18,6 +19,7 @@ BEGIN SET [Name] = @Name, [Email] = @Email, + [EmailVerified] = @EmailVerified, [MasterPassword] = @MasterPassword, [MasterPasswordHint] = @MasterPasswordHint, [Culture] = @Culture, diff --git a/src/Sql/dbo/Stored Procedures/User_UpdateEmailPassword.sql b/src/Sql/dbo/Stored Procedures/User_UpdateEmailPassword.sql index d3c77a2589..b83d81619e 100644 --- a/src/Sql/dbo/Stored Procedures/User_UpdateEmailPassword.sql +++ b/src/Sql/dbo/Stored Procedures/User_UpdateEmailPassword.sql @@ -1,6 +1,7 @@ CREATE PROCEDURE [dbo].[User_UpdateEmailPassword] @Id UNIQUEIDENTIFIER, @Email NVARCHAR(50), + @EmailVerified BIT, @MasterPassword NVARCHAR(300), @SecurityStamp NVARCHAR(50), @RevisionDate DATETIME2(7) @@ -10,6 +11,7 @@ BEGIN [dbo].[User] SET [Email] = @Email, + [EmailVerified] = @EmailVerified, [MasterPassword] = @MasterPassword, [SecurityStamp] = @SecurityStamp, [RevisionDate] = @RevisionDate diff --git a/src/Sql/dbo/Tables/User.sql b/src/Sql/dbo/Tables/User.sql index 760b85f1ef..016b3ce518 100644 --- a/src/Sql/dbo/Tables/User.sql +++ b/src/Sql/dbo/Tables/User.sql @@ -2,6 +2,7 @@ [Id] UNIQUEIDENTIFIER NOT NULL, [Name] NVARCHAR (50) NULL, [Email] NVARCHAR (50) NOT NULL, + [EmailVerified] BIT NOT NULL, [MasterPassword] NVARCHAR (300) NOT NULL, [MasterPasswordHint] NVARCHAR (50) NULL, [Culture] NVARCHAR (10) NOT NULL, @@ -16,6 +17,6 @@ GO -CREATE NONCLUSTERED INDEX [IX_User_Email] +CREATE UNIQUE NONCLUSTERED INDEX [IX_User_Email] ON [dbo].[User]([Email] ASC);