Skip to content

Commit 0fdbca9

Browse files
authored
Merge pull request #60 from umbraco/v15/feature/allow-custom-http-clients
Add support for custom http clients
2 parents 757b2b9 + 44ae036 commit 0fdbca9

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
@@ -442,6 +442,10 @@ Responsible for defining the operations building the dictionary of parameters us
442442

443443
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`.
444444

445+
#### IAuthorizedServiceHttpClientFactory
446+
447+
Responsible for constructing an HTTP client used for making requests to the authorized service. Implemented by `AuthorizedServiceHttpClientFactory`.
448+
445449
#### IRefreshTokenParametersBuilder
446450

447451
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
@@ -43,6 +43,7 @@ private static void RegisterServices(IUmbracoBuilder builder)
4343
builder.Services.AddUnique<IAuthorizedServiceAuthorizer, AuthorizedServiceAuthorizer>();
4444
builder.Services.AddUnique<IAuthorizationUrlBuilder, AuthorizationUrlBuilder>();
4545
builder.Services.AddUnique<IAuthorizedRequestBuilder, AuthorizedRequestBuilder>();
46+
builder.Services.AddUnique<IAuthorizedServiceHttpClientFactory, AuthorizedServiceHttpClientFactory>();
4647

4748
builder.Services.AddUnique<IAuthorizedServiceCaller, AuthorizedServiceCaller>();
4849
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 IJsonSerializer _jsonSerializer;
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
IJsonSerializer jsonSerializer,
3535
IAuthorizedRequestBuilder authorizedRequestBuilder,
3636
IRefreshTokenParametersBuilder refreshTokenParametersBuilder,
@@ -99,8 +99,6 @@ public async Task<Attempt<AuthorizedServiceResponse<string>>> SendRequestRawAsyn
9999
{
100100
ServiceDetail serviceDetail = GetServiceDetail(serviceAlias);
101101

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

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

114114
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
jsonSerializer,
381381
new AuthorizedRequestBuilder(jsonSerializer),
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": "15.1.1",
3+
"version": "15.2.0",
44
"assemblyVersion": {
55
"precision": "build"
66
},

0 commit comments

Comments
 (0)