diff --git a/src/Core/Enums/CipherType.cs b/src/Core/Enums/CipherType.cs index 65d8ed657..2fc8c2212 100644 --- a/src/Core/Enums/CipherType.cs +++ b/src/Core/Enums/CipherType.cs @@ -4,6 +4,7 @@ { // Folder is deprecated Folder = 0, - Login = 1 + Login = 1, + SecureNote = 2 } } diff --git a/src/Core/Enums/FieldType.cs b/src/Core/Enums/FieldType.cs new file mode 100644 index 000000000..074a58d49 --- /dev/null +++ b/src/Core/Enums/FieldType.cs @@ -0,0 +1,9 @@ +namespace Bit.Core.Enums +{ + public enum FieldType : byte + { + Text = 0, + Password = 1, + Boolean = 2 + } +} diff --git a/src/Core/Enums/SecureNoteType.cs b/src/Core/Enums/SecureNoteType.cs new file mode 100644 index 000000000..cc84edfc3 --- /dev/null +++ b/src/Core/Enums/SecureNoteType.cs @@ -0,0 +1,7 @@ +namespace Bit.Core.Enums +{ + public enum SecureNoteType : byte + { + Generic = 0 + } +} diff --git a/src/Core/Models/Api/CipherDataModel.cs b/src/Core/Models/Api/CipherDataModel.cs new file mode 100644 index 000000000..9e7b55d1e --- /dev/null +++ b/src/Core/Models/Api/CipherDataModel.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace Bit.Core.Models.Api +{ + public abstract class CipherDataModel + { + public string Name { get; set; } + public string Notes { get; set; } + public IEnumerable Fields { get; set; } + } +} diff --git a/src/Core/Models/Api/FieldDataModel.cs b/src/Core/Models/Api/FieldDataModel.cs new file mode 100644 index 000000000..f3ec4bc62 --- /dev/null +++ b/src/Core/Models/Api/FieldDataModel.cs @@ -0,0 +1,14 @@ +using System.ComponentModel.DataAnnotations; +using Bit.Core.Enums; + +namespace Bit.Core.Models.Api +{ + public class FieldDataModel + { + public FieldType Type { get; set; } + [StringLength(1000)] + public string Name { get; set; } + [StringLength(1000)] + public string Value { get; set; } + } +} diff --git a/src/Core/Models/Api/LoginDataModel.cs b/src/Core/Models/Api/LoginDataModel.cs index bd9a601fb..e08b67a72 100644 --- a/src/Core/Models/Api/LoginDataModel.cs +++ b/src/Core/Models/Api/LoginDataModel.cs @@ -4,27 +4,31 @@ using Newtonsoft.Json; namespace Bit.Core.Models.Api { - public class LoginDataModel + public class LoginDataModel : CipherDataModel { public LoginDataModel() { } public LoginDataModel(LoginRequestModel login) { Name = login.Name; + Notes = login.Notes; + Fields = login.Fields; + Uri = login.Uri; Username = login.Username; Password = login.Password; - Notes = login.Notes; Totp = login.Totp; } public LoginDataModel(CipherRequestModel cipher) { Name = cipher.Name; + Notes = cipher.Notes; + Fields = cipher.Fields; + Uri = cipher.Uri; Username = cipher.Username; Password = cipher.Password; - Notes = cipher.Notes; Totp = cipher.Totp; } @@ -38,18 +42,18 @@ namespace Bit.Core.Models.Api var data = JsonConvert.DeserializeObject(cipher.Data); Name = data.Name; + Notes = data.Notes; + Fields = data.Fields; + Uri = data.Uri; Username = data.Username; Password = data.Password; - Notes = data.Notes; Totp = data.Totp; } - public string Name { get; set; } public string Uri { get; set; } public string Username { get; set; } public string Password { get; set; } - public string Notes { get; set; } public string Totp { get; set; } } } diff --git a/src/Core/Models/Api/Request/CipherRequestModel.cs b/src/Core/Models/Api/Request/CipherRequestModel.cs index 43cfac533..faa2c3ad8 100644 --- a/src/Core/Models/Api/Request/CipherRequestModel.cs +++ b/src/Core/Models/Api/Request/CipherRequestModel.cs @@ -37,16 +37,8 @@ namespace Bit.Core.Models.Api [EncryptedString] [StringLength(1000)] public string Totp { get; set; } - - public virtual Cipher ToCipher(Guid userId) - { - return ToCipher(new Cipher - { - Id = new Guid(Id), - UserId = string.IsNullOrWhiteSpace(OrganizationId) ? (Guid?)userId : null, - Type = Type - }); - } + public IEnumerable Fields { get; set; } + public Dictionary Attachments { get; set; } public virtual Cipher ToCipher(Cipher existingCipher) { @@ -60,29 +52,23 @@ namespace Bit.Core.Models.Api throw new ArgumentException("Unsupported " + nameof(Type) + "."); } - return existingCipher; - } - } - - public class CipherAttachmentRequestModel : CipherRequestModel - { - public Dictionary Attachments { get; set; } - - public override Cipher ToCipher(Cipher existingCipher) - { - base.ToCipher(existingCipher); - - var attachments = existingCipher.GetAttachments(); - if((Attachments?.Count ?? 0) > 0 && (attachments?.Count ?? 0) > 0) + if((Attachments?.Count ?? 0) == 0) { - foreach(var attachment in existingCipher.GetAttachments().Where(a => Attachments.ContainsKey(a.Key))) - { - attachment.Value.FileName = Attachments[attachment.Key]; - } - - existingCipher.SetAttachments(attachments); + return existingCipher; } + var attachments = existingCipher.GetAttachments(); + if((attachments?.Count ?? 0) == 0) + { + return existingCipher; + } + + foreach(var attachment in attachments.Where(a => Attachments.ContainsKey(a.Key))) + { + attachment.Value.FileName = Attachments[attachment.Key]; + } + + existingCipher.SetAttachments(attachments); return existingCipher; } } @@ -92,7 +78,7 @@ namespace Bit.Core.Models.Api [Required] public IEnumerable CollectionIds { get; set; } [Required] - public CipherAttachmentRequestModel Cipher { get; set; } + public CipherRequestModel Cipher { get; set; } public IEnumerable Validate(ValidationContext validationContext) { diff --git a/src/Core/Models/Api/Request/LoginRequestModel.cs b/src/Core/Models/Api/Request/LoginRequestModel.cs index 2e6ee69fe..aa2075023 100644 --- a/src/Core/Models/Api/Request/LoginRequestModel.cs +++ b/src/Core/Models/Api/Request/LoginRequestModel.cs @@ -4,6 +4,7 @@ using Bit.Core.Utilities; using Newtonsoft.Json; using Core.Models.Data; using Bit.Core.Models.Table; +using System.Collections.Generic; namespace Bit.Core.Models.Api { @@ -33,6 +34,7 @@ namespace Bit.Core.Models.Api [EncryptedString] [StringLength(1000)] public string Totp { get; set; } + public IEnumerable Fields { get; set; } public CipherDetails ToCipherDetails(Guid userId) { diff --git a/src/Core/Models/Api/SecureNoteModel.cs b/src/Core/Models/Api/SecureNoteModel.cs new file mode 100644 index 000000000..63ad6b720 --- /dev/null +++ b/src/Core/Models/Api/SecureNoteModel.cs @@ -0,0 +1,30 @@ +using System; +using Bit.Core.Enums; +using Bit.Core.Models.Table; +using Newtonsoft.Json; + +namespace Bit.Core.Models.Api +{ + public class SecureNoteDataModel : CipherDataModel + { + public SecureNoteDataModel() { } + + public SecureNoteDataModel(Cipher cipher) + { + if(cipher.Type != CipherType.SecureNote) + { + throw new ArgumentException("Cipher is not correct type."); + } + + var data = JsonConvert.DeserializeObject(cipher.Data); + + Name = data.Name; + Notes = data.Notes; + Fields = data.Fields; + + Type = data.Type; + } + + public SecureNoteType Type { get; set; } + } +}