Ejemplo n.º 1
0
        /*************************************************************************************************/
        private AddPasswordResult VerifyAddPasswordFields(Password password)
        {
            AddPasswordResult result = AddPasswordResult.Success;

            if (password != null)
            {
                if (string.IsNullOrEmpty(password.Passphrase))
                {
                    result = AddPasswordResult.PassphraseError;
                }

                if (string.IsNullOrEmpty(password.Username))
                {
                    result = AddPasswordResult.UsernameError;
                }

                if (string.IsNullOrEmpty(password.Application))
                {
                    result = AddPasswordResult.ApplicationError;
                }

                if (password.Email.Length != 0)
                {
                    if (!password.Email.Contains("@") && !password.Email.Contains("."))
                    {
                        result = AddPasswordResult.EmailError;
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        /*************************************************************************************************/
        private void AddPassword(string application, string username, string email, string description, string website, string passphrase)
        {
            Password          uiPassword = new Password(application, username, email, description, website, passphrase);
            AddPasswordResult result     = _passwordService.AddPassword(uiPassword);

            if (result == AddPasswordResult.Success)
            {
                UpdatePasswordsUI();
            }

            _mainView.DisplayAddPasswordResult(result);
        }
Ejemplo n.º 3
0
        /*************************************************************************************************/
        private void EditPasswordExecute(string application, string username, string email, string description, string website, string passphrase)
        {
            Password modifiedPassword = new Password(_editPassword.UniqueID, application, username, email, description, website, passphrase);

            AddPasswordResult result = _passwordService.ModifyPassword(_editPassword, modifiedPassword);

            if (result == AddPasswordResult.Success)
            {
                _editPassword = null;
            }

            _mainView.DisplayAddEditPasswordResult(result);
        }
Ejemplo n.º 4
0
        /*************************************************************************************************/
        public void DisplayAddEditPasswordResult(AddPasswordResult result)
        {
            switch (result)
            {
            case AddPasswordResult.DuplicatePassword:
                UIHelper.UpdateStatusLabel("Duplicate password.", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.Failed:
                UIHelper.UpdateStatusLabel("Modify password failed.", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.UsernameError:
                UIHelper.UpdateStatusLabel("Issue with username field!", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.ApplicationError:
                UIHelper.UpdateStatusLabel("Issue with application field!", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.PassphraseError:
                UIHelper.UpdateStatusLabel("Issue with passphrase field!", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.EmailError:
                UIHelper.UpdateStatusLabel("Invalid email!", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.Success:
                addButton.Text           = "Add";
                _editMode                = false;
                editCancelButton.Enabled = false;
                editCancelButton.Visible = false;
                applicationTextBox.Text  = "";
                usernameTextBox.Text     = "";
                emailTextBox.Text        = "";
                descriptionTextBox.Text  = "";
                websiteTextBox.Text      = "";
                passphraseTextBox.Text   = "";
                applicationTextBox.Focus();
                UIHelper.UpdateStatusLabel("Password modified.", userStatusLabel, ErrorLevel.Neutral);
                this.Refresh();
                break;
            }
        }
Ejemplo n.º 5
0
        /*************************************************************************************************/
        public AddPasswordResult ModifyPassword(Password originalPassword, Password modifiedPassword)
        {
            AddPasswordResult result = AddPasswordResult.Failed;

            if (originalPassword != null && modifiedPassword != null)
            {
                if (IsLoggedIn())
                {
                    AddPasswordResult verifyResult = VerifyAddPasswordFields(modifiedPassword);

                    if (verifyResult == AddPasswordResult.Success)
                    {
                        List <Password> modifiedPasswordResult = (from Password pass in _passwordList
                                                                  where pass.Application == modifiedPassword.Application
                                                                  select pass).ToList <Password>();

                        if ((modifiedPasswordResult.Count <= 0) ||                          // verify that another password doesn't have the same application name
                            (modifiedPassword.Application == originalPassword.Application)) // if the application name of the original and modified match, continue as this is not actually a duplicate
                        {
                            Password modifiedEncryptedPassword = ConvertPlaintextPasswordToEncryptedPassword(modifiedPassword);

                            int index = _passwordList.FindIndex(x => (x.Application == originalPassword.Application) && (x.Username == originalPassword.Username) && (x.Description == originalPassword.Description) && (x.Website == originalPassword.Website));

                            if (index != -1)
                            {
                                _passwordList[index] = modifiedEncryptedPassword;
                                _dbcontext.ModifyPassword(ConvertToEncryptedDatabasePassword(originalPassword), ConvertToEncryptedDatabasePassword(modifiedEncryptedPassword));
                                result = AddPasswordResult.Success;
                            }
                        }
                        else
                        {
                            result = AddPasswordResult.DuplicatePassword;
                        }
                    }
                    else
                    {
                        result = verifyResult;
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 6
0
        public void DeleteUserWithPasswords()
        {
            IDatabase        db = DatabaseFactory.GetDatabase(Database.InMemory);
            IPasswordService passwordService = new PasswordService(db, new MasterPassword(), new RijndaelManagedEncryption());

            User             user;
            CreateUserResult createResult;
            LoginResult      loginResult;
            DeleteUserResult deleteResult;

            // Mock a user model that would be coming from the UI
            user = new User("testAccount", "testPassword1@", "testFirstName", "testLastName", "222-111-1111", "*****@*****.**");

            createResult = passwordService.CreateNewUser(user);
            Assert.AreEqual(CreateUserResult.Successful, createResult);
            Assert.AreEqual(1, ((InMemoryDatabase)db).LocalUserDbAccess.Count);

            loginResult = passwordService.Login("testAccount", "testPassword1@");
            Assert.AreEqual(LoginResult.Successful, loginResult);

            // Mock a password model that would be coming from the UI
            Password[] passwords =
            {
                new Password("FakeStore0", "NewUsername", "*****@*****.**", "This is my FakeStore account.", "www.FakeStore.com", "123456"),
                new Password("FakeStore1", "NewUsername", "*****@*****.**", "This is my FakeStore account.", "www.FakeStore.com", "123456"),
                new Password("FakeStore2", "NewUsername", "*****@*****.**", "This is my FakeStore account.", "www.FakeStore.com", "123456"),
                new Password("FakeStore3", "NewUsername", "*****@*****.**", "This is my FakeStore account.", "www.FakeStore.com", "123456"),
            };

            Int32 addedPasswordsCount = 1;

            foreach (var password in passwords)
            {
                AddPasswordResult result = passwordService.AddPassword(password);
                Assert.AreEqual(AddPasswordResult.Success, result);
                Assert.AreEqual(addedPasswordsCount, ((InMemoryDatabase)db).LocalPasswordDbAccess.Count);
                addedPasswordsCount++;
            }

            deleteResult = passwordService.DeleteUser(user);
            Assert.AreEqual(DeleteUserResult.Success, deleteResult);
            Assert.AreEqual(0, ((InMemoryDatabase)db).LocalPasswordDbAccess.Count);
            Assert.AreEqual(0, ((InMemoryDatabase)db).LocalUserDbAccess.Count);
        }
Ejemplo n.º 7
0
        /*************************************************************************************************/
        public AddPasswordResult AddPassword(Password password)
        {
            AddPasswordResult addResult = AddPasswordResult.Failed;

            if (password != null)
            {
                if (IsLoggedIn())
                {
                    AddPasswordResult verifyResult = VerifyAddPasswordFields(password);

                    if (verifyResult == AddPasswordResult.Success)
                    {
                        List <Password> queryResult = (from Password pass in _passwordList
                                                       where pass.Application == password.Application
                                                       select pass).ToList <Password>();

                        if (queryResult.Count <= 0)                                                           // Verify that new password is not a duplicate of an existing one
                        {
                            Password encryptPassword = ConvertPlaintextPasswordToEncryptedPassword(password); // Need to first encrypt the password
                            _dbcontext.AddPassword(ConvertToEncryptedDatabasePassword(encryptPassword));      // Add the encrypted password to the database

                            // Update the passwordservice list.
                            // This solves issue when deleting a newly added password where the unique ID hasn't been updated in the service.
                            // since the database autoincrements the unique ID.
                            UpdatePasswordListFromDB();

                            addResult = AddPasswordResult.Success;
                        }
                        else
                        {
                            addResult = AddPasswordResult.DuplicatePassword;
                        }
                    }
                    else
                    {
                        addResult = verifyResult;
                    }
                }
            }

            return(addResult);
        }
Ejemplo n.º 8
0
        /*************************************************************************************************/
        public void DisplayAddPasswordResult(AddPasswordResult result)
        {
            switch (result)
            {
            case AddPasswordResult.Failed:
                UIHelper.UpdateStatusLabel("Add password failed.", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.DuplicatePassword:
                UIHelper.UpdateStatusLabel("Duplicate password.", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.UsernameError:
                UIHelper.UpdateStatusLabel("Issue with username field!", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.ApplicationError:
                UIHelper.UpdateStatusLabel("Issue with application field!", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.PassphraseError:
                UIHelper.UpdateStatusLabel("Issue with passphrase field!", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.EmailError:
                UIHelper.UpdateStatusLabel("Invalid email!", userStatusLabel, ErrorLevel.Neutral);
                break;

            case AddPasswordResult.Success:
                UIHelper.UpdateStatusLabel("Success.", userStatusLabel, ErrorLevel.Neutral);
                applicationTextBox.Text = "";
                descriptionTextBox.Text = "";
                websiteTextBox.Text     = "";
                passphraseTextBox.Text  = "";
                usernameTextBox.Text    = "";
                emailTextBox.Text       = "";
                applicationTextBox.Focus();
                break;
            }
        }
Ejemplo n.º 9
0
        public void DeleteUserWithMultiplePasswords()
        {
            IDatabase        db = DatabaseFactory.GetDatabase(Database.InMemory);
            IPasswordService passwordService = new PasswordService(db, new MasterPassword(), new RijndaelManagedEncryption());

            CreateUserResult createResult;
            LoginResult      loginResult;
            DeleteUserResult deleteResult;
            LogOutResult     logOutResult;

            // Mock a user model that would be coming from the UI
            User[] users =
            {
                new User("testAccount0", "testPassword1@1", "testFirstName", "testLastName", "222-111-1111", "*****@*****.**"),
                new User("testAccount1", "testPassword1@2", "testFirstName", "testLastName", "222-111-1111", "*****@*****.**"),
                new User("testAccount2", "testPassword1@3", "testFirstName", "testLastName", "222-111-1111", "*****@*****.**"),
                new User("testAccount3", "testPassword1@4", "testFirstName", "testLastName", "222-111-1111", "*****@*****.**"),
                new User("testAccount4", "testPassword1@5", "testFirstName", "testLastName", "222-111-1111", "*****@*****.**"),
            };

            // Mock a password model that would be coming from the UI
            Password[] passwords =
            {
                new Password("FakeStore0", "NewUsername", "*****@*****.**", "This is my FakeStore account.", "www.FakeStore.com", "123456"),
                new Password("FakeStore1", "NewUsername", "*****@*****.**", "This is my FakeStore account.", "www.FakeStore.com", "123456"),
                new Password("FakeStore2", "NewUsername", "*****@*****.**", "This is my FakeStore account.", "www.FakeStore.com", "123456"),
                new Password("FakeStore3", "NewUsername", "*****@*****.**", "This is my FakeStore account.", "www.FakeStore.com", "123456"),
            };

            // Add each user to the database, log in, add each password to each user, logout
            Int32 addedUsersCount     = 1;
            Int32 addedPasswordsCount = 1;

            foreach (var user in users)
            {
                createResult = passwordService.CreateNewUser(user);
                Assert.AreEqual(CreateUserResult.Successful, createResult);
                Assert.AreEqual(addedUsersCount, ((InMemoryDatabase)db).LocalUserDbAccess.Count);
                addedUsersCount++;

                loginResult = passwordService.Login(user.Username, user.PlainTextPassword);
                Assert.AreEqual(LoginResult.Successful, loginResult);

                foreach (var password in passwords)
                {
                    AddPasswordResult result = passwordService.AddPassword(password);
                    Assert.AreEqual(AddPasswordResult.Success, result);
                    Assert.AreEqual(addedPasswordsCount, ((InMemoryDatabase)db).LocalPasswordDbAccess.Count);
                    addedPasswordsCount++;
                }

                logOutResult = passwordService.Logout();
                Assert.AreEqual(LogOutResult.Success, logOutResult);
            }

            // Login to the account to delete
            loginResult = passwordService.Login("testAccount0", "testPassword1@1");
            Assert.AreEqual(LoginResult.Successful, loginResult);

            // Delete the account
            string currentUserGUID = passwordService.GetCurrentUser().GUID;

            deleteResult = passwordService.DeleteUser(passwordService.GetCurrentUser());
            Assert.AreEqual(DeleteUserResult.Success, deleteResult);
            Assert.AreEqual(((passwords.Length * users.Length) - passwords.Length), ((InMemoryDatabase)db).LocalPasswordDbAccess.Count);
            Assert.AreEqual((users.Length - 1), ((InMemoryDatabase)db).LocalUserDbAccess.Count);

            // Verify that the deleted account's passwords are deleted from the password database table
            foreach (var password in ((InMemoryDatabase)db).LocalPasswordDbAccess)
            {
                if (password.UserGUID == currentUserGUID)
                {
                    Assert.Fail();
                }
            }
        }