mirror of
https://github.com/bitwarden/server.git
synced 2024-11-26 12:55:17 +01:00
add support for multiple uris on login model.
refactor cipher data models.
This commit is contained in:
parent
555e478ec3
commit
3563a85318
11
src/Core/Enums/UriMatchType.cs
Normal file
11
src/Core/Enums/UriMatchType.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
namespace Bit.Core.Enums
|
||||||
|
{
|
||||||
|
public enum UriMatchType : byte
|
||||||
|
{
|
||||||
|
BaseDomain = 0,
|
||||||
|
FullHostname = 1,
|
||||||
|
FullUri = 2,
|
||||||
|
StartsWith = 3,
|
||||||
|
RegularExpression = 4
|
||||||
|
}
|
||||||
|
}
|
@ -1,53 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Bit.Core.Models.Table;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace Bit.Core.Models.Api
|
|
||||||
{
|
|
||||||
public class CardDataModel : CipherDataModel
|
|
||||||
{
|
|
||||||
public CardDataModel() { }
|
|
||||||
|
|
||||||
public CardDataModel(CipherRequestModel cipher)
|
|
||||||
{
|
|
||||||
Name = cipher.Name;
|
|
||||||
Notes = cipher.Notes;
|
|
||||||
Fields = cipher.Fields;
|
|
||||||
|
|
||||||
CardholderName = cipher.Card.CardholderName;
|
|
||||||
Brand = cipher.Card.Brand;
|
|
||||||
Number = cipher.Card.Number;
|
|
||||||
ExpMonth = cipher.Card.ExpMonth;
|
|
||||||
ExpYear = cipher.Card.ExpYear;
|
|
||||||
Code = cipher.Card.Code;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CardDataModel(Cipher cipher)
|
|
||||||
{
|
|
||||||
if(cipher.Type != Enums.CipherType.Card)
|
|
||||||
{
|
|
||||||
throw new ArgumentException("Cipher is not correct type.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var data = JsonConvert.DeserializeObject<CardDataModel>(cipher.Data);
|
|
||||||
|
|
||||||
Name = data.Name;
|
|
||||||
Notes = data.Notes;
|
|
||||||
Fields = data.Fields;
|
|
||||||
|
|
||||||
CardholderName = data.CardholderName;
|
|
||||||
Brand = data.Brand;
|
|
||||||
Number = data.Number;
|
|
||||||
ExpMonth = data.ExpMonth;
|
|
||||||
ExpYear = data.ExpYear;
|
|
||||||
Code = data.Code;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string CardholderName { get; set; }
|
|
||||||
public string Brand { get; set; }
|
|
||||||
public string Number { get; set; }
|
|
||||||
public string ExpMonth { get; set; }
|
|
||||||
public string ExpYear { get; set; }
|
|
||||||
public string Code { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
40
src/Core/Models/Api/CipherCardModel.cs
Normal file
40
src/Core/Models/Api/CipherCardModel.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using Bit.Core.Models.Data;
|
||||||
|
using Bit.Core.Utilities;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.Api
|
||||||
|
{
|
||||||
|
public class CipherCardModel
|
||||||
|
{
|
||||||
|
public CipherCardModel() { }
|
||||||
|
|
||||||
|
public CipherCardModel(CipherCardData data)
|
||||||
|
{
|
||||||
|
CardholderName = data.CardholderName;
|
||||||
|
Brand = data.Brand;
|
||||||
|
Number = data.Number;
|
||||||
|
ExpMonth = data.ExpMonth;
|
||||||
|
ExpYear = data.ExpYear;
|
||||||
|
Code = data.Code;
|
||||||
|
}
|
||||||
|
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string CardholderName { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Brand { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Number { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string ExpMonth { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string ExpYear { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Code { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,11 +0,0 @@
|
|||||||
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<FieldDataModel> Fields { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +1,18 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Models.Data;
|
||||||
|
|
||||||
namespace Bit.Core.Models.Api
|
namespace Bit.Core.Models.Api
|
||||||
{
|
{
|
||||||
public class FieldDataModel
|
public class CipherFieldModel
|
||||||
{
|
{
|
||||||
|
public CipherFieldModel(CipherFieldData data)
|
||||||
|
{
|
||||||
|
Type = data.Type;
|
||||||
|
Name = data.Name;
|
||||||
|
Value = data.Value;
|
||||||
|
}
|
||||||
|
|
||||||
public FieldType Type { get; set; }
|
public FieldType Type { get; set; }
|
||||||
[StringLength(1000)]
|
[StringLength(1000)]
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
88
src/Core/Models/Api/CipherIdentityModel.cs
Normal file
88
src/Core/Models/Api/CipherIdentityModel.cs
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using Bit.Core.Models.Data;
|
||||||
|
using Bit.Core.Utilities;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.Api
|
||||||
|
{
|
||||||
|
public class CipherIdentityModel
|
||||||
|
{
|
||||||
|
public CipherIdentityModel() { }
|
||||||
|
|
||||||
|
public CipherIdentityModel(CipherIdentityData data)
|
||||||
|
{
|
||||||
|
Title = data.Title;
|
||||||
|
FirstName = data.FirstName;
|
||||||
|
MiddleName = data.MiddleName;
|
||||||
|
LastName = data.LastName;
|
||||||
|
Address1 = data.Address1;
|
||||||
|
Address2 = data.Address2;
|
||||||
|
Address3 = data.Address3;
|
||||||
|
City = data.City;
|
||||||
|
State = data.State;
|
||||||
|
PostalCode = data.PostalCode;
|
||||||
|
Country = data.Country;
|
||||||
|
Company = data.Company;
|
||||||
|
Email = data.Email;
|
||||||
|
Phone = data.Phone;
|
||||||
|
SSN = data.SSN;
|
||||||
|
Username = data.Username;
|
||||||
|
PassportNumber = data.PassportNumber;
|
||||||
|
LicenseNumber = data.LicenseNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Title { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string FirstName { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string MiddleName { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string LastName { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Address1 { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Address2 { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Address3 { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string City { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string State { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string PostalCode { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Country { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Company { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Email { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Phone { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string SSN { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Username { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string PassportNumber { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string LicenseNumber { get; set; }
|
||||||
|
}
|
||||||
|
}
|
68
src/Core/Models/Api/CipherLoginModel.cs
Normal file
68
src/Core/Models/Api/CipherLoginModel.cs
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using Bit.Core.Utilities;
|
||||||
|
using Bit.Core.Enums;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Bit.Core.Models.Data;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.Api
|
||||||
|
{
|
||||||
|
public class CipherLoginModel
|
||||||
|
{
|
||||||
|
public CipherLoginModel(CipherLoginData data)
|
||||||
|
{
|
||||||
|
Uris = data.Uris.Select(u => new LoginApiUriModel(u));
|
||||||
|
Username = data.Username;
|
||||||
|
Password = data.Password;
|
||||||
|
Totp = data.Totp;
|
||||||
|
}
|
||||||
|
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(10000)]
|
||||||
|
public string Uri
|
||||||
|
{
|
||||||
|
get => Uris?.FirstOrDefault()?.Uri;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if(Uris == null)
|
||||||
|
{
|
||||||
|
Uris = new List<LoginApiUriModel>();
|
||||||
|
}
|
||||||
|
|
||||||
|
Uris.Append(new LoginApiUriModel(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public IEnumerable<LoginApiUriModel> Uris { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Username { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Password { get; set; }
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(1000)]
|
||||||
|
public string Totp { get; set; }
|
||||||
|
|
||||||
|
public class LoginApiUriModel
|
||||||
|
{
|
||||||
|
public LoginApiUriModel() { }
|
||||||
|
|
||||||
|
public LoginApiUriModel(string uri)
|
||||||
|
{
|
||||||
|
Uri = uri;
|
||||||
|
MatchType = UriMatchType.BaseDomain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoginApiUriModel(CipherLoginData.LoginDataUriModel uri)
|
||||||
|
{
|
||||||
|
Uri = uri.Uri;
|
||||||
|
MatchType = uri.MatchType;
|
||||||
|
}
|
||||||
|
|
||||||
|
[EncryptedString]
|
||||||
|
[StringLength(10000)]
|
||||||
|
public string Uri { get; set; }
|
||||||
|
public UriMatchType MatchType { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
src/Core/Models/Api/CipherSecureNoteModel.cs
Normal file
15
src/Core/Models/Api/CipherSecureNoteModel.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Models.Data;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.Api
|
||||||
|
{
|
||||||
|
public class CipherSecureNoteModel
|
||||||
|
{
|
||||||
|
public SecureNoteType Type { get; set; }
|
||||||
|
|
||||||
|
public CipherSecureNoteModel(CipherSecureNoteData data)
|
||||||
|
{
|
||||||
|
Type = data.Type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,47 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Bit.Core.Models.Table;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace Bit.Core.Models.Api
|
|
||||||
{
|
|
||||||
public class LoginDataModel : CipherDataModel
|
|
||||||
{
|
|
||||||
public LoginDataModel() { }
|
|
||||||
|
|
||||||
public LoginDataModel(CipherRequestModel cipher)
|
|
||||||
{
|
|
||||||
Name = cipher.Name;
|
|
||||||
Notes = cipher.Notes;
|
|
||||||
Fields = cipher.Fields;
|
|
||||||
|
|
||||||
Uri = cipher.Login.Uri;
|
|
||||||
Username = cipher.Login.Username;
|
|
||||||
Password = cipher.Login.Password;
|
|
||||||
Totp = cipher.Login.Totp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public LoginDataModel(Cipher cipher)
|
|
||||||
{
|
|
||||||
if(cipher.Type != Enums.CipherType.Login)
|
|
||||||
{
|
|
||||||
throw new ArgumentException("Cipher is not correct type.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var data = JsonConvert.DeserializeObject<LoginDataModel>(cipher.Data);
|
|
||||||
|
|
||||||
Name = data.Name;
|
|
||||||
Notes = data.Notes;
|
|
||||||
Fields = data.Fields;
|
|
||||||
|
|
||||||
Uri = data.Uri;
|
|
||||||
Username = data.Username;
|
|
||||||
Password = data.Password;
|
|
||||||
Totp = data.Totp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Uri { get; set; }
|
|
||||||
public string Username { get; set; }
|
|
||||||
public string Password { get; set; }
|
|
||||||
public string Totp { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -7,6 +7,7 @@ using Newtonsoft.Json;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Core.Models.Data;
|
using Core.Models.Data;
|
||||||
|
using Bit.Core.Models.Data;
|
||||||
|
|
||||||
namespace Bit.Core.Models.Api
|
namespace Bit.Core.Models.Api
|
||||||
{
|
{
|
||||||
@ -25,13 +26,13 @@ namespace Bit.Core.Models.Api
|
|||||||
[EncryptedString]
|
[EncryptedString]
|
||||||
[StringLength(10000)]
|
[StringLength(10000)]
|
||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
public IEnumerable<FieldDataModel> Fields { get; set; }
|
public IEnumerable<CipherFieldModel> Fields { get; set; }
|
||||||
public Dictionary<string, string> Attachments { get; set; }
|
public Dictionary<string, string> Attachments { get; set; }
|
||||||
|
|
||||||
public LoginType Login { get; set; }
|
public CipherLoginModel Login { get; set; }
|
||||||
public CardType Card { get; set; }
|
public CipherCardModel Card { get; set; }
|
||||||
public IdentityType Identity { get; set; }
|
public CipherIdentityModel Identity { get; set; }
|
||||||
public SecureNoteType SecureNote { get; set; }
|
public CipherSecureNoteModel SecureNote { get; set; }
|
||||||
|
|
||||||
public CipherDetails ToCipherDetails(Guid userId)
|
public CipherDetails ToCipherDetails(Guid userId)
|
||||||
{
|
{
|
||||||
@ -59,19 +60,19 @@ namespace Bit.Core.Models.Api
|
|||||||
switch(existingCipher.Type)
|
switch(existingCipher.Type)
|
||||||
{
|
{
|
||||||
case CipherType.Login:
|
case CipherType.Login:
|
||||||
existingCipher.Data = JsonConvert.SerializeObject(new LoginDataModel(this),
|
existingCipher.Data = JsonConvert.SerializeObject(new CipherLoginData(this),
|
||||||
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
||||||
break;
|
break;
|
||||||
case CipherType.Card:
|
case CipherType.Card:
|
||||||
existingCipher.Data = JsonConvert.SerializeObject(new CardDataModel(this),
|
existingCipher.Data = JsonConvert.SerializeObject(new CipherCardData(this),
|
||||||
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
||||||
break;
|
break;
|
||||||
case CipherType.Identity:
|
case CipherType.Identity:
|
||||||
existingCipher.Data = JsonConvert.SerializeObject(new IdentityDataModel(this),
|
existingCipher.Data = JsonConvert.SerializeObject(new CipherIdentityData(this),
|
||||||
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
||||||
break;
|
break;
|
||||||
case CipherType.SecureNote:
|
case CipherType.SecureNote:
|
||||||
existingCipher.Data = JsonConvert.SerializeObject(new SecureNoteDataModel(this),
|
existingCipher.Data = JsonConvert.SerializeObject(new CipherSecureNoteData(this),
|
||||||
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -121,107 +122,6 @@ namespace Bit.Core.Models.Api
|
|||||||
Edit = true
|
Edit = true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LoginType
|
|
||||||
{
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(10000)]
|
|
||||||
public string Uri { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Username { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Password { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Totp { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CardType
|
|
||||||
{
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string CardholderName { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Brand { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Number { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string ExpMonth { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string ExpYear { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Code { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class IdentityType
|
|
||||||
{
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Title { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string FirstName { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string MiddleName { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string LastName { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Address1 { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Address2 { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Address3 { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string City { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string State { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string PostalCode { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Country { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Company { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Email { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Phone { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string SSN { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string Username { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string PassportNumber { get; set; }
|
|
||||||
[EncryptedString]
|
|
||||||
[StringLength(1000)]
|
|
||||||
public string LicenseNumber { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class SecureNoteType
|
|
||||||
{
|
|
||||||
public Enums.SecureNoteType Type { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CipherWithIdRequestModel : CipherRequestModel
|
public class CipherWithIdRequestModel : CipherRequestModel
|
||||||
|
@ -3,6 +3,8 @@ using Core.Models.Data;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Bit.Core.Models.Table;
|
using Bit.Core.Models.Table;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Bit.Core.Models.Data;
|
||||||
|
|
||||||
namespace Bit.Core.Models.Api
|
namespace Bit.Core.Models.Api
|
||||||
{
|
{
|
||||||
@ -18,34 +20,58 @@ namespace Bit.Core.Models.Api
|
|||||||
|
|
||||||
Id = cipher.Id.ToString();
|
Id = cipher.Id.ToString();
|
||||||
Type = cipher.Type;
|
Type = cipher.Type;
|
||||||
RevisionDate = cipher.RevisionDate;
|
|
||||||
OrganizationId = cipher.OrganizationId?.ToString();
|
|
||||||
Attachments = AttachmentResponseModel.FromCipher(cipher, globalSettings);
|
|
||||||
OrganizationUseTotp = orgUseTotp;
|
|
||||||
|
|
||||||
|
CipherData cipherData;
|
||||||
switch(cipher.Type)
|
switch(cipher.Type)
|
||||||
{
|
{
|
||||||
case Enums.CipherType.Login:
|
case Enums.CipherType.Login:
|
||||||
Data = new LoginDataModel(cipher);
|
var loginData = JsonConvert.DeserializeObject<CipherLoginData>(cipher.Data);
|
||||||
|
cipherData = loginData;
|
||||||
|
Data = loginData;
|
||||||
|
Login = new CipherLoginModel(loginData);
|
||||||
break;
|
break;
|
||||||
case Enums.CipherType.SecureNote:
|
case Enums.CipherType.SecureNote:
|
||||||
Data = new SecureNoteDataModel(cipher);
|
var secureNoteData = JsonConvert.DeserializeObject<CipherSecureNoteData>(cipher.Data);
|
||||||
|
Data = secureNoteData;
|
||||||
|
cipherData = secureNoteData;
|
||||||
|
SecureNote = new CipherSecureNoteModel(secureNoteData);
|
||||||
break;
|
break;
|
||||||
case Enums.CipherType.Card:
|
case Enums.CipherType.Card:
|
||||||
Data = new CardDataModel(cipher);
|
var cardData = JsonConvert.DeserializeObject<CipherCardData>(cipher.Data);
|
||||||
|
Data = cardData;
|
||||||
|
cipherData = cardData;
|
||||||
|
Card = new CipherCardModel(cardData);
|
||||||
break;
|
break;
|
||||||
case Enums.CipherType.Identity:
|
case Enums.CipherType.Identity:
|
||||||
Data = new IdentityDataModel(cipher);
|
var identityData = JsonConvert.DeserializeObject<CipherIdentityData>(cipher.Data);
|
||||||
|
Data = identityData;
|
||||||
|
cipherData = identityData;
|
||||||
|
Identity = new CipherIdentityModel(identityData);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new ArgumentException("Unsupported " + nameof(Type) + ".");
|
throw new ArgumentException("Unsupported " + nameof(Type) + ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Name = cipherData.Name;
|
||||||
|
Notes = cipherData.Notes;
|
||||||
|
Fields = cipherData.Fields.Select(f => new CipherFieldModel(f));
|
||||||
|
RevisionDate = cipher.RevisionDate;
|
||||||
|
OrganizationId = cipher.OrganizationId?.ToString();
|
||||||
|
Attachments = AttachmentResponseModel.FromCipher(cipher, globalSettings);
|
||||||
|
OrganizationUseTotp = orgUseTotp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
public string OrganizationId { get; set; }
|
public string OrganizationId { get; set; }
|
||||||
public Enums.CipherType Type { get; set; }
|
public Enums.CipherType Type { get; set; }
|
||||||
public dynamic Data { get; set; }
|
public dynamic Data { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Notes { get; set; }
|
||||||
|
public CipherLoginModel Login { get; set; }
|
||||||
|
public CipherCardModel Card { get; set; }
|
||||||
|
public CipherIdentityModel Identity { get; set; }
|
||||||
|
public CipherSecureNoteModel SecureNote { get; set; }
|
||||||
|
public IEnumerable<CipherFieldModel> Fields { get; set; }
|
||||||
public IEnumerable<AttachmentResponseModel> Attachments { get; set; }
|
public IEnumerable<AttachmentResponseModel> Attachments { get; set; }
|
||||||
public bool OrganizationUseTotp { get; set; }
|
public bool OrganizationUseTotp { get; set; }
|
||||||
public DateTime RevisionDate { get; set; }
|
public DateTime RevisionDate { get; set; }
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
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(CipherRequestModel cipher)
|
|
||||||
{
|
|
||||||
Name = cipher.Name;
|
|
||||||
Notes = cipher.Notes;
|
|
||||||
Fields = cipher.Fields;
|
|
||||||
|
|
||||||
Type = cipher.SecureNote.Type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SecureNoteDataModel(Cipher cipher)
|
|
||||||
{
|
|
||||||
if(cipher.Type != CipherType.SecureNote)
|
|
||||||
{
|
|
||||||
throw new ArgumentException("Cipher is not correct type.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var data = JsonConvert.DeserializeObject<SecureNoteDataModel>(cipher.Data);
|
|
||||||
|
|
||||||
Name = data.Name;
|
|
||||||
Notes = data.Notes;
|
|
||||||
Fields = data.Fields;
|
|
||||||
|
|
||||||
Type = data.Type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SecureNoteType Type { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
27
src/Core/Models/Data/CipherCardData.cs
Normal file
27
src/Core/Models/Data/CipherCardData.cs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
using Bit.Core.Models.Api;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.Data
|
||||||
|
{
|
||||||
|
public class CipherCardData : CipherData
|
||||||
|
{
|
||||||
|
public CipherCardData() { }
|
||||||
|
|
||||||
|
public CipherCardData(CipherRequestModel cipher)
|
||||||
|
: base(cipher)
|
||||||
|
{
|
||||||
|
CardholderName = cipher.Card.CardholderName;
|
||||||
|
Brand = cipher.Card.Brand;
|
||||||
|
Number = cipher.Card.Number;
|
||||||
|
ExpMonth = cipher.Card.ExpMonth;
|
||||||
|
ExpYear = cipher.Card.ExpYear;
|
||||||
|
Code = cipher.Card.Code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string CardholderName { get; set; }
|
||||||
|
public string Brand { get; set; }
|
||||||
|
public string Number { get; set; }
|
||||||
|
public string ExpMonth { get; set; }
|
||||||
|
public string ExpYear { get; set; }
|
||||||
|
public string Code { get; set; }
|
||||||
|
}
|
||||||
|
}
|
22
src/Core/Models/Data/CipherData.cs
Normal file
22
src/Core/Models/Data/CipherData.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Bit.Core.Models.Api;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.Data
|
||||||
|
{
|
||||||
|
public abstract class CipherData
|
||||||
|
{
|
||||||
|
public CipherData() { }
|
||||||
|
|
||||||
|
public CipherData(CipherRequestModel cipher)
|
||||||
|
{
|
||||||
|
Name = cipher.Name;
|
||||||
|
Notes = cipher.Notes;
|
||||||
|
Fields = cipher.Fields.Select(f => new CipherFieldData(f));
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Notes { get; set; }
|
||||||
|
public IEnumerable<CipherFieldData> Fields { get; set; }
|
||||||
|
}
|
||||||
|
}
|
21
src/Core/Models/Data/CipherFieldData.cs
Normal file
21
src/Core/Models/Data/CipherFieldData.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Models.Api;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.Data
|
||||||
|
{
|
||||||
|
public class CipherFieldData
|
||||||
|
{
|
||||||
|
public CipherFieldData() { }
|
||||||
|
|
||||||
|
public CipherFieldData(CipherFieldModel field)
|
||||||
|
{
|
||||||
|
Type = field.Type;
|
||||||
|
Name = field.Name;
|
||||||
|
Value = field.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FieldType Type { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Value { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,19 +1,14 @@
|
|||||||
using System;
|
using Bit.Core.Models.Api;
|
||||||
using Bit.Core.Models.Table;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace Bit.Core.Models.Api
|
namespace Bit.Core.Models.Data
|
||||||
{
|
{
|
||||||
public class IdentityDataModel : CipherDataModel
|
public class CipherIdentityData : CipherData
|
||||||
{
|
{
|
||||||
public IdentityDataModel() { }
|
public CipherIdentityData() { }
|
||||||
|
|
||||||
public IdentityDataModel(CipherRequestModel cipher)
|
public CipherIdentityData(CipherRequestModel cipher)
|
||||||
|
: base(cipher)
|
||||||
{
|
{
|
||||||
Name = cipher.Name;
|
|
||||||
Notes = cipher.Notes;
|
|
||||||
Fields = cipher.Fields;
|
|
||||||
|
|
||||||
Title = cipher.Identity.Title;
|
Title = cipher.Identity.Title;
|
||||||
FirstName = cipher.Identity.FirstName;
|
FirstName = cipher.Identity.FirstName;
|
||||||
MiddleName = cipher.Identity.MiddleName;
|
MiddleName = cipher.Identity.MiddleName;
|
||||||
@ -34,39 +29,6 @@ namespace Bit.Core.Models.Api
|
|||||||
LicenseNumber = cipher.Identity.LicenseNumber;
|
LicenseNumber = cipher.Identity.LicenseNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IdentityDataModel(Cipher cipher)
|
|
||||||
{
|
|
||||||
if(cipher.Type != Enums.CipherType.Identity)
|
|
||||||
{
|
|
||||||
throw new ArgumentException("Cipher is not correct type.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var data = JsonConvert.DeserializeObject<IdentityDataModel>(cipher.Data);
|
|
||||||
|
|
||||||
Name = data.Name;
|
|
||||||
Notes = data.Notes;
|
|
||||||
Fields = data.Fields;
|
|
||||||
|
|
||||||
Title = data.Title;
|
|
||||||
FirstName = data.FirstName;
|
|
||||||
MiddleName = data.MiddleName;
|
|
||||||
LastName = data.LastName;
|
|
||||||
Address1 = data.Address1;
|
|
||||||
Address2 = data.Address2;
|
|
||||||
Address3 = data.Address3;
|
|
||||||
City = data.City;
|
|
||||||
State = data.State;
|
|
||||||
PostalCode = data.PostalCode;
|
|
||||||
Country = data.Country;
|
|
||||||
Company = data.Company;
|
|
||||||
Email = data.Email;
|
|
||||||
Phone = data.Phone;
|
|
||||||
SSN = data.SSN;
|
|
||||||
Username = data.Username;
|
|
||||||
PassportNumber = data.PassportNumber;
|
|
||||||
LicenseNumber = data.LicenseNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public string FirstName { get; set; }
|
public string FirstName { get; set; }
|
||||||
public string MiddleName { get; set; }
|
public string MiddleName { get; set; }
|
40
src/Core/Models/Data/CipherLoginData.cs
Normal file
40
src/Core/Models/Data/CipherLoginData.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Models.Api;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.Data
|
||||||
|
{
|
||||||
|
public class CipherLoginData : CipherData
|
||||||
|
{
|
||||||
|
public CipherLoginData() { }
|
||||||
|
|
||||||
|
public CipherLoginData(CipherRequestModel cipher)
|
||||||
|
: base(cipher)
|
||||||
|
{
|
||||||
|
Uris = cipher.Login.Uris?.Where(u => u != null).Select(u => new LoginDataUriModel(u));
|
||||||
|
Username = cipher.Login.Username;
|
||||||
|
Password = cipher.Login.Password;
|
||||||
|
Totp = cipher.Login.Totp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<LoginDataUriModel> Uris { get; set; }
|
||||||
|
public string Username { get; set; }
|
||||||
|
public string Password { get; set; }
|
||||||
|
public string Totp { get; set; }
|
||||||
|
|
||||||
|
public class LoginDataUriModel
|
||||||
|
{
|
||||||
|
public LoginDataUriModel() { }
|
||||||
|
|
||||||
|
public LoginDataUriModel(CipherLoginModel.LoginApiUriModel uri)
|
||||||
|
{
|
||||||
|
Uri = uri.Uri;
|
||||||
|
MatchType = uri.MatchType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Uri { get; set; }
|
||||||
|
public UriMatchType MatchType { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
18
src/Core/Models/Data/CipherSecureNoteData.cs
Normal file
18
src/Core/Models/Data/CipherSecureNoteData.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Models.Api;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.Data
|
||||||
|
{
|
||||||
|
public class CipherSecureNoteData : CipherData
|
||||||
|
{
|
||||||
|
public CipherSecureNoteData() { }
|
||||||
|
|
||||||
|
public CipherSecureNoteData(CipherRequestModel cipher)
|
||||||
|
: base(cipher)
|
||||||
|
{
|
||||||
|
Type = cipher.SecureNote.Type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SecureNoteType Type { get; set; }
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user