ErrorMessage() public static method

public static ErrorMessage ( Exception ex, string userMessage = "" ) : void
ex System.Exception
userMessage string
return void
Example #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);
         }
     }
 }
Example #2
0
 protected void OnButtonOkClicked(object sender, EventArgs e)
 {
     NewPassword = entryPassword.Text;
     if (WorkMode == Mode.Manual)
     {
         return;
     }
     if (Session.IsSaasConnection)
     {
         ISaaSService svc = Session.GetSaaSService();
         if (svc == null || !svc.changeUserPasswordBySessionId(Session.SessionId, NewPassword))
         {
             logger.Error("Ошибка установки пароля!");
             return;
         }
         logger.Info("Пароль изменен.");
     }
     else
     {
         logger.Info("Отправляем новый пароль на сервер...");
         string sql;
         sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')";
         try {
             QSMain.CheckConnectionAlive();
             DbCommand cmd = QSMain.ConnectionDB.CreateCommand();
             cmd.CommandText = sql;
             cmd.ExecuteNonQuery();
             logger.Info("Пароль изменен. Ok");
         } catch (Exception ex) {
             logger.Error(ex, "Ошибка установки пароля!");
             QSMain.ErrorMessage(this, ex);
         }
     }
 }
Example #3
0
        protected void OnButtonOkClicked(object sender, EventArgs e)
        {
            NewPassword = entryPassword.Text;
            if (WorkMode == Mode.Manual)
            {
                return;
            }
            if (Session.IsSaasConnection)
            {
                ISaaSService svc = Session.GetSaaSService();
                if (svc == null || !svc.changeUserPasswordBySessionId(Session.SessionId, NewPassword))
                {
                    logger.Error("Ошибка установки пароля!");
                    return;
                }
                logger.Info("Пароль изменен.");
            }
            else
            {
                logger.Info("Отправляем новый пароль на сервер...");
                string sql;

                try {
                    var reg = new Regex("password=(.+?)(;|$)");
                    QSMain.CheckConnectionAlive();
                    DbCommand cmd = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = "SELECT version();";
                    var version = (string)cmd.ExecuteScalar();
                    logger.Debug("Server version: " + version);
                    if (version.EndsWith("-MariaDB"))
                    {
                        sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')";
                    }
                    else if (Version.Parse(version) >= new Version(8, 0, 13))
                    {
                        var    match       = reg.Match(QSMain.ConnectionString);
                        string oldPassword = match.Success ? match.Groups[1].Value : null;
                        sql = $"SET PASSWORD='******' REPLACE '{oldPassword}';";
                    }
                    else
                    {
                        sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')";
                    }

                    cmd.CommandText = sql;
                    cmd.ExecuteNonQuery();
                    logger.Info("Пароль изменен. Ok");

                    //Заменяем пароль с текущей строке одключения, для того чтобы при переподключении не было ошибок
                    //и чтобы при смене пароля еще раз был текущий пароль.
                    QSMain.ConnectionString = reg.Replace(QSMain.ConnectionString, $"password={entryPassword.Text};");
                } catch (Exception ex) {
                    logger.Error(ex, "Ошибка установки пароля!");
                    QSMain.ErrorMessage(this, ex);
                }
            }
        }
Example #4
0
 public static void SubscribeToUnhadledExceptions()
 {
     AppDomain.CurrentDomain.UnhandledException += delegate(object sender, UnhandledExceptionEventArgs e) {
         logger.Fatal((Exception)e.ExceptionObject, "Поймано необработаное исключение в Application Domain.");
         QSMain.ErrorMessage((Exception)e.ExceptionObject);
     };
     GLib.ExceptionManager.UnhandledException += delegate(GLib.UnhandledExceptionArgs a) {
         logger.Fatal((Exception)a.ExceptionObject, "Поймано необработаное исключение в GTK.");
         QSMain.ErrorMessage((Exception)a.ExceptionObject);
     };
 }
