Skip to content

Commit e3e1da8

Browse files
committed
Migrate IdentityModel PR 598 DuendeArchive/IdentityModel#598
1 parent d7fb2b0 commit e3e1da8

11 files changed

+46
-67
lines changed

identity-model/src/IdentityModel/Client/HttpClientBackchannelAuthenticationExtensions.cs

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Duende Software. All rights reserved.
1+
// Copyright (c) Duende Software. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
33

44
using Duende.IdentityModel.Internal;
@@ -50,10 +50,10 @@ public static async Task<BackchannelAuthenticationResponse> RequestBackchannelAu
5050
clone.Method = HttpMethod.Post;
5151
clone.Prepare();
5252

53-
HttpResponseMessage response;
5453
try
5554
{
56-
response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
55+
using var response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
56+
return await ProtocolResponse.FromHttpResponseAsync<BackchannelAuthenticationResponse>(response).ConfigureAwait();
5757
}
5858
catch (OperationCanceledException)
5959
{
@@ -63,7 +63,5 @@ public static async Task<BackchannelAuthenticationResponse> RequestBackchannelAu
6363
{
6464
return ProtocolResponse.FromException<BackchannelAuthenticationResponse>(ex);
6565
}
66-
67-
return await ProtocolResponse.FromHttpResponseAsync<BackchannelAuthenticationResponse>(response).ConfigureAwait();
6866
}
6967
}

identity-model/src/IdentityModel/Client/HttpClientDeviceFlowExtensions.cs

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Duende Software. All rights reserved.
1+
// Copyright (c) Duende Software. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
33

44
using Duende.IdentityModel.Internal;
@@ -32,10 +32,10 @@ public static async Task<DeviceAuthorizationResponse> RequestDeviceAuthorization
3232
clone.Content = new FormUrlEncodedContent(new List<KeyValuePair<string, string>>());
3333
}
3434

35-
HttpResponseMessage response;
3635
try
3736
{
38-
response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
37+
using var response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
38+
return await ProtocolResponse.FromHttpResponseAsync<DeviceAuthorizationResponse>(response).ConfigureAwait();
3939
}
4040
catch (OperationCanceledException)
4141
{
@@ -45,7 +45,5 @@ public static async Task<DeviceAuthorizationResponse> RequestDeviceAuthorization
4545
{
4646
return ProtocolResponse.FromException<DeviceAuthorizationResponse>(ex);
4747
}
48-
49-
return await ProtocolResponse.FromHttpResponseAsync<DeviceAuthorizationResponse>(response).ConfigureAwait();
5048
}
5149
}

identity-model/src/IdentityModel/Client/HttpClientDiscoveryExtensions.cs

+4-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Duende Software. All rights reserved.
1+
// Copyright (c) Duende Software. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
33

44
using Duende.IdentityModel.Internal;
@@ -104,17 +104,14 @@ public static async Task<DiscoveryDocumentResponse> GetDiscoveryDocumentAsync(th
104104
{
105105
return ProtocolResponse.FromException<DiscoveryDocumentResponse>(jwkResponse.Exception, jwkResponse.Error);
106106
}
107-
else if(jwkResponse.HttpResponse != null)
107+
if(jwkResponse.HttpResponse != null)
108108
{
109109
return await ProtocolResponse.FromHttpResponseAsync<DiscoveryDocumentResponse>(jwkResponse.HttpResponse, $"Error connecting to {jwkUrl}: {jwkResponse.HttpErrorReason}").ConfigureAwait();
110110
}
111111
// If IsError is true, but we have neither an Exception nor an HttpResponse, something very weird is going on
112112
// I don't think it is actually possible for this to occur, but just in case...
113-
else
114-
{
115-
return ProtocolResponse.FromException<DiscoveryDocumentResponse>(
116-
new ArgumentNullException(nameof(jwkResponse.HttpResponse)), $"Unknown error retrieving JWKS - neither an exception nor an HttpResponse is available");
117-
}
113+
return ProtocolResponse.FromException<DiscoveryDocumentResponse>(
114+
new ArgumentNullException(nameof(jwkResponse.HttpResponse)), $"Unknown error retrieving JWKS - neither an exception nor an HttpResponse is available");
118115
}
119116

120117
disco.KeySet = jwkResponse.KeySet;

identity-model/src/IdentityModel/Client/HttpClientDynamicRegistrationExtensions.cs

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Duende Software. All rights reserved.
1+
// Copyright (c) Duende Software. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
33

