Exemple #1
0
 public ReRouteBuilder WithServiceProviderConfiguraion(ServiceProviderConfiguraion serviceProviderConfiguraion)
 {
     _serviceProviderConfiguraion = serviceProviderConfiguraion;
     return(this);
 }
Exemple #2
0
        private async Task <ReRoute> SetUpReRoute(FileReRoute fileReRoute, FileGlobalConfiguration globalConfiguration)
        {
            var globalRequestIdConfiguration = !string.IsNullOrEmpty(globalConfiguration?.RequestIdKey);

            var upstreamTemplate = BuildUpstreamTemplate(fileReRoute);

            var isAuthenticated = !string.IsNullOrEmpty(fileReRoute.AuthenticationOptions?.Provider);

            var isAuthorised = fileReRoute.RouteClaimsRequirement?.Count > 0;

            var isCached = fileReRoute.FileCacheOptions.TtlSeconds > 0;

            var requestIdKey = globalRequestIdConfiguration
                ? globalConfiguration.RequestIdKey
                : fileReRoute.RequestIdKey;

            var useServiceDiscovery = !string.IsNullOrEmpty(fileReRoute.ServiceName) &&
                                      !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.UpstreamTemplate}{fileReRoute.UpstreamHttpMethod}";

            ReRoute reRoute;

            var serviceProviderPort = globalConfiguration?.ServiceDiscoveryProvider?.Port ?? 0;

            var serviceProviderConfiguration = new ServiceProviderConfiguraion(fileReRoute.ServiceName,
                                                                               fileReRoute.DownstreamHost, fileReRoute.DownstreamPort, useServiceDiscovery,
                                                                               globalConfiguration?.ServiceDiscoveryProvider?.Provider, globalConfiguration?.ServiceDiscoveryProvider?.Host,
                                                                               serviceProviderPort);

            if (isAuthenticated)
            {
                var authOptionsForRoute = new AuthenticationOptions(fileReRoute.AuthenticationOptions.Provider,
                                                                    fileReRoute.AuthenticationOptions.ProviderRootUrl, fileReRoute.AuthenticationOptions.ScopeName,
                                                                    fileReRoute.AuthenticationOptions.RequireHttps, fileReRoute.AuthenticationOptions.AdditionalScopes,
                                                                    fileReRoute.AuthenticationOptions.ScopeSecret);

                var claimsToHeaders = GetAddThingsToRequest(fileReRoute.AddHeadersToRequest);
                var claimsToClaims  = GetAddThingsToRequest(fileReRoute.AddClaimsToRequest);
                var claimsToQueries = GetAddThingsToRequest(fileReRoute.AddQueriesToRequest);

                reRoute = new ReRoute(new DownstreamPathTemplate(fileReRoute.DownstreamPathTemplate),
                                      fileReRoute.UpstreamTemplate,
                                      fileReRoute.UpstreamHttpMethod, upstreamTemplate, isAuthenticated,
                                      authOptionsForRoute, claimsToHeaders, claimsToClaims,
                                      fileReRoute.RouteClaimsRequirement, isAuthorised, claimsToQueries,
                                      requestIdKey, isCached, new CacheOptions(fileReRoute.FileCacheOptions.TtlSeconds)
                                      , fileReRoute.DownstreamScheme,
                                      fileReRoute.LoadBalancer, fileReRoute.DownstreamHost, fileReRoute.DownstreamPort, loadBalancerKey,
                                      serviceProviderConfiguration);
            }
            else
            {
                reRoute = new ReRoute(new DownstreamPathTemplate(fileReRoute.DownstreamPathTemplate),
                                      fileReRoute.UpstreamTemplate,
                                      fileReRoute.UpstreamHttpMethod, upstreamTemplate, isAuthenticated,
                                      null, new List <ClaimToThing>(), new List <ClaimToThing>(),
                                      fileReRoute.RouteClaimsRequirement, isAuthorised, new List <ClaimToThing>(),
                                      requestIdKey, isCached, new CacheOptions(fileReRoute.FileCacheOptions.TtlSeconds),
                                      fileReRoute.DownstreamScheme,
                                      fileReRoute.LoadBalancer, fileReRoute.DownstreamHost, fileReRoute.DownstreamPort, loadBalancerKey,
                                      serviceProviderConfiguration);
            }

            var loadBalancer = await _loadBalanceFactory.Get(reRoute);

            _loadBalancerHouse.Add(reRoute.LoadBalancerKey, loadBalancer);
            return(reRoute);
        }
 private void GivenTheReRoute(ServiceProviderConfiguraion serviceConfig)
 {
     _serviceConfig = serviceConfig;
 }