Ejemplo n.º 1
0
        private void DoLogin(object parameter)
        {
            UIServices.SetBusyState();
            _logger.Info("reset error msg");
            ErrorMsg = string.Empty;

            _logger.Info("starting with login process");

            if (!string.IsNullOrEmpty(_login) && _login.Length >= 6)
            {
                var values      = (object[])parameter;
                var passwordBox = values[0] as PasswordBox;

                if (passwordBox != null)
                {
                    _logger.Info("password parameter is not null");

                    string password = passwordBox.Password;

                    if (!string.IsNullOrEmpty(password))
                    {
                        _logger.Info("password is not null or empty");

                        _logger.Info("check for exsisting login");
                        var database = Container.Resolve <IDataAccessLayer>();
                        List <MasterLogin> logins = database.GetAll <MasterLogin>();

                        if (logins.Count == 1)
                        {
                            var login = database.GetSingleByName <MasterLogin>(_login);

                            if (login != null)
                            {
                                _logger.Info("login do exsits");
                                byte[] hashedPassword = _cryptographyService.HashPassword(password, login.Salt);

                                _logger.Info("compare passwords...");
                                if (_cryptographyService.Compare(hashedPassword, login.Password))
                                {
                                    _logger.Info("...login verified.");

                                    OpenMainView(values);
                                }
                                else
                                {
                                    _logger.Error("...login failed.");
                                    ErrorMsg = "Login failed!";
                                }
                            }
                            else
                            {
                                _logger.Error("master login already exists");
                                ErrorMsg = "Master login already exists!";
                            }
                        }
                        else if (logins.Count == 0)
                        {
                            _logger.Info("login do not exsits");

                            byte[] salt           = _cryptographyService.GenerateSalt();
                            byte[] hashedPassword = _cryptographyService.HashPassword(password, salt);

                            _cryptographyService.AssignNewKeys();

                            var masterLogin = new MasterLogin
                            {
                                Name       = _login,
                                Password   = hashedPassword,
                                Salt       = salt,
                                PrivateKey = _cryptographyService.GetPrivateKeyAsXml(),
                                PublicKey  = _cryptographyService.GetPublicKey(),
                            };

                            database.Insert(masterLogin);

                            OpenMainView(values);
                        }
                    }
                    else
                    {
                        _logger.Error("password is null or empty!");
                        ErrorMsg = "Password is empty!";
                    }
                }
            }
            else
            {
                _logger.Error("login is null, empty or have less then 6 characters!");
                ErrorMsg = "Login have less then 6 characters!";
            }
        }
        public void CompareTest()
        {
            var array1 = new byte[] { 0x1, 0x2, 0x3, 0x4, 0x5 };
            var array2 = new byte[] { 0x1, 0x2, 0x3, 0x4, 0x5 };

            bool result = _cryptographyService.Compare(array1, array2);

            Assert.IsTrue(result);

            var array3 = new byte[] { 0x1, 0x2, 0x3, 0x4, 0x5 };
            var array4 = new byte[] { 0x1, 0x2, 0x3, 0x4, 0x4 };

            bool result2 = _cryptographyService.Compare(array3, array4);

            Assert.IsFalse(result2);

            var array5 = new byte[] { 0x1, 0x2, 0x3, 0x4, 0x5 };
            var array6 = new byte[] { 0x0, 0x2, 0x3, 0x4, 0x4 };

            bool result3 = _cryptographyService.Compare(array5, array6);

            Assert.IsFalse(result3);
        }
        private void Confirm(object obj)
        {
            UIServices.SetBusyState();
            _logger.Info("password change confirmed");

            _logger.Info("parsing parameters");
            var parameters      = (object[])obj;
            var oldPasswordBox  = parameters[0] as PasswordBox;
            var newPasswordBox  = parameters[1] as PasswordBox;
            var newPassword2Box = parameters[2] as PasswordBox;

            if (oldPasswordBox != null && newPasswordBox != null && newPassword2Box != null)
            {
                _logger.Info("parameters not null");

                _logger.Info("get login data");
                MasterLogin login = _database.GetAll <MasterLogin>().First();

                _logger.Info("hash entered password");
                byte[] hashedPassword = _cryptographyService.HashPassword(oldPasswordBox.Password, login.Salt);

                _logger.Info("compare entered and stored passwords");
                if (_cryptographyService.Compare(hashedPassword, login.Password))
                {
                    _logger.Info("password are correct");

                    string newPassword1 = newPasswordBox.Password;
                    string newPassword2 = newPassword2Box.Password;

                    _logger.Info("compare new passwords");
                    if (newPassword1 == newPassword2)
                    {
                        _logger.Info("hash new password");
                        byte[] newSalt           = _cryptographyService.GenerateSalt();
                        byte[] newHashedPassword = _cryptographyService.HashPassword(newPassword1, newSalt);

                        login.Salt     = newSalt;
                        login.Password = newHashedPassword;

                        _logger.Info("save changes");
                        _database.Update(login);
                        _logger.Info("changes are saved");

                        InformUserAndClose(parameters);
                    }
                    else
                    {
                        _logger.Error("new passwords do not match");
                        ErrorMsg = "Passwords do not match!";
                    }
                }
                else
                {
                    _logger.Error("current password is wrong!");
                    ErrorMsg = "Old Password is wrong!";
                }
            }
            else
            {
                _logger.Error("parameters are null!");
                ErrorMsg = "Something went wrong, pleas try again.";
            }
        }