mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-22 06:22:50 +08:00
more refactoring
This commit is contained in:
parent
dbe28d38bc
commit
26ac0fd3f4
@ -90,8 +90,6 @@ namespace Ocelot.Configuration.Creator
|
|||||||
{
|
{
|
||||||
var globalRequestIdConfiguration = !string.IsNullOrEmpty(globalConfiguration?.RequestIdKey);
|
var globalRequestIdConfiguration = !string.IsNullOrEmpty(globalConfiguration?.RequestIdKey);
|
||||||
|
|
||||||
var upstreamTemplatePattern = BuildUpstreamTemplate(fileReRoute);
|
|
||||||
|
|
||||||
var isAuthenticated = !string.IsNullOrEmpty(fileReRoute.AuthenticationOptions?.Provider);
|
var isAuthenticated = !string.IsNullOrEmpty(fileReRoute.AuthenticationOptions?.Provider);
|
||||||
|
|
||||||
var isAuthorised = fileReRoute.RouteClaimsRequirement?.Count > 0;
|
var isAuthorised = fileReRoute.RouteClaimsRequirement?.Count > 0;
|
||||||
@ -102,15 +100,80 @@ namespace Ocelot.Configuration.Creator
|
|||||||
? globalConfiguration.RequestIdKey
|
? globalConfiguration.RequestIdKey
|
||||||
: fileReRoute.RequestIdKey;
|
: fileReRoute.RequestIdKey;
|
||||||
|
|
||||||
|
var loadBalancerKey = BuildLoadBalancerKey(fileReRoute);
|
||||||
|
|
||||||
|
var upstreamTemplatePattern = BuildUpstreamTemplate(fileReRoute);
|
||||||
|
|
||||||
|
var serviceProviderConfiguration = BuildServiceProviderConfiguration(fileReRoute, globalConfiguration);
|
||||||
|
|
||||||
|
var authOptionsForRoute = BuildAuthenticationOptions(fileReRoute);
|
||||||
|
|
||||||
|
var claimsToHeaders = BuildAddThingsToRequest(fileReRoute.AddHeadersToRequest);
|
||||||
|
|
||||||
|
var claimsToClaims = BuildAddThingsToRequest(fileReRoute.AddClaimsToRequest);
|
||||||
|
|
||||||
|
var claimsToQueries = BuildAddThingsToRequest(fileReRoute.AddQueriesToRequest);
|
||||||
|
|
||||||
|
var reRoute = new ReRouteBuilder()
|
||||||
|
.WithDownstreamPathTemplate(fileReRoute.DownstreamPathTemplate)
|
||||||
|
.WithUpstreamPathTemplate(fileReRoute.UpstreamPathTemplate)
|
||||||
|
.WithUpstreamHttpMethod(fileReRoute.UpstreamHttpMethod)
|
||||||
|
.WithUpstreamTemplatePattern(upstreamTemplatePattern)
|
||||||
|
.WithIsAuthenticated(isAuthenticated)
|
||||||
|
.WithAuthenticationOptions(authOptionsForRoute)
|
||||||
|
.WithClaimsToHeaders(claimsToHeaders)
|
||||||
|
.WithClaimsToClaims(claimsToClaims)
|
||||||
|
.WithRouteClaimsRequirement(fileReRoute.RouteClaimsRequirement)
|
||||||
|
.WithIsAuthorised(isAuthorised)
|
||||||
|
.WithClaimsToQueries(claimsToQueries)
|
||||||
|
.WithRequestIdKey(requestIdKey)
|
||||||
|
.WithIsCached(isCached)
|
||||||
|
.WithCacheOptions(new CacheOptions(fileReRoute.FileCacheOptions.TtlSeconds))
|
||||||
|
.WithDownstreamScheme(fileReRoute.DownstreamScheme)
|
||||||
|
.WithLoadBalancer(fileReRoute.LoadBalancer)
|
||||||
|
.WithDownstreamHost(fileReRoute.DownstreamHost)
|
||||||
|
.WithDownstreamPort(fileReRoute.DownstreamPort)
|
||||||
|
.WithLoadBalancerKey(loadBalancerKey)
|
||||||
|
.WithServiceProviderConfiguraion(serviceProviderConfiguration)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
await SetupLoadBalancer(reRoute);
|
||||||
|
return reRoute;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string BuildLoadBalancerKey(FileReRoute fileReRoute)
|
||||||
|
{
|
||||||
|
//note - not sure if this is the correct key, but this is probably the only unique key i can think of given my poor brain
|
||||||
|
var loadBalancerKey = $"{fileReRoute.UpstreamPathTemplate}{fileReRoute.UpstreamHttpMethod}";
|
||||||
|
return loadBalancerKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
private AuthenticationOptions BuildAuthenticationOptions(FileReRoute fileReRoute)
|
||||||
|
{
|
||||||
|
return new AuthenticationOptionsBuilder()
|
||||||
|
.WithProvider(fileReRoute.AuthenticationOptions?.Provider)
|
||||||
|
.WithProviderRootUrl(fileReRoute.AuthenticationOptions?.ProviderRootUrl)
|
||||||
|
.WithScopeName(fileReRoute.AuthenticationOptions?.ScopeName)
|
||||||
|
.WithRequireHttps(fileReRoute.AuthenticationOptions.RequireHttps)
|
||||||
|
.WithAdditionalScopes(fileReRoute.AuthenticationOptions?.AdditionalScopes)
|
||||||
|
.WithScopeSecret(fileReRoute.AuthenticationOptions?.ScopeSecret)
|
||||||
|
.Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task SetupLoadBalancer(ReRoute reRoute)
|
||||||
|
{
|
||||||
|
var loadBalancer = await _loadBalanceFactory.Get(reRoute);
|
||||||
|
_loadBalancerHouse.Add(reRoute.LoadBalancerKey, loadBalancer);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ServiceProviderConfiguraion BuildServiceProviderConfiguration(FileReRoute fileReRoute, FileGlobalConfiguration globalConfiguration)
|
||||||
|
{
|
||||||
var useServiceDiscovery = !string.IsNullOrEmpty(fileReRoute.ServiceName)
|
var useServiceDiscovery = !string.IsNullOrEmpty(fileReRoute.ServiceName)
|
||||||
&& !string.IsNullOrEmpty(globalConfiguration?.ServiceDiscoveryProvider?.Provider);
|
&& !string.IsNullOrEmpty(globalConfiguration?.ServiceDiscoveryProvider?.Provider);
|
||||||
|
|
||||||
//note - not sure if this is the correct key, but this is probably the only unique key i can think of given my poor brain
|
|
||||||
var loadBalancerKey = $"{fileReRoute.UpstreamPathTemplate}{fileReRoute.UpstreamHttpMethod}";
|
|
||||||
|
|
||||||
var serviceProviderPort = globalConfiguration?.ServiceDiscoveryProvider?.Port ?? 0;
|
var serviceProviderPort = globalConfiguration?.ServiceDiscoveryProvider?.Port ?? 0;
|
||||||
|
|
||||||
var serviceProviderConfiguration = new ServiceProviderConfiguraionBuilder()
|
return new ServiceProviderConfiguraionBuilder()
|
||||||
.WithServiceName(fileReRoute.ServiceName)
|
.WithServiceName(fileReRoute.ServiceName)
|
||||||
.WithDownstreamHost(fileReRoute.DownstreamHost)
|
.WithDownstreamHost(fileReRoute.DownstreamHost)
|
||||||
.WithDownstreamPort(fileReRoute.DownstreamPort)
|
.WithDownstreamPort(fileReRoute.DownstreamPort)
|
||||||
@ -119,46 +182,6 @@ namespace Ocelot.Configuration.Creator
|
|||||||
.WithServiceDiscoveryProviderHost(globalConfiguration?.ServiceDiscoveryProvider?.Host)
|
.WithServiceDiscoveryProviderHost(globalConfiguration?.ServiceDiscoveryProvider?.Host)
|
||||||
.WithServiceDiscoveryProviderPort(serviceProviderPort)
|
.WithServiceDiscoveryProviderPort(serviceProviderPort)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
var authOptionsForRoute = new AuthenticationOptionsBuilder()
|
|
||||||
.WithProvider(fileReRoute.AuthenticationOptions?.Provider)
|
|
||||||
.WithProviderRootUrl(fileReRoute.AuthenticationOptions?.ProviderRootUrl)
|
|
||||||
.WithScopeName(fileReRoute.AuthenticationOptions?.ScopeName)
|
|
||||||
.WithRequireHttps(fileReRoute.AuthenticationOptions.RequireHttps)
|
|
||||||
.WithAdditionalScopes(fileReRoute.AuthenticationOptions?.AdditionalScopes)
|
|
||||||
.WithScopeSecret(fileReRoute.AuthenticationOptions?.ScopeSecret)
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
var claimsToHeaders = GetAddThingsToRequest(fileReRoute.AddHeadersToRequest);
|
|
||||||
var claimsToClaims = GetAddThingsToRequest(fileReRoute.AddClaimsToRequest);
|
|
||||||
var claimsToQueries = GetAddThingsToRequest(fileReRoute.AddQueriesToRequest);
|
|
||||||
|
|
||||||
var reRoute = new ReRouteBuilder()
|
|
||||||
.WithDownstreamPathTemplate(fileReRoute.DownstreamPathTemplate)
|
|
||||||
.WithUpstreamPathTemplate(fileReRoute.UpstreamPathTemplate)
|
|
||||||
.WithUpstreamHttpMethod(fileReRoute.UpstreamHttpMethod)
|
|
||||||
.WithUpstreamTemplatePattern(upstreamTemplatePattern)
|
|
||||||
.WithIsAuthenticated(isAuthenticated)
|
|
||||||
.WithAuthenticationOptions(authOptionsForRoute)
|
|
||||||
.WithClaimsToHeaders(claimsToHeaders)
|
|
||||||
.WithClaimsToClaims(claimsToClaims)
|
|
||||||
.WithRouteClaimsRequirement(fileReRoute.RouteClaimsRequirement)
|
|
||||||
.WithIsAuthorised(isAuthorised)
|
|
||||||
.WithClaimsToQueries(claimsToQueries)
|
|
||||||
.WithRequestIdKey(requestIdKey)
|
|
||||||
.WithIsCached(isCached)
|
|
||||||
.WithCacheOptions(new CacheOptions(fileReRoute.FileCacheOptions.TtlSeconds))
|
|
||||||
.WithDownstreamScheme(fileReRoute.DownstreamScheme)
|
|
||||||
.WithLoadBalancer(fileReRoute.LoadBalancer)
|
|
||||||
.WithDownstreamHost(fileReRoute.DownstreamHost)
|
|
||||||
.WithDownstreamPort(fileReRoute.DownstreamPort)
|
|
||||||
.WithLoadBalancerKey(loadBalancerKey)
|
|
||||||
.WithServiceProviderConfiguraion(serviceProviderConfiguration)
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
var loadBalancer = await _loadBalanceFactory.Get(reRoute);
|
|
||||||
_loadBalancerHouse.Add(reRoute.LoadBalancerKey, loadBalancer);
|
|
||||||
return reRoute;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private string BuildUpstreamTemplate(FileReRoute reRoute)
|
private string BuildUpstreamTemplate(FileReRoute reRoute)
|
||||||
@ -192,7 +215,7 @@ namespace Ocelot.Configuration.Creator
|
|||||||
return route;
|
return route;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ClaimToThing> GetAddThingsToRequest(Dictionary<string,string> thingBeingAdded)
|
private List<ClaimToThing> BuildAddThingsToRequest(Dictionary<string,string> thingBeingAdded)
|
||||||
{
|
{
|
||||||
var claimsToTHings = new List<ClaimToThing>();
|
var claimsToTHings = new List<ClaimToThing>();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user