private void SetupSsl(PostgreSqlConfig config) { this.connection.ProvideClientCertificatesCallback = clientCerts => { this.ProvideClientCertificates(clientCerts, config); }; // this.connection.UserCertificateValidationCallback = (sender, certificate, chain, errors) => true; }
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(); }
/// <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); }
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(); }
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)); } }