public CipherData ToCipherData(string userId) { var c = new CipherData { Id = Id, OrganizationId = OrganizationId, FolderId = FolderId, UserId = OrganizationId != null ? userId : null, Edit = Edit, OrganizationUseTotp = OrganizationUseTotp, Favorite = Favorite, RevisionDate = RevisionDate, Type = Type, CollectionIds = CollectionIds.ToList(), DeletedDate = DeletedDate, Reprompt = Reprompt, }; BuildDataModel(this, c, new HashSet <string> { "Name", "Notes" }); switch (c.Type) { case Enums.CipherType.Login: c.Login = Login.ToLoginData(); break; case Enums.CipherType.SecureNote: c.SecureNote = SecureNote.ToSecureNoteData(); break; case Enums.CipherType.Card: c.Card = Card.ToCardData(); break; case Enums.CipherType.Identity: c.Identity = Identity.ToIdentityData(); break; default: break; } c.Fields = Fields?.Select(f => f.ToFieldData()).ToList(); c.Attachments = Attachments?.Select(a => a.ToAttachmentData()).ToList(); c.PasswordHistory = PasswordHistory?.Select(ph => ph.ToPasswordHistoryData()).ToList(); return(c); }
public async Task <CipherView> DecryptAsync() { var model = new CipherView(this); await DecryptObjAsync(model, this, new HashSet <string> { "Name", "Notes" }, OrganizationId); switch (Type) { case Enums.CipherType.Login: model.Login = await Login.DecryptAsync(OrganizationId); break; case Enums.CipherType.SecureNote: model.SecureNote = await SecureNote.DecryptAsync(OrganizationId); break; case Enums.CipherType.Card: model.Card = await Card.DecryptAsync(OrganizationId); break; case Enums.CipherType.Identity: model.Identity = await Identity.DecryptAsync(OrganizationId); break; default: break; } if (Attachments?.Any() ?? false) { model.Attachments = new List <AttachmentView>(); var tasks = new List <Task>(); async Task decryptAndAddAttachmentAsync(Attachment attachment) { var decAttachment = await attachment.DecryptAsync(OrganizationId); model.Attachments.Add(decAttachment); } foreach (var attachment in Attachments) { tasks.Add(decryptAndAddAttachmentAsync(attachment)); } await Task.WhenAll(tasks); } if (Fields?.Any() ?? false) { model.Fields = new List <FieldView>(); var tasks = new List <Task>(); async Task decryptAndAddFieldAsync(Field field) { var decField = await field.DecryptAsync(OrganizationId); model.Fields.Add(decField); } foreach (var field in Fields) { tasks.Add(decryptAndAddFieldAsync(field)); } await Task.WhenAll(tasks); } if (PasswordHistory?.Any() ?? false) { model.PasswordHistory = new List <PasswordHistoryView>(); var tasks = new List <Task>(); async Task decryptAndAddHistoryAsync(PasswordHistory ph) { var decPh = await ph.DecryptAsync(OrganizationId); model.PasswordHistory.Add(decPh); } foreach (var ph in PasswordHistory) { tasks.Add(decryptAndAddHistoryAsync(ph)); } await Task.WhenAll(tasks); } return(model); }