Skip to content

Commit 0bea3cf

Browse files
committed
WIP Try using CredentialCache
1 parent 86be042 commit 0bea3cf

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

LibGit2Sharp/Core/ManagedHttpSmartSubtransport.cs

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,26 @@ private class ManagedHttpSmartSubtransportStream : SmartSubtransportStream
4949
{
5050
private static int MAX_REDIRECTS = 7;
5151

52+
private static readonly HttpClientHandler httpClientHandler;
53+
private static readonly CredentialCache credentialCache;
54+
5255
private MemoryStream postBuffer = new MemoryStream();
5356
private HttpResponseMessage response;
5457
private Stream responseStream;
5558

59+
static ManagedHttpSmartSubtransportStream()
60+
{
61+
httpClientHandler = new HttpClientHandler();
62+
63+
httpClientHandler.SslProtocols |= SslProtocols.Tls12;
64+
//httpClientHandler.ServerCertificateCustomValidationCallback = CertificateValidationProxy;
65+
66+
httpClientHandler.AllowAutoRedirect = false;
67+
68+
credentialCache = new CredentialCache();
69+
httpClientHandler.Credentials = credentialCache;
70+
}
71+
5672
public ManagedHttpSmartSubtransportStream(ManagedHttpSmartSubtransport parent, string endpointUrl, bool isPost, string contentType)
5773
: base(parent)
5874
{
@@ -63,7 +79,7 @@ public ManagedHttpSmartSubtransportStream(ManagedHttpSmartSubtransport parent, s
6379

6480
private HttpClient CreateHttpClient(HttpMessageHandler handler)
6581
{
66-
return new HttpClient(handler)
82+
return new HttpClient(handler, false)
6783
{
6884
DefaultRequestHeaders =
6985
{
@@ -73,17 +89,6 @@ private HttpClient CreateHttpClient(HttpMessageHandler handler)
7389
};
7490
}
7591

76-
private HttpClientHandler CreateClientHandler()
77-
{
78-
var httpClientHandler = new HttpClientHandler();
79-
httpClientHandler.SslProtocols |= SslProtocols.Tls12;
80-
httpClientHandler.ServerCertificateCustomValidationCallback = CertificateValidationProxy;
81-
82-
httpClientHandler.AllowAutoRedirect = false;
83-
84-
return httpClientHandler;
85-
}
86-
8792
private Uri EndpointUrl { get; set; }
8893

8994
private bool IsPost { get; set; }
@@ -157,16 +162,12 @@ private HttpRequestMessage CreateRequest(Uri endpointUrl, bool isPost)
157162

158163
private HttpResponseMessage GetResponseWithRedirects()
159164
{
160-
ICredentials credentials = null;
161165
var url = EndpointUrl;
162166
int retries;
163167

164168
for (retries = 0; ; retries++)
165169
{
166-
var httpClientHandler = CreateClientHandler();
167-
httpClientHandler.Credentials = credentials;
168-
169-
using (var httpClient = this.CreateHttpClient(httpClientHandler))
170+
using (var httpClient = CreateHttpClient(httpClientHandler))
170171
{
171172
var request = CreateRequest(url, IsPost);
172173

@@ -198,14 +199,15 @@ private HttpResponseMessage GetResponseWithRedirects()
198199
throw new InvalidOperationException("authentication cancelled");
199200
}
200201

202+
var scheme = response.Headers.WwwAuthenticate.First().Scheme;
203+
201204
if (cred is DefaultCredentials)
202205
{
203-
credentials = CredentialCache.DefaultNetworkCredentials;
206+
credentialCache.Add(url, scheme, CredentialCache.DefaultNetworkCredentials);
204207
}
205-
else if (cred is UsernamePasswordCredentials)
208+
else if (cred is UsernamePasswordCredentials userpass)
206209
{
207-
UsernamePasswordCredentials userpass = (UsernamePasswordCredentials)cred;
208-
credentials = new NetworkCredential(userpass.Username, userpass.Password);
210+
credentialCache.Add(url, scheme, new NetworkCredential(userpass.Username, userpass.Password));
209211
}
210212

211213
continue;

0 commit comments

Comments
 (0)