Skip to content

Commit

Permalink
Add settings to Primary/Audit and plumb through to certificate finder
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidBoike committed Jan 31, 2025
1 parent 56c2cea commit 6febd41
Show file tree
Hide file tree
Showing 8 changed files with 28 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public async Task Initialize(CancellationToken cancellationToken = default)
{
Database = configuration.Name,
Urls = [configuration.ServerConfiguration.ConnectionString],
Certificate = RavenClientCertificate.FindClientCertificate(),
Certificate = RavenClientCertificate.FindClientCertificate(configuration.ServerConfiguration.ClientCertificateBase64),
Conventions = new DocumentConventions
{
SaveEnumsAsIntegers = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class RavenPersistenceConfiguration : IPersistenceConfiguration
public const string DatabaseNameKey = "RavenDB/DatabaseName";
public const string DatabasePathKey = "DbPath";
public const string ConnectionStringKey = "RavenDB/ConnectionString";
public const string ClientCertificateBase64Key = "RavenDB/ClientCertificateBase64";
public const string DatabaseMaintenancePortKey = "DatabaseMaintenancePort";
public const string ExpirationProcessTimerInSecondsKey = "ExpirationProcessTimerInSeconds";
public const string LogPathKey = "LogPath";
Expand All @@ -24,6 +25,7 @@ public class RavenPersistenceConfiguration : IPersistenceConfiguration
DatabaseNameKey,
DatabasePathKey,
ConnectionStringKey,
ClientCertificateBase64Key,
DatabaseMaintenancePortKey,
ExpirationProcessTimerInSecondsKey,
LogPathKey,
Expand Down Expand Up @@ -59,6 +61,11 @@ internal static DatabaseConfiguration GetDatabaseConfiguration(PersistenceSettin
}

serverConfiguration = new ServerConfiguration(connectionString);

if (settings.PersisterSpecificSettings.TryGetValue(ClientCertificateBase64Key, out var clientCertificateBase64))
{
serverConfiguration.ClientCertificateBase64 = clientCertificateBase64;
}
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public ServerConfiguration(string dbPath, string serverUrl, string logPath, stri
}

public string ConnectionString { get; }
public string ClientCertificateBase64 { get; internal set; }
public bool UseEmbeddedServer { get; }
public string DbPath { get; internal set; } //Setter for ATT only
public string ServerUrl { get; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ static class RavenBootstrapper
public const string DatabaseMaintenancePortKey = "DatabaseMaintenancePort";
public const string ExpirationProcessTimerInSecondsKey = "ExpirationProcessTimerInSeconds";
public const string ConnectionStringKey = "RavenDB/ConnectionString";
public const string ClientCertificateBase64Key = "RavenDB/ClientCertificateBase64";
public const string MinimumStorageLeftRequiredForIngestionKey = "MinimumStorageLeftRequiredForIngestion";
public const string DatabaseNameKey = "RavenDB/DatabaseName";
public const string LogsPathKey = "LogPath";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public async Task Initialize(CancellationToken cancellationToken)
{
Database = settings.DatabaseName,
Urls = [settings.ConnectionString],
Certificate = RavenClientCertificate.FindClientCertificate(),
Certificate = RavenClientCertificate.FindClientCertificate(settings.ClientCertificateBase64),
Conventions = new DocumentConventions
{
SaveEnumsAsIntegers = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ static T GetRequiredSetting<T>(SettingsRootNamespace settingsRootNamespace, stri
var settings = new RavenPersisterSettings
{
ConnectionString = SettingsReader.Read<string>(settingsRootNamespace, RavenBootstrapper.ConnectionStringKey),
ClientCertificateBase64 = SettingsReader.Read<string>(settingsRootNamespace, RavenBootstrapper.ClientCertificateBase64Key),
DatabaseName = SettingsReader.Read(settingsRootNamespace, RavenBootstrapper.DatabaseNameKey, RavenPersisterSettings.DatabaseNameDefault),
DatabasePath = SettingsReader.Read(settingsRootNamespace, RavenBootstrapper.DatabasePathKey, DefaultDatabaseLocation()),
DatabaseMaintenancePort = SettingsReader.Read(settingsRootNamespace, RavenBootstrapper.DatabaseMaintenancePortKey, RavenPersisterSettings.DatabaseMaintenancePortDefault),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class RavenPersisterSettings : PersistenceSettings
/// User provided external RavenDB instance connection string
/// </summary>
public string ConnectionString { get; set; }
public string ClientCertificateBase64 { get; set; }
public bool UseEmbeddedServer => string.IsNullOrWhiteSpace(ConnectionString);
public string LogPath { get; set; }
public string LogsMode { get; set; } = LogsModeDefault;
Expand Down
16 changes: 15 additions & 1 deletion src/ServiceControl.RavenDB/RavenClientCertificate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,26 @@
namespace ServiceControl.RavenDB;

using System.Reflection;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

public static class RavenClientCertificate
{
public static X509Certificate2? FindClientCertificate()
public static X509Certificate2? FindClientCertificate(string? base64String)
{
if (base64String is not null)
{
try
{
var bytes = Convert.FromBase64String(base64String);
return new X509Certificate2(bytes);
}
catch (Exception x) when (x is FormatException or CryptographicException)
{
throw new Exception("Could not read the RavenDB client certificate from the configured Base64 value.", x);
}
}

var applicationDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location) ?? string.Empty;
var certificatePath = Path.Combine(applicationDirectory, "raven-client-certificate.pfx");

Expand Down

0 comments on commit 6febd41

Please sign in to comment.