60 lines
2.4 KiB
C#
60 lines
2.4 KiB
C#
using Core.Cerberos.External.Clients;
|
|
using Core.Cerberos.External.GatewayConfigurations;
|
|
using Core.Cerberos.External.Helpers.Token;
|
|
using Lib.Architecture.BuildingBlocks;
|
|
using Microsoft.AspNetCore.Authentication;
|
|
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 handler = new AuthenticatedHttpClientHandler(tokenProvider)
|
|
{
|
|
InnerHandler = new HttpClientHandler() // Setting the InnerHandler manually
|
|
};
|
|
return handler;
|
|
});
|
|
|
|
var cerberosServiceApiUrl = GatewaySettingsConfigurations.GetCerberosServiceAPIEndpoint().Endpoint.Url;
|
|
|
|
// Register ICerberosServiceClient with the manually created HttpClient
|
|
services.AddScoped<ICerberosServiceClient>(provider =>
|
|
{
|
|
var handler = provider.GetRequiredService<AuthenticatedHttpClientHandler>();
|
|
var httpClient = new HttpClient(handler)
|
|
{
|
|
BaseAddress = new Uri(cerberosServiceApiUrl),
|
|
Timeout = TimeSpan.FromMinutes(1)
|
|
};
|
|
return RestService.For<ICerberosServiceClient>(httpClient);
|
|
});
|
|
|
|
services.AddScoped<IAuthenticationService, AuthenticationService>();
|
|
|
|
return services;
|
|
}
|
|
}
|
|
}
|