68 lines
2.9 KiB
C#
68 lines
2.9 KiB
C#
using Core.Cerberos.Adapters.Contracts;
|
|
using Core.Cerberos.Adapters.Handlers;
|
|
using Core.Cerberos.Adapters.TokenProvider;
|
|
using Core.Cerberos.External.GatewayConfigurations;
|
|
using LSA.Dashboard.External.Clients.Dashboard;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Refit;
|
|
|
|
namespace Core.Cerberos.External.ClientConfiguration
|
|
{
|
|
public static class RegisterClientConfiguration
|
|
{
|
|
public static IServiceCollection RegisterExternalLayer(this IServiceCollection services, IConfiguration configuration)
|
|
{
|
|
var gatewayConfiguration = new GatewayConfiguration();
|
|
var gatewaySettingsConfiguration = new GatewaySettingsConfigurations(configuration);
|
|
|
|
// Register GatewayConfiguration as a singleton
|
|
services.AddSingleton(gatewayConfiguration);
|
|
|
|
// Register IHttpContextAccessor
|
|
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
|
|
|
|
// Register ITokenProvider
|
|
services.AddSingleton<ITokenProvider, HttpContextTokenProvider>();
|
|
|
|
// Register the custom AuthenticatedHttpClientHandler
|
|
services.AddTransient(provider =>
|
|
{
|
|
var tokenProvider = provider.GetRequiredService<ITokenProvider>();
|
|
var trackingIdHandler = new TrackingMechanismExtension(provider.GetRequiredService<IHttpContextAccessor>());
|
|
|
|
var handler = new AuthenticatedHttpClientHandler(tokenProvider)
|
|
{
|
|
InnerHandler = new HttpClientHandler() // Setting the InnerHandler manually
|
|
};
|
|
|
|
// Attach the TrackingIdHandler as the outermost handler
|
|
trackingIdHandler.InnerHandler = handler;
|
|
|
|
return handler;
|
|
});
|
|
|
|
var cerberosServiceApiUrl = GatewaySettingsConfigurations.GetCerberosServiceAPIEndpoint().Endpoint.Url;
|
|
|
|
// Register IDashBoardServiceClient with the manually created HttpClient
|
|
services.AddScoped(provider =>
|
|
{
|
|
var handler = provider.GetRequiredService<AuthenticatedHttpClientHandler>();
|
|
var handlerTrackingId = new TrackingMechanismExtension(provider.GetRequiredService<IHttpContextAccessor>()); // Using the TrackingIdHandler here
|
|
// Chain the handlers
|
|
handlerTrackingId.InnerHandler = handler; //chaining
|
|
|
|
var httpClient = new HttpClient(handlerTrackingId)
|
|
{
|
|
BaseAddress = new Uri(cerberosServiceApiUrl),
|
|
Timeout = TimeSpan.FromMinutes(1)
|
|
};
|
|
return RestService.For<ICerberosServiceClient>(httpClient);
|
|
});
|
|
|
|
return services;
|
|
}
|
|
}
|
|
}
|