Example #5
0
        protected void OnButtonSaveOrdinalClicked(object sender, EventArgs e)
        {
            int[] Numbers = new int[RefListStore.IterNChildren()];
            int   n       = 0;

            foreach (object[] row in RefListStore)
            {
                Numbers[n] = (int)row[OrdinalColumn];
                n++;
            }
            Array.Sort(Numbers);

            string        sql = String.Format("UPDATE {0} SET {1} = @ord WHERE id = @id", TableRef, _OrdinalField);
            DbCommand     cmd;
            DbTransaction trans = QSMain.ConnectionDB.BeginTransaction();

            QSMain.CheckConnectionAlive();
            try
            {
                n   = 0;
                cmd = QSMain.ConnectionDB.CreateCommand();
                DbParameter paramId = cmd.CreateParameter();
                paramId.ParameterName = "@id";
                cmd.Parameters.Add(paramId);
                DbParameter paramOrd = cmd.CreateParameter();
                paramOrd.ParameterName = "@ord";
                cmd.Parameters.Add(paramOrd);
                cmd.CommandText = sql;
                cmd.Prepare();

                foreach (object[] row in RefListStore)
                {
                    if (Numbers[n] != (int)row[OrdinalColumn])
                    {
                        paramId.Value  = row[0];
                        paramOrd.Value = Numbers[n];
                        cmd.ExecuteNonQuery();
                    }
                    n++;
                }
                trans.Commit();
                UpdateList();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                logger.Error(ex, "Ошибка записи последовательности в {0}!", nameRef);
                QSMain.ErrorMessage(this, ex);
            }
        }
Example #6
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);
                }
            }
        }
Example #7
0
        bool RenameLogin()
        {
            logger.Info("Переименование учетной записи на сервере...");
            try {
                QSMain.CheckConnectionAlive();
                //Проверка существует ли логин
                string       sql = "SELECT COUNT(*) from mysql.user WHERE USER = @login";
                MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                try {
                    if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
                    {
                        string Message = "Пользователь с логином " + entryLogin.Text + " уже существует на сервере. " +
                                         "Переименование невозможно.";
                        MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                             MessageType.Error,
                                                             ButtonsType.Ok,
                                                             Message);
                        md.Destroy();
                        return(false);
                    }
                } catch (MySqlException ex) {
                    if (ex.Number == 1045)
                    {
                        logger.Warn(ex, "Нет доступа к таблице пользователей, пробую создать пользователя в слепую.");
                    }
                    else
                    {
                        logger.Error(ex, "Ошибка чтения таблицы пользователей!");
                        QSMain.ErrorMessage(this, ex);
                        return(false);
                    }
                }

                //Переименование пользователя.
                sql = "RENAME USER @old_login TO @new_login, @old_login @'localhost' TO @new_login @'localhost'";
                cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@old_login", OriginLogin);
                cmd.Parameters.AddWithValue("@new_login", entryLogin.Text);
                cmd.ExecuteNonQuery();
                logger.Info("Ok");
                return(true);
            } catch (Exception ex) {
                logger.Error(ex, "Ошибка переименования пользователя!");
                QSMain.ErrorMessage(this, ex);
                return(false);
            }
        }
Example #8
0
        protected void UpdateList()
        {
            logger.Info("Получаем таблицу справочника " + nameRef + "...");
            entryFilter.Text = "";
            QSMain.CheckConnectionAlive();
            try
            {
                string    sql = SqlSelect.Replace("@tablename", TableRef);
                DbCommand cmd = QSMain.ConnectionDB.CreateCommand();
                cmd.CommandText = sql;

                using (DbDataReader rdr = cmd.ExecuteReader())
                {
                    RefListStore.Clear();
                    object[] Values = new object[RefListStore.NColumns];
                    while (rdr.Read())
                    {
                        Values[0] = rdr.GetInt32(0);
                        object[] Fields = new object[rdr.FieldCount];
                        rdr.GetValues(Fields);
                        for (int i = 1; i < Columns.Count; i++)
                        {
                            Values[i] = String.Format(Columns[i].DisplayFormat, Fields);
                        }
                        if (_OrdinalField != "")
                        {
                            Values[OrdinalColumn] = rdr.GetInt32(rdr.GetOrdinal(_OrdinalField));
                        }
                        RefListStore.AppendValues(Values);
                    }
                }
                logger.Info("Ok");
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Ошибка получения таблицы!");
                QSMain.ErrorMessage(this, ex);
            }
            OnTreeviewrefCursorChanged((object)treeviewref, EventArgs.Empty);
            TestOrdinalChanged();
        }
