Skip to content

Commit 933d7c3

Browse files
committed
Added abstraction for creation of HTTP clients.
1 parent 84ceb0d commit 933d7c3

File tree

7 files changed

+34
-6
lines changed

7 files changed

+34
-6
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,10 @@ Responsible for defining the operations building the dictionary of parameters us
434434

435435
Responsible for making requests to the authorized services for the purposes of accessing business functionality. This is used by Umbraco solution developers and is described in detail above. Implemented by `AuthorizedServiceCaller`.
436436

437+
#### IAuthorizedServiceHttpClientFactory
438+
439+
Responsible for constructing an HTTP client used for making requests to the authorized service. Implemented by `AuthorizedServiceHttpClientFactory`.
440+
437441
#### IRefreshTokenParametersBuilder
438442

439443
Responsible for creating a dictionary of parameters provided in the request to retrieve an access token from a refresh token. Implemented by `RefreshTokenParametersBuilder`.

src/Umbraco.AuthorizedServices/AuthorizedServicesComposer.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ private static void RegisterServices(IUmbracoBuilder builder)
4747
builder.Services.AddUnique<IAuthorizedServiceAuthorizer, AuthorizedServiceAuthorizer>();
4848
builder.Services.AddUnique<IAuthorizationUrlBuilder, AuthorizationUrlBuilder>();
4949
builder.Services.AddUnique<IAuthorizedRequestBuilder, AuthorizedRequestBuilder>();
50+
builder.Services.AddUnique<IAuthorizedServiceHttpClientFactory, AuthorizedServiceHttpClientFactory>();
5051

5152
builder.Services.AddUnique<IAuthorizedServiceCaller, AuthorizedServiceCaller>();
5253
builder.Services.AddUnique<IServiceResponseMetadataParser, ServiceResponseMetadataParser>();
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using Umbraco.AuthorizedServices.Configuration;
2+
3+
namespace Umbraco.AuthorizedServices.Services;
4+
5+
/// <summary>
6+
/// Defines operations on creation of HTTP clients for authorized services.
7+
/// </summary>
8+
public interface IAuthorizedServiceHttpClientFactory
9+
{
10+
HttpClient CreateClient(ServiceDetail serviceDetail, string path, HttpMethod httpMethod);
11+
}

src/Umbraco.AuthorizedServices/Services/Implement/AuthorizedServiceCaller.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Umbraco.AuthorizedServices.Services.Implement;
1313

1414
internal sealed class AuthorizedServiceCaller : AuthorizedServiceBase, IAuthorizedServiceCaller
1515
{
16-
private readonly IHttpClientFactory _httpClientFactory;
16+
private readonly IAuthorizedServiceHttpClientFactory _httpClientFactory;
1717
private readonly JsonSerializerFactory _jsonSerializerFactory;
1818
private readonly IAuthorizedRequestBuilder _authorizedRequestBuilder;
1919
private readonly IRefreshTokenParametersBuilder _refreshTokenParametersBuilder;
@@ -30,7 +30,7 @@ public AuthorizedServiceCaller(
3030
IAuthorizationRequestSender authorizationRequestSender,
3131
ILogger<AuthorizedServiceCaller> logger,
3232
IOptionsMonitor<ServiceDetail> serviceDetailOptions,
33-
IHttpClientFactory httpClientFactory,
33+
IAuthorizedServiceHttpClientFactory httpClientFactory,
3434
JsonSerializerFactory jsonSerializerFactory,
3535
IAuthorizedRequestBuilder authorizedRequestBuilder,
3636
IRefreshTokenParametersBuilder refreshTokenParametersBuilder,
@@ -100,8 +100,6 @@ public async Task<Attempt<AuthorizedServiceResponse<string>>> SendRequestRawAsyn
100100
{
101101
ServiceDetail serviceDetail = GetServiceDetail(serviceAlias);
102102

103-
HttpClient httpClient = _httpClientFactory.CreateClient();
104-
105103
Attempt<HttpRequestMessage?> requestMessageAttempt = await CreateHttpRequestMessage(serviceDetail, path, httpMethod, requestContent);
106104
if (!requestMessageAttempt.Success)
107105
{
@@ -110,6 +108,8 @@ public async Task<Attempt<AuthorizedServiceResponse<string>>> SendRequestRawAsyn
110108
requestMessageAttempt.Exception!)!;
111109
}
112110

111+
HttpClient httpClient = _httpClientFactory.CreateClient(serviceDetail, path, httpMethod);
112+
113113
HttpResponseMessage response = await httpClient.SendAsync(requestMessageAttempt.Result!);
114114

115115
ServiceResponseMetadata serviceMetadata = _serviceResponseMetadataParser.ParseMetadata(response);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Umbraco.AuthorizedServices.Configuration;
2+
3+
namespace Umbraco.AuthorizedServices.Services.Implement;
4+
5+
internal sealed class AuthorizedServiceHttpClientFactory : IAuthorizedServiceHttpClientFactory
6+
{
7+
private readonly IHttpClientFactory _httpClientFactory;
8+
9+
public AuthorizedServiceHttpClientFactory(IHttpClientFactory httpClientFactory) => _httpClientFactory = httpClientFactory;
10+
11+
public HttpClient CreateClient(ServiceDetail serviceDetail, string path, HttpMethod httpMethod) => _httpClientFactory.CreateClient();
12+
}

tests/Umbraco.AuthorizedServices.Tests/Services/AuthorizedServiceCallerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ private AuthorizedServiceCaller CreateService(
376376
authorizationRequestSenderMock.Object,
377377
new NullLogger<AuthorizedServiceCaller>(),
378378
optionsMonitorServiceDetailMock.Object,
379-
new TestHttpClientFactory(statusCode, responseContent),
379+
new AuthorizedServiceHttpClientFactory(new TestHttpClientFactory(statusCode, responseContent)),
380380
factory,
381381
new AuthorizedRequestBuilder(factory),
382382
new RefreshTokenParametersBuilder(),

version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json",
3-
"version": "10.1.1",
3+
"version": "10.2.0",
44
"assemblyVersion": {
55
"precision": "build"
66
},

0 commit comments

Comments
 (0)