mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 20:10:50 +08:00 
			
		
		
		
	more refactoring
This commit is contained in:
		@@ -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>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user