//Обработчик события нажатия на кнопку "Удалить учетную запись"
        private void BtnRemove_Click(object sender, RoutedEventArgs e)
        {
            object o;

            //Проверка не выполнен ли выбор пользователь для удаления
            if (dgUsersAccounts.SelectedIndex == -1)
            {
                MessageBox.Show("Выберите пользователя для удаления");
            }
            //Если пользователь выбран
            else if (SQLCon.ExecuteScalar("SELECT COUNT(*) FROM tblAccounts WHERE IsAdmin='True'", out o))
            {
                //Если выбран-пользователь администратор для удаления и он один
                if (lstaccounts[dgUsersAccounts.SelectedIndex].Type == "Администратор" && (int)o == 1)
                {
                    MessageBox.Show("Вы не можете удалить эту учетную запись, так как это единственная учетная запись администратора.");
                }
                //Если выбран пользователь или существует несколько администраторов
                else if (MessageBox.Show("Вы действительно хотите удалить эту учетную запись?", "Удаление", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                {
                    //Удаление записи о пользователе в БД
                    string userName = lstaccounts[dgUsersAccounts.SelectedIndex].Name;
                    SQLCon.ExecuteScalar($"DELETE FROM tblAccounts WHERE UserName='******'");
                    //Удаление из списка lstaccounts пользователя
                    lstaccounts.RemoveAt(dgUsersAccounts.SelectedIndex);
                    dgUsersAccounts.Items.Refresh();
                }
            }
        }
Пример #2
0
        public MainWindow()
        {
            InitializeComponent();
            if (!SQLCon.ConnectToDatabase())
            {
                Close();
            }

            //Если в таблице аккаунтов нет записей (т.е. самый первый вход), то переход на окно регистрации администратора
            //"SELECT COUNT(*) FROM tblAccounts"-запрос на количество всех записей в таблице
            if (SQLCon.ExecuteScalar("SELECT COUNT(*) FROM tblAccounts", out object o) && (int)o == 0)
            {
                Registration startWindow = new Registration(true, false);
                startWindow.ShowDialog();
                if (!startWindow.Success)
                {
                    Close();
                }
            }
        }
        //Обработчик события нажатия на кнопку "Зарегистрировать"/"Изменить пароль"
        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();
                        }
                    }
                }
            }
        }