Skip to content

Commit 9e0efb3

Browse files
committed
Setting for certificate path, in cases where mounted from a secrets mount
1 parent 1a171d6 commit 9e0efb3

File tree

8 files changed

+31
-7
lines changed

8 files changed

+31
-7
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(configuration.ServerConfiguration.ClientCertificateBase64),
42+
Certificate = RavenClientCertificate.FindClientCertificate(configuration.ServerConfiguration),
4343
Conventions = new DocumentConventions
4444
{
4545
SaveEnumsAsIntegers = true

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

Lines changed: 6 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 ClientCertificatePathKey = "RavenDB/ClientCertificatePath";
1516
public const string ClientCertificateBase64Key = "RavenDB/ClientCertificateBase64";
1617
public const string DatabaseMaintenancePortKey = "DatabaseMaintenancePort";
1718
public const string ExpirationProcessTimerInSecondsKey = "ExpirationProcessTimerInSeconds";
@@ -25,6 +26,7 @@ public class RavenPersistenceConfiguration : IPersistenceConfiguration
2526
DatabaseNameKey,
2627
DatabasePathKey,
2728
ConnectionStringKey,
29+
ClientCertificatePathKey,
2830
ClientCertificateBase64Key,
2931
DatabaseMaintenancePortKey,
3032
ExpirationProcessTimerInSecondsKey,
@@ -62,6 +64,10 @@ internal static DatabaseConfiguration GetDatabaseConfiguration(PersistenceSettin
6264

6365
serverConfiguration = new ServerConfiguration(connectionString);
6466

67+
if (settings.PersisterSpecificSettings.TryGetValue(ClientCertificatePathKey, out var clientCertificatePath))
68+
{
69+
serverConfiguration.ClientCertificatePath = clientCertificatePath;
70+
}
6571
if (settings.PersisterSpecificSettings.TryGetValue(ClientCertificateBase64Key, out var clientCertificateBase64))
6672
{
6773
serverConfiguration.ClientCertificateBase64 = clientCertificateBase64;

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
namespace ServiceControl.Audit.Persistence.RavenDB
22
{
3-
public class ServerConfiguration
3+
using ServiceControl.RavenDB;
4+
5+
public class ServerConfiguration : IRavenClientCertificateInfo
46
{
57
public ServerConfiguration(string connectionString)
68
{
@@ -18,6 +20,7 @@ public ServerConfiguration(string dbPath, string serverUrl, string logPath, stri
1820
}
1921

2022
public string ConnectionString { get; }
23+
public string ClientCertificatePath { get; internal set; }
2124
public string ClientCertificateBase64 { get; internal set; }
2225
public bool UseEmbeddedServer { get; }
2326
public string DbPath { get; internal set; } //Setter for ATT only

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 ClientCertificatePathKey = "RavenDB/ClientCertificatePath";
1011
public const string ClientCertificateBase64Key = "RavenDB/ClientCertificateBase64";
1112
public const string MinimumStorageLeftRequiredForIngestionKey = "MinimumStorageLeftRequiredForIngestion";
1213
public const string DatabaseNameKey = "RavenDB/DatabaseName";

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(settings.ClientCertificateBase64),
42+
Certificate = RavenClientCertificate.FindClientCertificate(settings),
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+
ClientCertificatePath = SettingsReader.Read<string>(settingsRootNamespace, RavenBootstrapper.ClientCertificatePathKey),
3738
ClientCertificateBase64 = SettingsReader.Read<string>(settingsRootNamespace, RavenBootstrapper.ClientCertificateBase64Key),
3839
DatabaseName = SettingsReader.Read(settingsRootNamespace, RavenBootstrapper.DatabaseNameKey, RavenPersisterSettings.DatabaseNameDefault),
3940
DatabasePath = SettingsReader.Read(settingsRootNamespace, RavenBootstrapper.DatabasePathKey, DefaultDatabaseLocation()),

src/ServiceControl.Persistence.RavenDB/RavenPersisterSettings.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
using Particular.LicensingComponent.Contracts;
33
using ServiceControl.Persistence;
44
using ServiceControl.Persistence.RavenDB.CustomChecks;
5+
using ServiceControl.RavenDB;
56

6-
class RavenPersisterSettings : PersistenceSettings
7+
class RavenPersisterSettings : PersistenceSettings, IRavenClientCertificateInfo
78
{
89
public int DatabaseMaintenancePort { get; set; } = DatabaseMaintenancePortDefault;
910
public int ExpirationProcessTimerInSeconds { get; set; } = ExpirationProcessTimerInSecondsDefault;
@@ -23,6 +24,7 @@ class RavenPersisterSettings : PersistenceSettings
2324
/// User provided external RavenDB instance connection string
2425
/// </summary>
2526
public string ConnectionString { get; set; }
27+
public string ClientCertificatePath { get; set; }
2628
public string ClientCertificateBase64 { get; set; }
2729
public bool UseEmbeddedServer => string.IsNullOrWhiteSpace(ConnectionString);
2830
public string LogPath { get; set; }

src/ServiceControl.RavenDB/RavenClientCertificate.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ namespace ServiceControl.RavenDB;
88

99
public static class RavenClientCertificate
1010
{
11-
public static X509Certificate2? FindClientCertificate(string? base64String)
11+
public static X509Certificate2? FindClientCertificate(IRavenClientCertificateInfo certInfo)
1212
{
13-
if (base64String is not null)
13+
if (certInfo.ClientCertificateBase64 is not null)
1414
{
1515
try
1616
{
17-
var bytes = Convert.FromBase64String(base64String);
17+
var bytes = Convert.FromBase64String(certInfo.ClientCertificateBase64);
1818
return new X509Certificate2(bytes);
1919
}
2020
catch (Exception x) when (x is FormatException or CryptographicException)
@@ -23,6 +23,11 @@ public static class RavenClientCertificate
2323
}
2424
}
2525

26+
if (certInfo.ClientCertificatePath is not null)
27+
{
28+
return new X509Certificate2(certInfo.ClientCertificatePath);
29+
}
30+
2631
var applicationDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location) ?? string.Empty;
2732
var certificatePath = Path.Combine(applicationDirectory, "raven-client-certificate.pfx");
2833

@@ -32,4 +37,10 @@ public static class RavenClientCertificate
3237
}
3338
return null;
3439
}
40+
}
41+
42+
public interface IRavenClientCertificateInfo
43+
{
44+
string? ClientCertificatePath { get; }
45+
string? ClientCertificateBase64 { get; }
3546
}

0 commit comments

Comments
 (0)