Пример #1
0
        /// <summary>
        ///Событие нажатия на кнопку окна "Вход"
        /// </summary>
        private void BtnLogin_Click(object sender, RoutedEventArgs e)
        {
            //Проверка корректности введеного логина
            if (!User.IsCorrectName(tbxUserName.Text, out string message))
            {
                MessageBox.Show(message);
                tbxUserName.Focus();
            }
            //Проверка введен ли пароль
            else if (string.IsNullOrEmpty(pbxPassword.Password))
            {
                MessageBox.Show("Введите пароль!");
                pbxPassword.Focus();
            }

            else
            {
                //Проверка подключения к БД
                if (!SQLCon.ConnectToDatabase())
                {
                    Close();
                }

                //Получим хэш-пароль, применив алгоритм ГОСТ 34.11-2012
                byte[] password     = Encoding.GetEncoding(1251).GetBytes(pbxPassword.Password);
                GOST   o            = new GOST(512 /*256*/);
                byte[] hash_code    = o.H(password);
                string hashpassword = BitConverter.ToString(hash_code);

                //Получаем таблицу с учетными данными пользователя из БД, где найдутся такой логин и пароль в одной строке
                DataTable dateTable = SQLCon.GetDateTable($"SELECT * FROM tblAccounts WHERE UserName='******' AND Password='******';");
                if (dateTable != null && dateTable.Rows.Count != 0)
                {
                    User.Name     = dateTable.Rows[0]["UserName"] as string;
                    User.Password = dateTable.Rows[0]["Password"] as string;
                    User.IsAdmin  = (bool)dateTable.Rows[0]["IsAdmin"];
                    AccessWindow accessWindow = new AccessWindow();
                    Close();
                    accessWindow.ShowDialog();
                    //MessageBox.Show("Доступ разрешен.");
                }
                else
                {
                    MessageBox.Show("Доступ запрещен. Введен невенрный логин или пароль.");
                }
            }
        }
        //Обработчик события нажатия на кнопку "Зарегистрировать"/"Изменить пароль"
        private void BtnLogin_Click(object sender, RoutedEventArgs e)
        {
            object o;

            //Проверка на заполненость всех полей ввода
            if (!IsChangePassword && !User.IsCorrectName(tbxName.Text, out string message))
            {
                MessageBox.Show(message);
                tbxName.Focus();
            }
            else if (string.IsNullOrEmpty(pbxPassword1.Password))
            {
                MessageBox.Show("Введите пароль!");
                pbxPassword1.Focus();
            }
            else if (string.IsNullOrEmpty(pbxPassword2.Password))
            {
                MessageBox.Show("Повторите пароль!");
                pbxPassword1.Focus();
            }
            //Проверка на совпадение введенных паролей
            else if (pbxPassword1.Password != pbxPassword2.Password)
            {
                MessageBox.Show("Пароли не совпадают!");
                pbxPassword1.Focus();
            }

            //Если пройдены все предварительные проверки, выполнение регистрации
            else if (SQLCon.ExecuteScalar($"SELECT COUNT(*) FROM tblAccounts WHERE UserName='******'", out o))
            {
                //Проверка на наличие в БД пользователя с таким же логином(по sql-запросу выше)
                if (!IsChangePassword && (int)o != 0)
                {
                    MessageBox.Show("Пользователь с таким именем уже существует.");
                }
                else
                {
                    //Получим хэш-пароль, применив алгоритм ГОСТ 34.11-2012
                    byte[] password     = Encoding.GetEncoding(1251).GetBytes(pbxPassword1.Password);
                    GOST   g            = new GOST(512 /*256*/);
                    byte[] hash_code    = g.H(password);
                    string hashpassword = BitConverter.ToString(hash_code);

                    //Запись учет.данных администратора/пользователя в таблицу БД
                    if (!IsChangePassword && (int)o == 0)
                    {
                        if (SQLCon.ExecuteScalar($"INSERT INTO tblAccounts (UserName, Password, IsAdmin) VALUES ('{tbxName.Text}', '{hashpassword}', '{AsAdmin}')"))
                        {
                            MessageBox.Show("Регистрация успешно завершена.");
                            Success = true;
                            Close();
                        }
                    }
                    //Изменение хэш-кода пароля в БД на новый
                    else if (IsChangePassword)
                    {
                        if (hashpassword == User.Password)
                        {
                            MessageBox.Show("Введенный пароль совпадает с текущим. Необходимо ввести новый пароль");
                        }
                        else
                        {
                            SQLCon.ExecuteScalar(string.Format("UPDATE tblAccounts SET Password='******' WHERE [UserName]='{1}'", hashpassword, User.Name));
                            User.Password = hashpassword;
                            MessageBox.Show("Пароль изменен.");
                            Success = true;
                            MainWindow mainWindow = new MainWindow();
                            Close();
                            mainWindow.Show();
                        }
                    }
                }
            }
        }