Example #9
0
        public void UserFill(int UserId)
        {
            NewUser = false;
            logger.Info("Запрос пользователя №{0}...", UserId);
            string sql = "SELECT * FROM users WHERE users.id = @id";

            try {
                QSMain.CheckConnectionAlive();
                MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);

                cmd.Parameters.AddWithValue("@id", UserId);

                MySqlDataReader rdr = cmd.ExecuteReader();

                rdr.Read();
                bool   deactivated = false;
                string email       = String.Empty;
                try {
                    deactivated = DBWorks.GetBoolean(rdr, "deactivated", false);
                    email       = DBWorks.GetString(rdr, "email", String.Empty);
                } catch {
                }

                entryID.Text    = rdr["id"].ToString();
                entryLogin.Text = rdr["login"].ToString();
                //Если SaaS - запретить редактировать логин.
                entryLogin.Sensitive       = !Session.IsSaasConnection;
                OriginLogin                = rdr["login"].ToString();
                entryName.Text             = rdr["name"].ToString();
                entryPassword.Text         = passFill;
                entryEmail.Text            = email;
                checkDeactivated.Active    = deactivated;
                checkDeactivated.Sensitive = QSMain.User.Login != OriginLogin;
                checkAdmin.Active          = rdr.GetBoolean(QSMain.AdminFieldName);

                if (deactivated && Session.IsSaasConnection)                  //FIXME Очень странное условие. Нужно разобраться. Что делает этот блок и зачем?
                {
                    entryName.Sensitive        = entryPassword.Sensitive = entryEmail.Sensitive = false;
                    checkDeactivated.Sensitive = checkAdmin.Sensitive = false;
                }

                foreach (KeyValuePair <string, CheckButton> Pair in RightCheckButtons)
                {
                    Pair.Value.Active = rdr.GetBoolean(QSMain.ProjectPermission[Pair.Key].DataBaseName);
                }

                if (permissionViews != null)
                {
                    foreach (var view in permissionViews)
                    {
                        view.DBFieldValue = DBWorks.GetString(rdr, view.DBFieldName);
                    }
                }

                textviewComments.Buffer.Text = rdr["description"].ToString();
                rdr.Close();

                this.Title = entryName.Text;
                logger.Info("Ok");
            } catch (Exception ex) {
                logger.Error(ex, "Ошибка получения информации о пользователе!");
                QSMain.ErrorMessage(this, ex);
            }
        }
Example #10
0
 void UpdatePrivileges()
 {
     logger.Info("Устанавливаем права...");
     try {
         string privileges;
         if (checkAdmin.Active)
         {
             privileges = "ALL";
         }
         else
         {
             privileges = "SELECT, INSERT, UPDATE, DELETE, EXECUTE, SHOW VIEW";
         }
         string sql = $"GRANT {privileges} ON `{QSMain.connectionDB.Database}`.* TO @login, @login @'localhost'";
         QSMain.CheckConnectionAlive();
         MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
         cmd.Parameters.AddWithValue("@login", entryLogin.Text);
         cmd.ExecuteNonQuery();
         if (checkAdmin.Active)
         {
             cmd.CommandText = "GRANT CREATE USER, GRANT OPTION ON *.* TO @login, @login @'localhost'";
         }
         else
         {
             cmd.CommandText = "REVOKE CREATE USER, GRANT OPTION ON *.* FROM @login, @login @'localhost'";
         }
         cmd.ExecuteNonQuery();
         bool GrantMake = false;
         if (checkAdmin.Active)
         {
             sql       = "GRANT SELECT, UPDATE ON mysql.* TO @login, @login @'localhost'";
             GrantMake = true;
         }
         else
         {
             sql = "SHOW GRANTS FOR @login";
             cmd = new MySqlCommand(sql, QSMain.connectionDB);
             cmd.Parameters.AddWithValue("@login", entryLogin.Text);
             using (MySqlDataReader rdr = cmd.ExecuteReader()) {
                 while (rdr.Read())
                 {
                     if (rdr[0].ToString().IndexOf("mysql") > 0)
                     {
                         GrantMake = true;
                     }
                 }
             }
             sql = "REVOKE SELECT, UPDATE ON mysql.* FROM @login, @login @'localhost'";
         }
         if (GrantMake)
         {
             cmd = new MySqlCommand(sql, QSMain.connectionDB);
             cmd.Parameters.AddWithValue("@login", entryLogin.Text);
             cmd.ExecuteNonQuery();
         }
         logger.Info("Права установлены. Ok");
     } catch (MySqlException ex) when(ex.Number == 1044)
     {
         logger.Error(ex, "Ошибка установки прав!");
         MessageDialogWorks.RunErrorDialog("У вас не достаточно прав на сервере MySQL для установки полномочий другим пользователям. Возможно некоторые права не были установлены.");
     } catch (Exception ex) {
         logger.Error(ex, "Ошибка установки прав!");
         QSMain.ErrorMessage(this, ex);
     }
 }