44
using System.Text;
@@ -35,11 +35,11 @@ public static async Task<DynamicClientRegistrationResponse> RegisterClientAsync(
3535
{
3636
clone.SetBearerToken(request.Token!);
3737
}
38-
39-
HttpResponseMessage response;
38+
4039
try
4140
{
42-
response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
41+
using HttpResponseMessage response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
42+
return await ProtocolResponse.FromHttpResponseAsync<DynamicClientRegistrationResponse>(response).ConfigureAwait();
4343
}
4444
catch (OperationCanceledException)
4545
{
@@ -49,7 +49,5 @@ public static async Task<DynamicClientRegistrationResponse> RegisterClientAsync(
4949
{
5050
return ProtocolResponse.FromException<DynamicClientRegistrationResponse>(ex);
5151
}
52-
53-
return await ProtocolResponse.FromHttpResponseAsync<DynamicClientRegistrationResponse>(response).ConfigureAwait();
5452
}
5553
}

identity-model/src/IdentityModel/Client/HttpClientJsonWebKeySetExtensions.cs

+5-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Duende Software. All rights reserved.
1+
// Copyright (c) Duende Software. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
33

44
using System.Net.Http.Headers;
@@ -40,17 +40,16 @@ public static async Task<JsonWebKeySetResponse> GetJsonWebKeySetAsync(this HttpM
4040
clone.Method = HttpMethod.Get;
4141
clone.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/jwk-set+json"));
4242
clone.Prepare();
43-
44-
HttpResponseMessage response;
45-
43+
4644
try
4745
{
48-
response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
49-
46+
using var response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
5047
if (!response.IsSuccessStatusCode)
5148
{
5249
return await ProtocolResponse.FromHttpResponseAsync<JsonWebKeySetResponse>(response, $"Error connecting to {clone.RequestUri!.AbsoluteUri}: {response.ReasonPhrase}").ConfigureAwait();
5350
}
51+
return await ProtocolResponse.FromHttpResponseAsync<JsonWebKeySetResponse>(response).ConfigureAwait();
52+
5453
}
5554
catch (OperationCanceledException)
5655
{
@@ -60,7 +59,5 @@ public static async Task<JsonWebKeySetResponse> GetJsonWebKeySetAsync(this HttpM
6059
{
6160
return ProtocolResponse.FromException<JsonWebKeySetResponse>(ex, $"Error connecting to {clone.RequestUri!.AbsoluteUri}. {ex.Message}.");
6261
}
63-
64-
return await ProtocolResponse.FromHttpResponseAsync<JsonWebKeySetResponse>(response).ConfigureAwait();
6562
}
6663
}

identity-model/src/IdentityModel/Client/HttpClientPushedAuthorizationExtensions.cs

+5-7
Original file line numberDiff line numberDiff line change
@@ -68,21 +68,19 @@ internal static async Task<PushedAuthorizationResponse> PushAuthorizationAsync(t
6868
{
6969
request.Prepare();
7070
request.Method = HttpMethod.Post;
71-
72-
HttpResponseMessage response;
71+
7372
try
7473
{
75-
response = await client.SendAsync(request, cancellationToken).ConfigureAwait();
74+
using HttpResponseMessage response = await client.SendAsync(request, cancellationToken).ConfigureAwait();
75+
return await ProtocolResponse.FromHttpResponseAsync<PushedAuthorizationResponse>(response).ConfigureAwait();
7676
}
7777
catch (OperationCanceledException)
78-
{
78+
{
7979
throw;
80-
}
80+
}
8181
catch (Exception ex)
8282
{
8383
return ProtocolResponse.FromException<PushedAuthorizationResponse>(ex);
8484
}
85-
86-
return await ProtocolResponse.FromHttpResponseAsync<PushedAuthorizationResponse>(response).ConfigureAwait();
8785
}
8886
}

identity-model/src/IdentityModel/Client/HttpClientTokenIntrospectionExtensions.cs

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Duende Software. All rights reserved.
1+
// Copyright (c) Duende Software. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
33

44
using Duende.IdentityModel.Internal;
@@ -25,11 +25,11 @@ public static async Task<TokenIntrospectionResponse> IntrospectTokenAsync(this H
2525
clone.Parameters.AddRequired(OidcConstants.TokenIntrospectionRequest.Token, request.Token);
2626
clone.Parameters.AddOptional(OidcConstants.TokenIntrospectionRequest.TokenTypeHint, request.TokenTypeHint);
2727
clone.Prepare();
28-
29-
HttpResponseMessage response;
28+
3029
try
3130
{
32-
response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
31+
using var response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
32+
return await ProtocolResponse.FromHttpResponseAsync<TokenIntrospectionResponse>(response).ConfigureAwait();
3333
}
3434
catch (OperationCanceledException)
3535
{
@@ -39,7 +39,5 @@ public static async Task<TokenIntrospectionResponse> IntrospectTokenAsync(this H
3939
{
4040
return ProtocolResponse.FromException<TokenIntrospectionResponse>(ex);
4141
}
42-
43-
return await ProtocolResponse.FromHttpResponseAsync<TokenIntrospectionResponse>(response).ConfigureAwait();
4442
}
4543
}

identity-model/src/IdentityModel/Client/HttpClientTokenRequestExtensions.cs

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Duende Software. All rights reserved.
1+
// Copyright (c) Duende Software. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
33

44
using Duende.IdentityModel.Internal;
@@ -208,25 +208,24 @@ public static async Task<TokenResponse> RequestTokenRawAsync(this HttpMessageInv
208208
return await client.RequestTokenAsync(request, cancellationToken).ConfigureAwait();
209209
}
210210

211-
internal static async Task<TokenResponse> RequestTokenAsync(this HttpMessageInvoker client, ProtocolRequest request, CancellationToken cancellationToken = default)
211+
private static async Task<TokenResponse> RequestTokenAsync(this HttpMessageInvoker client, ProtocolRequest request,
212+
CancellationToken cancellationToken = default)
212213
{
213214
request.Prepare();
214215
request.Method = HttpMethod.Post;
215-
216-
HttpResponseMessage response;
216+
217217
try
218218
{
219-
response = await client.SendAsync(request, cancellationToken).ConfigureAwait();
219+
using var response = await client.SendAsync(request, cancellationToken).ConfigureAwait();
220+
return await ProtocolResponse.FromHttpResponseAsync<TokenResponse>(response).ConfigureAwait();
220221
}
221222
catch (OperationCanceledException)
222-
{
223+
{
223224
throw;
224-
}
225+
}
225226
catch (Exception ex)
226227
{
227228
return ProtocolResponse.FromException<TokenResponse>(ex);
228229
}
229-
230-
return await ProtocolResponse.FromHttpResponseAsync<TokenResponse>(response).ConfigureAwait();
231230
}
232231
}

identity-model/src/IdentityModel/Client/HttpClientTokenRevocationExtensions.cs

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Duende Software. All rights reserved.
1+
// Copyright (c) Duende Software. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
33

44
using Duende.IdentityModel.Internal;
@@ -26,10 +26,10 @@ public static async Task<TokenRevocationResponse> RevokeTokenAsync(this HttpMess
2626
clone.Parameters.AddOptional(OidcConstants.TokenIntrospectionRequest.TokenTypeHint, request.TokenTypeHint);
2727
clone.Prepare();
2828

29-
HttpResponseMessage response;
3029
try
3130
{
32-
response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
31+
using var response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
32+
return await ProtocolResponse.FromHttpResponseAsync<TokenRevocationResponse>(response).ConfigureAwait();
3333
}
3434
catch (OperationCanceledException)
3535
{
@@ -39,7 +39,5 @@ public static async Task<TokenRevocationResponse> RevokeTokenAsync(this HttpMess
3939
{
4040
return ProtocolResponse.FromException<TokenRevocationResponse>(ex);
4141
}
42-
43-
return await ProtocolResponse.FromHttpResponseAsync<TokenRevocationResponse>(response).ConfigureAwait();
4442
}
4543
}

identity-model/src/IdentityModel/Client/HttpClientUserInfoExtensions.cs

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Duende Software. All rights reserved.
1+
// Copyright (c) Duende Software. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
33

44
using Duende.IdentityModel.Internal;
@@ -27,10 +27,13 @@ public static async Task<UserInfoResponse> GetUserInfoAsync(this HttpMessageInvo
2727
clone.SetBearerToken(request.Token!);
2828
clone.Prepare();
2929

30-
HttpResponseMessage response;
3130
try
3231
{
33-
response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
32+
using var response = await client.SendAsync(clone, cancellationToken).ConfigureAwait();
33+
// response.Content can be null in net462 and net471
34+
var skipJsonParsing = response.Content?.Headers.ContentType?.MediaType != "application/json";
35+
return await ProtocolResponse.FromHttpResponseAsync<UserInfoResponse>(response, skipJson: skipJsonParsing).ConfigureAwait();
36+
3437
}
3538
catch (OperationCanceledException)
3639
{
@@ -40,9 +43,5 @@ public static async Task<UserInfoResponse> GetUserInfoAsync(this HttpMessageInvo
4043
{
4144
return ProtocolResponse.FromException<UserInfoResponse>(ex);
4245
}
43-
44-
// response.Content can be null in net462 and net471
45-
var skipJsonParsing = response.Content?.Headers.ContentType?.MediaType != "application/json";
46-
return await ProtocolResponse.FromHttpResponseAsync<UserInfoResponse>(response, skipJson: skipJsonParsing).ConfigureAwait();
4746
}
4847
}

identity-model/test/IdentityModel.Tests/HttpClientExtensions/DiscoveryExtensionsTests.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) Duende Software. All rights reserved.
1+
// Copyright (c) Duende Software. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
33

44
using System.Text.Json;
@@ -344,7 +344,6 @@ public async Task Http_error_at_jwk_with_non_json_content_should_be_handled_corr
344344
Content = new StringContent("not_json")
345345
};
346346
}
347-
348347
return response;
349348
});
350349

0 commit comments

Comments
 (0)