From 3ffe7a5d385f8abfc9a73ae3fef64e572263d645 Mon Sep 17 00:00:00 2001 From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com> Date: Wed, 4 Mar 2026 13:37:47 +0100 Subject: [PATCH 1/2] chore: Simplify integration of the library --- .../CertificateCredentials.cs | 29 ++++++++++++------- src/Docker.DotNet/DockerClient.cs | 3 ++ src/Docker.DotNet/DockerClientBuilder.cs | 8 +++-- src/Docker.DotNet/IDockerClient.cs | 2 ++ 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/Docker.DotNet.X509/CertificateCredentials.cs b/src/Docker.DotNet.X509/CertificateCredentials.cs index a03bf796..d72efbd8 100644 --- a/src/Docker.DotNet.X509/CertificateCredentials.cs +++ b/src/Docker.DotNet.X509/CertificateCredentials.cs @@ -18,31 +18,38 @@ public HttpMessageHandler ConfigureHandler(HttpMessageHandler handler) #if NET6_0_OR_GREATER if (handler is SocketsHttpHandler socketsHandler) { - socketsHandler.SslOptions.ClientCertificates = new X509Certificate2Collection(); - socketsHandler.SslOptions.ClientCertificates.Add(_certificate); + if (_certificate != null) + { + socketsHandler.SslOptions.ClientCertificates = new X509Certificate2Collection(); + socketsHandler.SslOptions.ClientCertificates.Add(_certificate); + } + socketsHandler.SslOptions.RemoteCertificateValidationCallback = ServerCertificateValidationCallback; return socketsHandler; } #else if (handler is HttpClientHandler httpHandler) { - httpHandler.ClientCertificates.Add(_certificate); + if (_certificate != null && !httpHandler.ClientCertificates.Contains(_certificate)) + { + httpHandler.ClientCertificates.Add(_certificate); + } + httpHandler.ServerCertificateCustomValidationCallback = (message, certificate, chain, sslPolicyErrors) => ServerCertificateValidationCallback(message, certificate, chain, sslPolicyErrors); return httpHandler; } #endif - if (handler is not ManagedHandler managedHandler) + if (handler is ManagedHandler managedHandler) { - return handler; - } + if (_certificate != null && !managedHandler.ClientCertificates.Contains(_certificate)) + { + managedHandler.ClientCertificates.Add(_certificate); + } - if (!managedHandler.ClientCertificates.Contains(_certificate)) - { - managedHandler.ClientCertificates.Add(_certificate); + managedHandler.ServerCertificateValidationCallback = ServerCertificateValidationCallback; + return managedHandler; } - managedHandler.ServerCertificateValidationCallback = ServerCertificateValidationCallback; - return handler; } } \ No newline at end of file diff --git a/src/Docker.DotNet/DockerClient.cs b/src/Docker.DotNet/DockerClient.cs index a55ad4f8..e00498e3 100644 --- a/src/Docker.DotNet/DockerClient.cs +++ b/src/Docker.DotNet/DockerClient.cs @@ -26,6 +26,7 @@ internal DockerClient( _clientOptions = clientOptions; _hijack = hijack; + Options = clientOptions; System = new SystemOperations(this); Containers = new ContainerOperations(this); Images = new ImageOperations(this); @@ -39,6 +40,8 @@ internal DockerClient( Exec = new ExecOperations(this); } + public ClientOptions Options { get; } + public ISystemOperations System { get; } public IContainerOperations Containers { get; } diff --git a/src/Docker.DotNet/DockerClientBuilder.cs b/src/Docker.DotNet/DockerClientBuilder.cs index 4727ead9..2282c5aa 100644 --- a/src/Docker.DotNet/DockerClientBuilder.cs +++ b/src/Docker.DotNet/DockerClientBuilder.cs @@ -37,7 +37,7 @@ public DockerClientBuilder() /// /// The requested API version. /// The builder instance. - public DockerClientBuilder WithApiVersion(Version version) + public DockerClientBuilder WithApiVersion(Version? version) { ClientOptions = ClientOptions with { ApiVersion = version }; return this; @@ -59,9 +59,11 @@ public DockerClientBuilder WithEndpoint(Uri endpoint) /// /// The authentication provider. /// The builder instance. - public DockerClientBuilder WithAuthProvider(IAuthProvider authProvider) + public DockerClientBuilder WithAuthProvider(IAuthProvider? authProvider) { - ClientOptions = ClientOptions with { AuthProvider = authProvider }; + var nonNullableAuthProvider = authProvider ?? NoopAuthProvider.Instance; + + ClientOptions = ClientOptions with { AuthProvider = nonNullableAuthProvider }; return this; } diff --git a/src/Docker.DotNet/IDockerClient.cs b/src/Docker.DotNet/IDockerClient.cs index 0b51b26b..12830241 100644 --- a/src/Docker.DotNet/IDockerClient.cs +++ b/src/Docker.DotNet/IDockerClient.cs @@ -2,6 +2,8 @@ namespace Docker.DotNet; public interface IDockerClient : IDisposable { + ClientOptions Options { get; } + ISystemOperations System { get; } IContainerOperations Containers { get; } From e2125c1dcd4f03a8d9f31d57c451b41d8146a7e6 Mon Sep 17 00:00:00 2001 From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com> Date: Thu, 5 Mar 2026 20:21:14 +0100 Subject: [PATCH 2/2] Update src/Docker.DotNet/DockerClient.cs --- src/Docker.DotNet/DockerClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Docker.DotNet/DockerClient.cs b/src/Docker.DotNet/DockerClient.cs index e00498e3..c59eb59e 100644 --- a/src/Docker.DotNet/DockerClient.cs +++ b/src/Docker.DotNet/DockerClient.cs @@ -26,7 +26,7 @@ internal DockerClient( _clientOptions = clientOptions; _hijack = hijack; - Options = clientOptions; + Options = clientOptions; System = new SystemOperations(this); Containers = new ContainerOperations(this); Images = new ImageOperations(this);