Example #11
0
        bool CreateLogin()
        {
            logger.Info("Создание учетной записи на сервере...");

            try {
                //Проверка существует ли логин
                string 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(false);
                }

                sql = "SELECT COUNT(*) from mysql.user WHERE USER = @login";
                cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                try {
                    if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
                    {
                        string Message = "Пользователь с логином " + entryLogin.Text + " уже существует на сервере. " +
                                         "Если он использовался для доступа к другим базам, может возникнуть путаница. " +
                                         "Использовать этот логин?";
                        MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                             MessageType.Warning,
                                                             ButtonsType.YesNo,
                                                             Message);
                        bool result = (ResponseType)md.Run() == ResponseType.Yes;
                        md.Destroy();
                        return(result);
                    }
                } catch (MySqlException ex) {
                    if (ex.Number == 1045)
                    {
                        logger.Warn(ex, "Нет доступа к таблице пользователей, пробую создать пользователя в слепую.");
                    }
                    else
                    {
                        return(false);
                    }
                }
                //Создание пользователя.
                sql = "CREATE USER @login IDENTIFIED BY @password";
                cmd = new MySqlCommand(sql, QSMain.connectionDB);
                cmd.Parameters.AddWithValue("@login", entryLogin.Text);
                cmd.Parameters.AddWithValue("@password", entryPassword.Text);
                cmd.ExecuteNonQuery();
                cmd.CommandText = "CREATE USER @login @'localhost' IDENTIFIED BY @password";
                cmd.ExecuteNonQuery();

                logger.Info("Ok");
                return(true);
            } catch (Exception ex) {
                logger.Error(ex, "Ошибка создания пользователя!");
                QSMain.ErrorMessage(this, ex);
                return(false);
            }
        }
Example #12
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;
                }
            }
        }
Example #13
0
        protected void OnButtonDeleteClicked(object sender, EventArgs e)
        {
            TreeIter iter;

            treeviewUsers.Selection.GetSelected(out iter);
            int    itemid    = (int)UsersListStore.GetValue(iter, 0);
            string loginname = UsersListStore.GetValue(iter, 1).ToString();
            bool   result;

            if (QSMain.IsOrmDeletionConfigered)
            {
                result = QSMain.OnOrmDeletion("users", itemid);
            }
            else
            {
                Delete winDel = new Delete();
                result = winDel.RunDeletion("users", itemid);
                winDel.Destroy();
            }

            if (result)
            {
                if (QSSaaS.Session.IsSaasConnection)
                {
                    logger.Info("Удаляем пользователя в облаке...");
                    QSSaaS.ISaaSService svc = QSSaaS.Session.GetSaaSService();

                    if (!svc.changeBaseAccessFromProgram(QSSaaS.Session.SessionId, loginname, QSSaaS.Session.SaasBaseName, false))
                    {
                        logger.Error("Ошибка удаления доступа к базе на сервере SaaS.");
                    }

                    if (svc.UserAccessBaseCount(QSSaaS.Session.SessionId, QSSaaS.Session.Account, loginname) == 0)
                    {
                        if (MessageDialogWorks.RunQuestionDialog($"У пользователя '{loginname}' на сервисе QS:Облако больше не осталось баз данных, к которым он имеет доступ. Удалить пользователя с QS:Облако тоже?"))
                        {
                            if (!svc.DeleteCloudUser(QSSaaS.Session.SessionId, QSSaaS.Session.Account, loginname))
                            {
                                var text = "Удаления пользователя с QS:Облако не произошло.";
                                logger.Error(text);
                                MessageDialogWorks.RunErrorDialog(text);
                            }
                        }
                    }
                }
                else
                {
                    logger.Info("Удаляем пользователя MySQL...");
                    string sql;
                    sql = "DROP USER @login, @login @'localhost'";
                    try {
                        QSMain.CheckConnectionAlive();
                        MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB);
                        cmd.Parameters.AddWithValue("@login", loginname);
                        cmd.ExecuteNonQuery();
                        logger.Info("Пользователь удалён. Ok");

                        if (QSMain.User.Id == itemid)
                        {
                            MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent,
                                                                 MessageType.Warning, ButtonsType.Close,
                                                                 "Был удален пользователь, под которым Вы подключились к базе данных, чтобы недопустить некорректных операций программа закроется. Зайдите в программу от имени другого пользователя.");
                            md.Run();
                            md.Destroy();
                            Environment.Exit(0);
                        }
                    } catch (Exception ex) {
                        logger.Error(ex, "Ошибка удаления пользователя!");
                        QSMain.ErrorMessage(this, ex);
                    }
                }
            }

            UpdateUsers();
        }
