diff --git a/src/Core/Models/Api/CipherLoginModel.cs b/src/Core/Models/Api/CipherLoginModel.cs index bb5bf2a22a..71067e5394 100644 --- a/src/Core/Models/Api/CipherLoginModel.cs +++ b/src/Core/Models/Api/CipherLoginModel.cs @@ -1,10 +1,10 @@ -using System.ComponentModel.DataAnnotations; +using System; +using System.ComponentModel.DataAnnotations; using Bit.Core.Utilities; using Bit.Core.Enums; using System.Collections.Generic; using System.Linq; using Bit.Core.Models.Data; -using Newtonsoft.Json; namespace Bit.Core.Models.Api { @@ -22,6 +22,7 @@ namespace Bit.Core.Models.Api Username = data.Username; Password = data.Password; + PasswordRevisionDate = data.PasswordRevisionDate; Totp = data.Totp; } @@ -52,6 +53,7 @@ namespace Bit.Core.Models.Api [EncryptedString] [StringLength(1000)] public string Password { get; set; } + public DateTime? PasswordRevisionDate { get; set; } [EncryptedString] [StringLength(1000)] public string Totp { get; set; } diff --git a/src/Core/Models/Api/CipherPasswordHistoryModel.cs b/src/Core/Models/Api/CipherPasswordHistoryModel.cs new file mode 100644 index 0000000000..e6dc4a8afa --- /dev/null +++ b/src/Core/Models/Api/CipherPasswordHistoryModel.cs @@ -0,0 +1,23 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Bit.Core.Models.Data; + +namespace Bit.Core.Models.Api +{ + public class CipherPasswordHistoryModel + { + public CipherPasswordHistoryModel() { } + + public CipherPasswordHistoryModel(CipherPasswordHistoryData data) + { + Password = data.Password; + LastUsedDate = data.LastUsedDate; + } + + [StringLength(2000)] + [Required] + public string Password { get; set; } + [Required] + public DateTime? LastUsedDate { get; set; } + } +} diff --git a/src/Core/Models/Api/Request/CipherRequestModel.cs b/src/Core/Models/Api/Request/CipherRequestModel.cs index 952f765196..023d7080f1 100644 --- a/src/Core/Models/Api/Request/CipherRequestModel.cs +++ b/src/Core/Models/Api/Request/CipherRequestModel.cs @@ -28,6 +28,7 @@ namespace Bit.Core.Models.Api [StringLength(10000)] public string Notes { get; set; } public IEnumerable Fields { get; set; } + public IEnumerable PasswordHistory { get; set; } public Dictionary Attachments { get; set; } public CipherLoginModel Login { get; set; } diff --git a/src/Core/Models/Api/Response/CipherResponseModel.cs b/src/Core/Models/Api/Response/CipherResponseModel.cs index cba6173170..37d80867ae 100644 --- a/src/Core/Models/Api/Response/CipherResponseModel.cs +++ b/src/Core/Models/Api/Response/CipherResponseModel.cs @@ -55,6 +55,7 @@ namespace Bit.Core.Models.Api Name = cipherData.Name; Notes = cipherData.Notes; Fields = cipherData.Fields?.Select(f => new CipherFieldModel(f)); + PasswordHistory = cipherData.PasswordHistory?.Select(ph => new CipherPasswordHistoryModel(ph)); RevisionDate = cipher.RevisionDate; OrganizationId = cipher.OrganizationId?.ToString(); Attachments = AttachmentResponseModel.FromCipher(cipher, globalSettings); @@ -72,6 +73,7 @@ namespace Bit.Core.Models.Api public CipherIdentityModel Identity { get; set; } public CipherSecureNoteModel SecureNote { get; set; } public IEnumerable Fields { get; set; } + public IEnumerable PasswordHistory { get; set; } public IEnumerable Attachments { get; set; } public bool OrganizationUseTotp { get; set; } public DateTime RevisionDate { get; set; } diff --git a/src/Core/Models/Data/CipherData.cs b/src/Core/Models/Data/CipherData.cs index 66b393db5f..bc6462626b 100644 --- a/src/Core/Models/Data/CipherData.cs +++ b/src/Core/Models/Data/CipherData.cs @@ -13,10 +13,12 @@ namespace Bit.Core.Models.Data Name = cipher.Name; Notes = cipher.Notes; Fields = cipher.Fields?.Select(f => new CipherFieldData(f)); + PasswordHistory = cipher.PasswordHistory?.Select(ph => new CipherPasswordHistoryData(ph)); } public string Name { get; set; } public string Notes { get; set; } public IEnumerable Fields { get; set; } + public IEnumerable PasswordHistory { get; set; } } } diff --git a/src/Core/Models/Data/CipherLoginData.cs b/src/Core/Models/Data/CipherLoginData.cs index 74c7f8adc4..6bfbc5eb81 100644 --- a/src/Core/Models/Data/CipherLoginData.cs +++ b/src/Core/Models/Data/CipherLoginData.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using Bit.Core.Enums; using Bit.Core.Models.Api; @@ -17,6 +18,7 @@ namespace Bit.Core.Models.Data Uris = cipher.Login.Uris?.Where(u => u != null).Select(u => new CipherLoginUriData(u)); Username = cipher.Login.Username; Password = cipher.Login.Password; + PasswordRevisionDate = cipher.Login.PasswordRevisionDate; Totp = cipher.Login.Totp; } @@ -28,6 +30,7 @@ namespace Bit.Core.Models.Data public IEnumerable Uris { get; set; } public string Username { get; set; } public string Password { get; set; } + public DateTime? PasswordRevisionDate { get; set; } public string Totp { get; set; } public class CipherLoginUriData diff --git a/src/Core/Models/Data/CipherPasswordHistoryData.cs b/src/Core/Models/Data/CipherPasswordHistoryData.cs new file mode 100644 index 0000000000..ce8452cba4 --- /dev/null +++ b/src/Core/Models/Data/CipherPasswordHistoryData.cs @@ -0,0 +1,19 @@ +using System; +using Bit.Core.Models.Api; + +namespace Bit.Core.Models.Data +{ + public class CipherPasswordHistoryData + { + public CipherPasswordHistoryData() { } + + public CipherPasswordHistoryData(CipherPasswordHistoryModel phModel) + { + Password = phModel.Password; + LastUsedDate = phModel.LastUsedDate.Value; + } + + public string Password { get; set; } + public DateTime LastUsedDate { get; set; } + } +}