private void InstallEnterpriseFirewallPlugin()

in Configurator/Core/Server/ServerConfigurationController.cs [2506:2588]


    private void InstallEnterpriseFirewallPlugin()
    {
      CancellationToken.ThrowIfCancellationRequested();
      ReportStatus(Resources.ServerConfigEventConfigureEnterpriseFirewallInfo);
      string connectionString = GetConnectionString(MySqlServerUser.ROOT_USERNAME, Settings.RootPassword, false, "mysql");
      try
      {
        // Read the install script from the share folder.
        string firewallScript;
        using (var reader = new StreamReader($"{InstallDirectory}\\share\\win_install_firewall.sql"))
        {
          firewallScript = reader.ReadToEnd();
        }

        if (string.IsNullOrEmpty(firewallScript))
        {
          ReportError(string.Format(Resources.ServerConfigEventConfigureEnterpriseFirewallError, Resources.InstallEnterpriseFirewallScriptNotFound));
          CurrentStep.Status = ConfigurationStepStatus.Error;
          return;
        }

        // Generate the uninstall script and execute it.
        using (var connection = new MySqlConnection(connectionString))
        {
          var uninstallScript = ConvertToUninstallScript("mysql", firewallScript);
          var script = new MySqlScript
          {
            Connection = connection,
            Query = uninstallScript
          };
          connection.Open();
          script.Execute();
          script.Query = Resources.UninstallEnterpriseFirewall;
          script.Execute();
        }

        // Execute the install scripts.
        CancellationToken.ThrowIfCancellationRequested();
        if (Settings.Plugins.IsEnabled("mysql_firewall"))
        {
          using (var connection = new MySqlConnection(connectionString))
          {
            var script = new MySqlScript
            {
              Connection = connection,
              Query = firewallScript
            };
            connection.Open();
            script.Execute();
            var command = new MySqlCommand
            {
              Connection = connection,
              CommandText = "sp_set_firewall_mode",
              CommandType = CommandType.StoredProcedure
            };
            command.Parameters.AddWithValue("@arg_userhost", "root@localhost");
            command.Parameters.AddWithValue("@arg_mode", "RECORDING");
            command.ExecuteNonQuery();

            foreach (var serverUser in Settings.NewServerUsers)
            {
              var cmdUser = new MySqlCommand
              {
                Connection = connection,
                CommandText = "sp_set_firewall_mode",
                CommandType = CommandType.StoredProcedure
              };
              cmdUser.Parameters.AddWithValue("@arg_userhost", $"{serverUser.Username}@{serverUser.Host}");
              cmdUser.Parameters.AddWithValue("@arg_mode", "RECORDING");
              cmdUser.ExecuteNonQuery();
            }
          }

          ReportStatus(Resources.ServerConfigEventConfigureEnterpriseFirewallSuccess);
          CurrentStep.Status = ConfigurationStepStatus.Finished;
        }
      }
      catch (Exception e)
      {
        ReportError(string.Format(Resources.ServerConfigEventConfigureEnterpriseFirewallError, e));
        CurrentStep.Status = ConfigurationStepStatus.Error;
      }
    }