Skip to content

Commit 1a171d6

Browse files
committed
Add settings to Primary/Audit and plumb through to certificate finder
1 parent 6ccbcd6 commit 1a171d6

File tree

8 files changed

+28
-3
lines changed

8 files changed

+28
-3
lines changed

src/ServiceControl.Audit.Persistence.RavenDB/RavenExternalPersistenceLifecycle.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public async Task Initialize(CancellationToken cancellationToken = default)
3939
{
4040
Database = configuration.Name,
4141
Urls = [configuration.ServerConfiguration.ConnectionString],
42-
Certificate = RavenClientCertificate.FindClientCertificate(),
42+
Certificate = RavenClientCertificate.FindClientCertificate(configuration.ServerConfiguration.ClientCertificateBase64),
4343
Conventions = new DocumentConventions
4444
{
4545
SaveEnumsAsIntegers = true

src/ServiceControl.Audit.Persistence.RavenDB/RavenPersistenceConfiguration.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class RavenPersistenceConfiguration : IPersistenceConfiguration
1212
public const string DatabaseNameKey = "RavenDB/DatabaseName";
1313
public const string DatabasePathKey = "DbPath";
1414
public const string ConnectionStringKey = "RavenDB/ConnectionString";
15+
public const string ClientCertificateBase64Key = "RavenDB/ClientCertificateBase64";
1516
public const string DatabaseMaintenancePortKey = "DatabaseMaintenancePort";
1617
public const string ExpirationProcessTimerInSecondsKey = "ExpirationProcessTimerInSeconds";
1718
public const string LogPathKey = "LogPath";
@@ -24,6 +25,7 @@ public class RavenPersistenceConfiguration : IPersistenceConfiguration
2425
DatabaseNameKey,
2526
DatabasePathKey,
2627
ConnectionStringKey,
28+
ClientCertificateBase64Key,
2729
DatabaseMaintenancePortKey,
2830
ExpirationProcessTimerInSecondsKey,
2931
LogPathKey,
@@ -59,6 +61,11 @@ internal static DatabaseConfiguration GetDatabaseConfiguration(PersistenceSettin
5961
}
6062

6163
serverConfiguration = new ServerConfiguration(connectionString);
64+
65+
if (settings.PersisterSpecificSettings.TryGetValue(ClientCertificateBase64Key, out var clientCertificateBase64))
66+
{
67+
serverConfiguration.ClientCertificateBase64 = clientCertificateBase64;
68+
}
6269
}
6370
else
6471
{

src/ServiceControl.Audit.Persistence.RavenDB/ServerConfiguration.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public ServerConfiguration(string dbPath, string serverUrl, string logPath, stri
1818
}
1919

2020
public string ConnectionString { get; }
21+
public string ClientCertificateBase64 { get; internal set; }
2122
public bool UseEmbeddedServer { get; }
2223
public string DbPath { get; internal set; } //Setter for ATT only
2324
public string ServerUrl { get; }

src/ServiceControl.Persistence.RavenDB/RavenBootstrapper.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ static class RavenBootstrapper
77
public const string DatabaseMaintenancePortKey = "DatabaseMaintenancePort";
88
public const string ExpirationProcessTimerInSecondsKey = "ExpirationProcessTimerInSeconds";
99
public const string ConnectionStringKey = "RavenDB/ConnectionString";
10+
public const string ClientCertificateBase64Key = "RavenDB/ClientCertificateBase64";
1011
public const string MinimumStorageLeftRequiredForIngestionKey = "MinimumStorageLeftRequiredForIngestion";
1112
public const string DatabaseNameKey = "RavenDB/DatabaseName";
1213
public const string LogsPathKey = "LogPath";

src/ServiceControl.Persistence.RavenDB/RavenExternalPersistenceLifecycle.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public async Task Initialize(CancellationToken cancellationToken)
3939
{
4040
Database = settings.DatabaseName,
4141
Urls = [settings.ConnectionString],
42-
Certificate = RavenClientCertificate.FindClientCertificate(),
42+
Certificate = RavenClientCertificate.FindClientCertificate(settings.ClientCertificateBase64),
4343
Conventions = new DocumentConventions
4444
{
4545
SaveEnumsAsIntegers = true

src/ServiceControl.Persistence.RavenDB/RavenPersistenceConfiguration.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ static T GetRequiredSetting<T>(SettingsRootNamespace settingsRootNamespace, stri
3434
var settings = new RavenPersisterSettings
3535
{
3636
ConnectionString = SettingsReader.Read<string>(settingsRootNamespace, RavenBootstrapper.ConnectionStringKey),
37+
ClientCertificateBase64 = SettingsReader.Read<string>(settingsRootNamespace, RavenBootstrapper.ClientCertificateBase64Key),
3738
DatabaseName = SettingsReader.Read(settingsRootNamespace, RavenBootstrapper.DatabaseNameKey, RavenPersisterSettings.DatabaseNameDefault),
3839
DatabasePath = SettingsReader.Read(settingsRootNamespace, RavenBootstrapper.DatabasePathKey, DefaultDatabaseLocation()),
3940
DatabaseMaintenancePort = SettingsReader.Read(settingsRootNamespace, RavenBootstrapper.DatabaseMaintenancePortKey, RavenPersisterSettings.DatabaseMaintenancePortDefault),

src/ServiceControl.Persistence.RavenDB/RavenPersisterSettings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class RavenPersisterSettings : PersistenceSettings
2323
/// User provided external RavenDB instance connection string
2424
/// </summary>
2525
public string ConnectionString { get; set; }
26+
public string ClientCertificateBase64 { get; set; }
2627
public bool UseEmbeddedServer => string.IsNullOrWhiteSpace(ConnectionString);
2728
public string LogPath { get; set; }
2829
public string LogsMode { get; set; } = LogsModeDefault;

src/ServiceControl.RavenDB/RavenClientCertificate.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,26 @@
33
namespace ServiceControl.RavenDB;
44

55
using System.Reflection;
6+
using System.Security.Cryptography;
67
using System.Security.Cryptography.X509Certificates;
78

89
public static class RavenClientCertificate
910
{
10-
public static X509Certificate2? FindClientCertificate()
11+
public static X509Certificate2? FindClientCertificate(string? base64String)
1112
{
13+
if (base64String is not null)
14+
{
15+
try
16+
{
17+
var bytes = Convert.FromBase64String(base64String);
18+
return new X509Certificate2(bytes);
19+
}
20+
catch (Exception x) when (x is FormatException or CryptographicException)
21+
{
22+
throw new Exception("Could not read the RavenDB client certificate from the configured Base64 value.", x);
23+
}
24+
}
25+
1226
var applicationDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location) ?? string.Empty;
1327
var certificatePath = Path.Combine(applicationDirectory, "raven-client-certificate.pfx");
1428

0 commit comments

Comments
 (0)