Example #14
0
        void on_editnode_response(object obj, ResponseArgs args)
        {
            if (args.ResponseId == ResponseType.Ok)
            {
                logger.Info("Запись " + nameNode + "...");
                string sql, InsertDescriptString, UpdateDescriptString;
                if (DescriptionField)
                {
                    if (ParentFieldName == "")
                    {
                        InsertDescriptString = " (name, description) VALUES (@name, @descript)";
                    }
                    else
                    {
                        InsertDescriptString = " (name, description, " + ParentFieldName + ") VALUES (@name, @descript, @parent)";
                    }
                    UpdateDescriptString = ", description = @descript ";
                }
                else
                {
                    if (ParentFieldName == "")
                    {
                        InsertDescriptString = " (name) VALUES (@name)";
                    }
                    else
                    {
                        InsertDescriptString = " (name, " + ParentFieldName + ") VALUES (@name, @parent)";
                    }
                    UpdateDescriptString = "";
                }
                if (NewNode)
                {
                    sql = "INSERT INTO " + TableRef + InsertDescriptString;
                }
                else
                {
                    sql = "UPDATE " + TableRef + " SET name = @name " + UpdateDescriptString +
                          "WHERE id = @id";
                }
                QSMain.CheckConnectionAlive();
                try
                {
                    DbCommand cmd = QSMain.ConnectionDB.CreateCommand();
                    cmd.CommandText = sql;

                    DbParameter param = cmd.CreateParameter();
                    param.ParameterName = "@id";
                    param.Value         = SelectedID;
                    cmd.Parameters.Add(param);

                    param = cmd.CreateParameter();
                    param.ParameterName = "@name";
                    param.Value         = inputNameEntry.Text;
                    cmd.Parameters.Add(param);

                    if (DescriptionField)
                    {
                        param = cmd.CreateParameter();
                        param.ParameterName = "@descript";
                        param.Value         = inputDiscriptionEntry.Text;
                        cmd.Parameters.Add(param);
                    }
                    if (ParentFieldName != "")
                    {
                        param = cmd.CreateParameter();
                        param.ParameterName = "@parent";
                        param.Value         = ParentId;
                        cmd.Parameters.Add(param);
                    }
                    cmd.ExecuteNonQuery();

                    if (NewNode && OrdinalField != "")
                    {
                        cmd             = QSMain.ConnectionDB.CreateCommand();
                        cmd.CommandText = @"select last_insert_rowid()";
                        int ItemId = Convert.ToInt32(cmd.ExecuteScalar());

                        cmd                 = QSMain.ConnectionDB.CreateCommand();
                        cmd.CommandText     = String.Format("UPDATE {0} SET {1} = @id WHERE id = @id", TableRef, OrdinalField);
                        param               = cmd.CreateParameter();
                        param.ParameterName = "@id";
                        param.Value         = ItemId;
                        cmd.Parameters.Add(param);

                        cmd.ExecuteNonQuery();
                    }

                    logger.Info("Ok");
                }
                catch (Exception ex)
                {
                    logger.Error(ex, "Ошибка записи {0}!", nameNode);
                    QSMain.ErrorMessage(this, ex);
                }
            }
        }