You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
2.1 KiB
52 lines
2.1 KiB
using System.Linq;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Logging;
|
|
using Volo.Abp;
|
|
using Yarp.ReverseProxy.Configuration;
|
|
|
|
namespace EShopOnAbp.Shared.Hosting.Gateways;
|
|
|
|
public static class YarpSwaggerUIBuilderExtensions
|
|
{
|
|
public static IApplicationBuilder UseSwaggerUIWithYarp(this IApplicationBuilder app,
|
|
ApplicationInitializationContext context)
|
|
{
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI(options =>
|
|
{
|
|
var configuration = context.ServiceProvider.GetRequiredService<IConfiguration>();
|
|
var logger = context.ServiceProvider.GetRequiredService<ILogger<ApplicationInitializationContext>>();
|
|
var proxyConfigProvider = context.ServiceProvider.GetRequiredService<IProxyConfigProvider>();
|
|
var yarpConfig = proxyConfigProvider.GetConfig();
|
|
|
|
var routedClusters = yarpConfig.Clusters
|
|
.SelectMany(t => t.Destinations,
|
|
(clusterId, destination) => new {clusterId.ClusterId, destination.Value});
|
|
|
|
var groupedClusters = routedClusters
|
|
.GroupBy(q => q.Value.Address)
|
|
.Select(t => t.First())
|
|
.Distinct()
|
|
.ToList();
|
|
|
|
foreach (var clusterGroup in groupedClusters)
|
|
{
|
|
var routeConfig = yarpConfig.Routes.FirstOrDefault(q =>
|
|
q.ClusterId == clusterGroup.ClusterId);
|
|
if (routeConfig == null)
|
|
{
|
|
logger.LogWarning($"Swagger UI: Couldn't find route configuration for {clusterGroup.ClusterId}...");
|
|
continue;
|
|
}
|
|
|
|
options.SwaggerEndpoint($"{clusterGroup.Value.Address}/swagger/v1/swagger.json", $"{routeConfig.RouteId} API");
|
|
options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
|
|
options.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]);
|
|
}
|
|
});
|
|
|
|
return app;
|
|
}
|
|
}
|