enable websocket on netstandard (#899)

* enable websocket on netstandard

* happy build
This commit is contained in:
Boshi Lian
2022-06-28 15:17:35 -07:00
committed by GitHub
parent ef90174bd8
commit 56646aeed3
5 changed files with 52 additions and 5 deletions

View File

@@ -0,0 +1,28 @@
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
namespace k8s;
public partial class Kubernetes
{
partial void BeforeRequest()
{
System.Net.ServicePointManager.ServerCertificateValidationCallback += ServerCertificateValidationCallback;
}
partial void AfterRequest()
{
System.Net.ServicePointManager.ServerCertificateValidationCallback -= ServerCertificateValidationCallback;
}
private bool ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (SkipTlsVerify)
{
return true;
}
return CertificateValidationCallBack(sender, CaCerts, certificate, chain, sslPolicyErrors);
}
}

View File

@@ -28,6 +28,18 @@
<Compile Include="..\KubernetesClient\KubernetesClientConfiguration.cs" /> <Compile Include="..\KubernetesClient\KubernetesClientConfiguration.cs" />
<Compile Include="..\KubernetesClient\KubernetesException.cs" /> <Compile Include="..\KubernetesClient\KubernetesException.cs" />
<Compile Include="..\KubernetesClient\ChannelIndex.cs" />
<Compile Include="..\KubernetesClient\IStreamDemuxer.cs" />
<Compile Include="..\KubernetesClient\ByteBuffer.cs" />
<Compile Include="..\KubernetesClient\StreamDemuxer.cs" />
<Compile Include="..\KubernetesClient\MuxedStream.cs" />
<Compile Include="..\KubernetesClient\StreamType.cs" />
<Compile Include="..\KubernetesClient\IKubernetes.WebSocket.cs" />
<Compile Include="..\KubernetesClient\Kubernetes.WebSocket.cs" />
<Compile Include="..\KubernetesClient\WebSocketBuilder.cs" />
<Compile Include="..\KubernetesClient\WebSocketProtocol.cs" />
<Compile Include="..\KubernetesClient\Utilities.cs" />
<Compile Include="..\KubernetesClient\Exceptions\KubeConfigException.cs" /> <Compile Include="..\KubernetesClient\Exceptions\KubeConfigException.cs" />
<Compile Include="..\KubernetesClient\Exceptions\KubernetesClientException.cs" /> <Compile Include="..\KubernetesClient\Exceptions\KubernetesClientException.cs" />

View File

@@ -23,9 +23,7 @@ namespace k8s
Initialize(); Initialize();
ValidateConfig(config); ValidateConfig(config);
CaCerts = config.SslCaCerts; CaCerts = config.SslCaCerts;
#if NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
SkipTlsVerify = config.SkipTlsVerify; SkipTlsVerify = config.SkipTlsVerify;
#endif
CreateHttpClient(handlers, config); CreateHttpClient(handlers, config);
InitializeFromConfig(config); InitializeFromConfig(config);
HttpClientTimeout = config.HttpClientTimeout; HttpClientTimeout = config.HttpClientTimeout;
@@ -102,11 +100,9 @@ namespace k8s
private X509Certificate2Collection CaCerts { get; } private X509Certificate2Collection CaCerts { get; }
#if NETSTANDARD2_1_OR_GREATER || NET5_0_OR_GREATER
private X509Certificate2 ClientCert { get; } private X509Certificate2 ClientCert { get; }
private bool SkipTlsVerify { get; } private bool SkipTlsVerify { get; }
#endif
// NOTE: this method replicates the logic that the base ServiceClient uses except that it doesn't insert the RetryDelegatingHandler // NOTE: this method replicates the logic that the base ServiceClient uses except that it doesn't insert the RetryDelegatingHandler
// and it does insert the WatcherDelegatingHandler. we don't want the RetryDelegatingHandler because it has a very broad definition // and it does insert the WatcherDelegatingHandler. we don't want the RetryDelegatingHandler because it has a very broad definition

View File

@@ -210,6 +210,9 @@ namespace k8s
cancellationToken); cancellationToken);
} }
partial void BeforeRequest();
partial void AfterRequest();
protected async Task<WebSocket> StreamConnectAsync(Uri uri, string webSocketSubProtocol = null, Dictionary<string, List<string>> customHeaders = null, CancellationToken cancellationToken = default) protected async Task<WebSocket> StreamConnectAsync(Uri uri, string webSocketSubProtocol = null, Dictionary<string, List<string>> customHeaders = null, CancellationToken cancellationToken = default)
{ {
if (uri == null) if (uri == null)
@@ -280,6 +283,7 @@ namespace k8s
WebSocket webSocket = null; WebSocket webSocket = null;
try try
{ {
BeforeRequest();
webSocket = await webSocketBuilder.BuildAndConnectAsync(uri, CancellationToken.None) webSocket = await webSocketBuilder.BuildAndConnectAsync(uri, CancellationToken.None)
.ConfigureAwait(false); .ConfigureAwait(false);
} }
@@ -335,6 +339,10 @@ namespace k8s
{ {
throw; throw;
} }
finally
{
AfterRequest();
}
return webSocket; return webSocket;
} }

View File

@@ -36,20 +36,23 @@ namespace k8s
public WebSocketBuilder ExpectServerCertificate(X509Certificate2Collection serverCertificate) public WebSocketBuilder ExpectServerCertificate(X509Certificate2Collection serverCertificate)
{ {
#if NETSTANDARD2_1 || NET5_0_OR_GREATER
Options.RemoteCertificateValidationCallback Options.RemoteCertificateValidationCallback
= (sender, certificate, chain, sslPolicyErrors) => = (sender, certificate, chain, sslPolicyErrors) =>
{ {
return Kubernetes.CertificateValidationCallBack(sender, serverCertificate, certificate, chain, sslPolicyErrors); return Kubernetes.CertificateValidationCallBack(sender, serverCertificate, certificate, chain, sslPolicyErrors);
}; };
#endif
return this; return this;
} }
public WebSocketBuilder SkipServerCertificateValidation() public WebSocketBuilder SkipServerCertificateValidation()
{ {
#if NETSTANDARD2_1 || NET5_0_OR_GREATER
Options.RemoteCertificateValidationCallback Options.RemoteCertificateValidationCallback
= (sender, certificate, chain, sslPolicyErrors) => true; = (sender, certificate, chain, sslPolicyErrors) => true;
#endif
return this; return this;
} }