Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }