Esempio n. 1
0
 void ChangePassword()
 {
     logger.Info("Отправляем новый пароль на сервер...");
     if (Session.IsSaasConnection)
     {
         ISaaSService svc = Session.GetSaaSService();
         if (!svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text))
         {
             logger.Error("Ошибка установки пароля!");
         }
         else
         {
             logger.Info("Пароль изменен. Ok");
         }
     }
     else
     {
         string sql;
         try {
             QSMain.CheckConnectionAlive();
             sql = "SET PASSWORD FOR @login = PASSWORD(@password)";
             MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
             cmd.Parameters.AddWithValue("@login", entryLogin.Text);
             cmd.Parameters.AddWithValue("@password", entryPassword.Text);
             cmd.ExecuteNonQuery();
             cmd.CommandText = "SET PASSWORD FOR @login @'localhost' = PASSWORD(@password)";
             cmd.ExecuteNonQuery();
             logger.Info("Пароль изменен. Ok");
         } catch (Exception ex) {
             logger.Error(ex, "Ошибка установки пароля!");
             QSMain.ErrorMessage(this, ex);
         }
     }
 }
Esempio n. 2
0
        void ChangePassword()
        {
            logger.Info("Отправляем новый пароль на сервер...");
            if (Session.IsSaasConnection)
            {
                ISaaSService svc = Session.GetSaaSService();
                if (!svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text))
                {
                    logger.Error("Ошибка установки пароля!");
                }
                else
                {
                    logger.Info("Пароль изменен. Ok");
                }
            }
            else
            {
                string sql;
                try {
                    QSMain.CheckConnectionAlive();
                    sql = "SELECT version();";
                    MySqlCommand cmd     = new MySqlCommand(sql, QSMain.connectionDB);
                    var          version = (string)cmd.ExecuteScalar();
                    logger.Debug("Server version: " + version);
                    if (!version.EndsWith("-MariaDB") && Version.Parse(version) >= new Version(8, 0, 13))
                    {
                        cmd.CommandText = "ALTER USER @login IDENTIFIED BY @password;";
                        cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                        cmd.Parameters.AddWithValue("@password", entryPassword.Text);
                        cmd.ExecuteNonQuery();
                    }
                    else
                    {
                        cmd.CommandText = "SET PASSWORD FOR @login = PASSWORD(@password)";
                        cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                        cmd.Parameters.AddWithValue("@password", entryPassword.Text);
                        cmd.ExecuteNonQuery();
                        cmd.CommandText = "SET PASSWORD FOR @login @'localhost' = PASSWORD(@password)";
                        cmd.ExecuteNonQuery();
                    }

                    logger.Info("Пароль изменен. Ok");
                } catch (Exception ex) {
                    logger.Error(ex, "Ошибка установки пароля!");
                    QSMain.ErrorMessage(this, ex);
                }
            }
        }
Esempio n. 3
0
        protected void OnButtonOkClicked(object sender, EventArgs e)
        {
            string       sql;
            ISaaSService svc = null;

            if (entryLogin.Text == "root")
            {
                string        Message = "Операции с пользователем root запрещены.";
                MessageDialog md      = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                          MessageType.Warning,
                                                          ButtonsType.Ok,
                                                          Message);
                md.Run();
                md.Destroy();
                return;
            }

            if (Session.IsSaasConnection)
            {
                int dlgRes;
                svc = Session.GetSaaSService();
                if (NewUser)
                {
                    //Проверка существует ли логин
                    sql = "SELECT COUNT(*) FROM users WHERE login = @login";
                    QSMain.CheckConnectionAlive();
                    MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
                    cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                    if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
                    {
                        string Message = "Пользователь с логином " + entryLogin.Text + " уже существует в базе. " +
                                         "Создание второго пользователя с таким же логином невозможно.";
                        MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                             MessageType.Warning,
                                                             ButtonsType.Ok,
                                                             Message);
                        md.Run();
                        md.Destroy();
                        return;
                    }
                    //Регистрируем пользователя в SaaS
                    Result result = svc.registerUserV3(entryLogin.Text, entryPassword.Text, Session.SessionId, entryName.Text, entryEmail.Text);
                    if (!result.Success)
                    {
                        if (result.Error == ErrorType.UserExists)
                        {
                            MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                                 MessageType.Warning,
                                                                 ButtonsType.YesNo,
                                                                 "Пользователь с таким логином уже существует. Предоставить ему доступ к базе?\n" +
                                                                 "ВНИМАНИЕ: Если вы указали новый пароль для пользователя, то он применен не будет.");
                            dlgRes = md.Run();
                            md.Destroy();
                            if ((ResponseType)dlgRes == ResponseType.No)
                            {
                                return;
                            }
                        }
                        else
                        {
                            MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                                 MessageType.Warning,
                                                                 ButtonsType.Close,
                                                                 result.Description);
                            md.Run();
                            md.Destroy();
                            return;
                        }
                    }
                    //Создаем запись в Users.
                    sql = "INSERT INTO users (name, login, deactivated, email, " + QSMain.AdminFieldName + ", description" + QSMain.GetPermissionFieldsForSelect() + GetExtraFieldsForSelect() + ") " +
                          "VALUES (@name, @login, @deactivated, @email, @admin, @description" + QSMain.GetPermissionFieldsForInsert() + GetExtraFieldsForInsert() + ")";
                }
                else
                {
                    if (entryPassword.Text != passFill)
                    {
                        MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                             MessageType.Warning,
                                                             ButtonsType.YesNo,
                                                             "Изменение пароля произойдет во всех базах, к которым пользователь имеет доступ.\nПродолжить?");
                        dlgRes = md.Run();
                        md.Destroy();
                        if ((ResponseType)dlgRes == ResponseType.Yes && !svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text))
                        {
                            MessageDialog md1 = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                                  MessageType.Warning,
                                                                  ButtonsType.Close,
                                                                  "Ошибка изменения пароля пользователя.");
                            md1.Run();
                            md1.Destroy();
                            return;
                        }
                        else if ((ResponseType)dlgRes != ResponseType.Yes)
                        {
                            return;
                        }
                    }
                    sql = "UPDATE users SET name = @name, deactivated = @deactivated, email = @email, " + QSMain.AdminFieldName + " = @admin," +
                          "description = @description " + QSMain.GetPermissionFieldsForUpdate() + GetExtraFieldsForUpdate() + " WHERE id = @id";
                }
            }
            else
            {
                if (NewUser)
                {
                    if (!CreateLogin())
                    {
                        return;
                    }
                    sql = "INSERT INTO users (name, login, deactivated, email, " + QSMain.AdminFieldName + ", description" + QSMain.GetPermissionFieldsForSelect() + GetExtraFieldsForSelect() + ") " +
                          "VALUES (@name, @login, @deactivated, @email, @admin, @description" + QSMain.GetPermissionFieldsForInsert() + GetExtraFieldsForInsert() + ")";
                }
                else
                {
                    if (OriginLogin != entryLogin.Text && !RenameLogin())
                    {
                        return;
                    }
                    if (entryPassword.Text != passFill)
                    {
                        ChangePassword();
                    }
                    sql = "UPDATE users SET name = @name, deactivated = @deactivated, email = @email, login = @login, " + QSMain.AdminFieldName + " = @admin," +
                          "description = @description " + QSMain.GetPermissionFieldsForUpdate() + GetExtraFieldsForUpdate() + " WHERE id = @id";
                }
                UpdatePrivileges();
                logger.Info("Запись пользователя...");
            }
            try {
                QSMain.CheckConnectionAlive();
                MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);

                cmd.Parameters.AddWithValue("@id", entryID.Text);
                cmd.Parameters.AddWithValue("@name", entryName.Text);
                cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                cmd.Parameters.AddWithValue("@admin", checkAdmin.Active);
                cmd.Parameters.AddWithValue("@deactivated", checkDeactivated.Active);
                cmd.Parameters.AddWithValue("@email", entryEmail.Text);
                foreach (KeyValuePair <string, CheckButton> Pair in RightCheckButtons)
                {
                    cmd.Parameters.AddWithValue("@" + QSMain.ProjectPermission[Pair.Key].DataBaseName,
                                                Pair.Value.Active);
                }

                if (permissionViews != null)
                {
                    foreach (var view in permissionViews)
                    {
                        cmd.Parameters.AddWithValue(view.DBFieldName, view.DBFieldValue);
                    }
                }

                if (textviewComments.Buffer.Text == "")
                {
                    cmd.Parameters.AddWithValue("@description", DBNull.Value);
                }
                else
                {
                    cmd.Parameters.AddWithValue("@description", textviewComments.Buffer.Text);
                }

                cmd.ExecuteNonQuery();
                if (QSMain.User.Login == entryLogin.Text)
                {
                    QSMain.User.LoadUserInfo();
                }
                logger.Info("Ok");
                Respond(ResponseType.Ok);
            } catch (Exception ex) {
                logger.Error(ex, "Ошибка записи пользователя!");
                QSMain.ErrorMessage(this, ex);
            }

            //Предоставляем пользователю доступ к базе
            if (Session.IsSaasConnection)
            {
                if (!svc.changeBaseAccessFromProgram(Session.SessionId, entryLogin.Text, Session.SaasBaseName, !checkDeactivated.Active, checkAdmin.Active))
                {
                    MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                         MessageType.Warning,
                                                         ButtonsType.Close,
                                                         "Ошибка предоставления доступа к базе данных.");
                    md.Run();
                    md.Destroy();
                    return;
                }
            }
        }