Exemple #1
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);
         }
     }
 }
        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);
                }
            }
        }