Ejemplo n.º 1
0
        private void SetupSsl(PostgreSqlConfig config)
        {
            this.connection.ProvideClientCertificatesCallback = clientCerts => {
                this.ProvideClientCertificates(clientCerts, config);
            };
//            this.connection.UserCertificateValidationCallback = (sender, certificate, chain, errors) => true;
        }
Ejemplo n.º 2
0
        public PostgreSql(PostgreSqlConfig config)
        {
            string adminConnString = this.ConstructConnectionString(config, true);
            // Make admin connection to ensure database exists
            NpgsqlConnection adminConnection = new NpgsqlConnection(adminConnString);

            adminConnection.Open();
            // Check valid database name
            if (!string.IsNullOrWhiteSpace(config.PostgreSqlDb))
            {
                this.dbName = config.PostgreSqlDb;
            }
            this.EnsureDbExists(adminConnection);
            adminConnection.Close();

            string connString = this.ConstructConnectionString(config);

            this.connection = new NpgsqlConnection(connString);
            this.SetupSsl(config);
            this.connection.Open();

            if (this.connection.State == ConnectionState.Broken || this.connection.State == ConnectionState.Closed)
            {
                Log.Error("Failed to connect to PostgreSQL, is config correct?");
                throw new Exception("Failed to connect to PostgreSQL, is config correct?");
            }
            this.EnsureTableExists();
        }
Ejemplo n.º 3
0
        /// <summary>
        ///     Compose the connection string to either the admin or MagnumBI Dispatch database.
        /// </summary>
        /// <param name="config">Config for connection</param>
        /// <param name="admin">True if we want to connect to the admin database</param>
        /// <returns>Connection string for PostgreSQL.</returns>
        private string ConstructConnectionString(PostgreSqlConfig config, bool admin = false)
        {
            string[] split = config.PostgreSqlHostnames[0].Split(':');
            string   ip    = split[0];
            int      port  = int.Parse(split[1]);

            string connString = $"Server={ip};Port={port};" +
                                $"User Id={config.PostgreSqlUser};Password={config.PostgreSqlPassword};" +
                                $"Database={(admin ? config.PostgreSqlAdminDb : this.dbName)};";

            // Set up SSL if applicable
            if (config.SslConfig.UseSsl)
            {
                if (config.SslConfig != null)
                {
                    connString += $"SSL Mode=Required;Trust Server Certificate={!config.SslConfig.VerifySsl};";
                }
                else
                {
                    throw new Exception("SSL use was requested in config but no SslConfig was defined.");
                }
            }

            // Timeout settings
            connString += "Timeout=8;";

            return(connString);
        }
Ejemplo n.º 4
0
        public PostgreSqlTests(ITestOutputHelper output)
        {
            this.output = output;
            LoggerConfiguration logConfig = new LoggerConfiguration().WriteTo.Console()
                                            .WriteTo.TestOutput(output, LogEventLevel.Verbose);

            Log.Logger = logConfig.CreateLogger();

            // Setup db
            string text = File.ReadAllText(this.configFile);

            this.engineConfig = JsonConvert.DeserializeObject <EngineConfig>(text);
            PostgreSqlConfig config = this.engineConfig.DatastoreConfig as PostgreSqlConfig;

            this.datastore = new PostgreSql(config);
            this.datastore.ClearData();
        }
Ejemplo n.º 5
0
 private void ProvideClientCertificates(X509CertificateCollection clientCerts, PostgreSqlConfig config)
 {
     foreach (KeyValuePair <string, string> sslConfigClientCertificate in
              config.SslConfig.ClientCertificates)
     {
         if (!File.Exists(sslConfigClientCertificate.Key))
         {
             Log.Error("Could not find cert file, skipping", sslConfigClientCertificate);
             continue;
         }
         clientCerts.Add(new X509Certificate2(sslConfigClientCertificate.Key,
                                              sslConfigClientCertificate.Value));
     }
 }