public static void StorePasswordInPendingTable(PasswordData passwordData, int destinationUserId)
        {
            var aesLogic = new AesLogic();

            var destinationUser = Context.Users.First(x => x.Id == destinationUserId);
            var sourceUser      = Context.Users.First(x => x.Login == UserName);
            var password        = Context.Passwords.First(x => x.Id == passwordData.Id);

            var encryptPassword = aesLogic.EncryptPassword(passwordData.Password, RandomData); //Get encrypted password

            var passwordSharesDb = new PendingPasswordSharesDb
            {
                PasswordHash      = encryptPassword,
                PasswordId        = passwordData.Id,
                Password          = password,
                SourceUserId      = sourceUser.Id,
                SourceUser        = sourceUser,
                DestinationUserId = destinationUserId,
                DestinationUser   = destinationUser,
                IsStale           = false,
                SharedPasswordId  = null
            };

            Context.PendingPasswordShares.Add(passwordSharesDb);

            Context.SaveChanges(); //save
        }
        public static void EditPassword(EditPasswordData editPasswordData)
        {
            var aesLogic = new AesLogic();

            //update na password
            var password = Context.Passwords.FirstOrDefault(x => x.Id == editPasswordData.PasswordId);

            if (password == null)
            {
                return;
            }

            if (!string.IsNullOrEmpty(editPasswordData.NewLogin))
            {
                password.Login = editPasswordData.NewLogin;
            }

            if (!string.IsNullOrEmpty(editPasswordData.NewWebAddress))
            {
                password.WebAddress = editPasswordData.NewWebAddress;
            }

            if (!string.IsNullOrEmpty(editPasswordData.NewDescription))
            {
                password.Description = editPasswordData.NewDescription;
            }

            if (!string.IsNullOrEmpty(editPasswordData.NewPassword))
            {
                password.PasswordHash = aesLogic.EncryptPassword(editPasswordData.NewPassword, Password);
            }

            var passwordsIdsFromSharedPasswords = Context.PendingPasswordShares.Where(x => x.PasswordId == editPasswordData.PasswordId)
                                                  .Select(y => y.SharedPasswordId).ToList(); //From Passwords by received from SharedPasswordIds

            foreach (var passwordId in passwordsIdsFromSharedPasswords)
            {
                var passwordDb = Context.Passwords.FirstOrDefault(x => x.Id == passwordId);
                if (passwordDb != null)
                {
                    Context.Passwords.Remove(passwordDb);
                }

                var sharedPasswordDb =
                    Context.PendingPasswordShares.FirstOrDefault(x => x.SharedPasswordId == passwordId);
                if (sharedPasswordDb != null)
                {
                    Context.PendingPasswordShares.Remove(sharedPasswordDb);
                }
            }

            Context.SaveChanges();
        }
        public static void RecryptPasswordForUser(SecureString newUserPassword)
        {
            var aesLogic = new AesLogic();

            var user = Context.Users.First(x => x.Login == UserName);
            var userPasswordsData = Context.Passwords.Where(x => x.IdUser == user.Id).ToList();

            foreach (var userPasswordData in userPasswordsData)
            {
                var websitePassword = ReleasePassword(userPasswordData.PasswordHash);                       //decrypt website password

                userPasswordData.PasswordHash = aesLogic.EncryptPassword(websitePassword, newUserPassword); //update old password hash new one
            }

            Context.SaveChanges();
        }
        public static int StorePassword(PasswordData passwordData)
        {
            var aesLogic = new AesLogic();

            var user            = Context.Users.First(x => x.Login == UserName);
            var encryptPassword = aesLogic.EncryptPassword(passwordData.Password, Password); //Get encrypted password

            var passwordDb = new PasswordDb
            {
                Login        = passwordData.Login,
                PasswordHash = encryptPassword,
                WebAddress   = passwordData.WebAddress,
                Description  = passwordData.Description,
                User         = user,
                IdUser       = user.Id
            };

            Context.Passwords.Add(passwordDb);
            Context.SaveChanges();

            return(passwordDb.Id);
        }