From 9c771bf9e0d8f88c7a3a91159a79311a2be6312e Mon Sep 17 00:00:00 2001 From: TomPallister Date: Mon, 24 Oct 2016 19:32:52 +0100 Subject: [PATCH] added benchmarks back in, renamed data repository and a few other things --- .../Middleware/AuthenticationMiddleware.cs | 16 ++++++++------ .../Middleware/AuthorisationMiddleware.cs | 15 +++++++------ .../Middleware/ClaimsBuilderMiddleware.cs | 15 +++++++------ .../Validator/ConfigurationValidator.cs | 17 +++++++------- .../ServiceCollectionExtensions.cs | 6 ++--- .../DownstreamRouteFinderMiddleware.cs | 12 +++++----- .../DownstreamUrlCreatorMiddleware.cs | 14 ++++++------ .../HttpRequestHeadersBuilderMiddleware.cs | 12 +++++----- .../RequestData}/CannotAddDataError.cs | 2 +- .../RequestData}/CannotFindDataError.cs | 2 +- .../RequestData/HttpDataRepository.cs} | 8 +++---- .../IRequestScopedDataRepository.cs} | 4 ++-- src/Ocelot/Middleware/OcelotMiddleware.cs | 16 +++++++------- .../HttpRequestBuilderMiddleware.cs | 14 ++++++------ .../Middleware/HttpRequesterMiddleware.cs | 14 ++++++------ .../Middleware/HttpResponderMiddleware.cs | 12 +++++----- .../CustomMiddlewareTests.cs | 4 ++-- test/Ocelot.ManualTest/configuration.yaml | 22 +++++++++++++++++++ test/Ocelot.ManualTest/project.json | 6 +++-- .../AuthenticationMiddlewareTests.cs | 6 ++--- .../AuthorisationMiddlewareTests.cs | 6 ++--- .../ClaimsBuilderMiddlewareTests.cs | 9 ++++---- .../DownstreamRouteFinderMiddlewareTests.cs | 6 ++--- .../DownstreamUrlCreatorMiddlewareTests.cs | 6 ++--- ...ttpRequestHeadersBuilderMiddlewareTests.cs | 6 ++--- .../ScopedRequestDataRepositoryTests.cs | 10 ++++----- .../HttpRequestBuilderMiddlewareTests.cs | 6 ++--- .../Requester/HttpRequesterMiddlewareTests.cs | 6 ++--- .../Responder/HttpResponderMiddlewareTests.cs | 6 ++--- 29 files changed, 153 insertions(+), 125 deletions(-) rename src/Ocelot/{ScopedData => Infrastructure/RequestData}/CannotAddDataError.cs (82%) rename src/Ocelot/{ScopedData => Infrastructure/RequestData}/CannotFindDataError.cs (82%) rename src/Ocelot/{ScopedData/ScopedRequestDataRepository.cs => Infrastructure/RequestData/HttpDataRepository.cs} (86%) rename src/Ocelot/{ScopedData/IScopedRequestDataRepository.cs => Infrastructure/RequestData/IRequestScopedDataRepository.cs} (57%) diff --git a/src/Ocelot/Authentication/Middleware/AuthenticationMiddleware.cs b/src/Ocelot/Authentication/Middleware/AuthenticationMiddleware.cs index 9712a6cd..e204a6f4 100644 --- a/src/Ocelot/Authentication/Middleware/AuthenticationMiddleware.cs +++ b/src/Ocelot/Authentication/Middleware/AuthenticationMiddleware.cs @@ -6,31 +6,33 @@ using Ocelot.Authentication.Handler.Factory; using Ocelot.Configuration; using Ocelot.DownstreamRouteFinder; using Ocelot.Errors; +using Ocelot.Infrastructure.RequestData; using Ocelot.Middleware; -using Ocelot.ScopedData; namespace Ocelot.Authentication.Middleware { public class AuthenticationMiddleware : OcelotMiddleware { private readonly RequestDelegate _next; - private readonly IScopedRequestDataRepository _scopedRequestDataRepository; + private readonly IRequestScopedDataRepository _requestScopedDataRepository; private readonly IApplicationBuilder _app; private readonly IAuthenticationHandlerFactory _authHandlerFactory; - public AuthenticationMiddleware(RequestDelegate next, IApplicationBuilder app, - IScopedRequestDataRepository scopedRequestDataRepository, IAuthenticationHandlerFactory authHandlerFactory) - : base(scopedRequestDataRepository) + public AuthenticationMiddleware(RequestDelegate next, + IApplicationBuilder app, + IRequestScopedDataRepository requestScopedDataRepository, + IAuthenticationHandlerFactory authHandlerFactory) + : base(requestScopedDataRepository) { _next = next; - _scopedRequestDataRepository = scopedRequestDataRepository; + _requestScopedDataRepository = requestScopedDataRepository; _authHandlerFactory = authHandlerFactory; _app = app; } public async Task Invoke(HttpContext context) { - var downstreamRoute = _scopedRequestDataRepository.Get("DownstreamRoute"); + var downstreamRoute = _requestScopedDataRepository.Get("DownstreamRoute"); if (downstreamRoute.IsError) { diff --git a/src/Ocelot/Authorisation/Middleware/AuthorisationMiddleware.cs b/src/Ocelot/Authorisation/Middleware/AuthorisationMiddleware.cs index 23c005b6..0a020f8e 100644 --- a/src/Ocelot/Authorisation/Middleware/AuthorisationMiddleware.cs +++ b/src/Ocelot/Authorisation/Middleware/AuthorisationMiddleware.cs @@ -1,4 +1,6 @@ -namespace Ocelot.Authorisation.Middleware +using Ocelot.Infrastructure.RequestData; + +namespace Ocelot.Authorisation.Middleware { using System.Collections.Generic; using System.Threading.Tasks; @@ -6,27 +8,26 @@ using Errors; using Microsoft.AspNetCore.Http; using Ocelot.Middleware; - using ScopedData; public class AuthorisationMiddleware : OcelotMiddleware { private readonly RequestDelegate _next; - private readonly IScopedRequestDataRepository _scopedRequestDataRepository; + private readonly IRequestScopedDataRepository _requestScopedDataRepository; private readonly IAuthoriser _authoriser; public AuthorisationMiddleware(RequestDelegate next, - IScopedRequestDataRepository scopedRequestDataRepository, + IRequestScopedDataRepository requestScopedDataRepository, IAuthoriser authoriser) - : base(scopedRequestDataRepository) + : base(requestScopedDataRepository) { _next = next; - _scopedRequestDataRepository = scopedRequestDataRepository; + _requestScopedDataRepository = requestScopedDataRepository; _authoriser = authoriser; } public async Task Invoke(HttpContext context) { - var downstreamRoute = _scopedRequestDataRepository.Get("DownstreamRoute"); + var downstreamRoute = _requestScopedDataRepository.Get("DownstreamRoute"); if (downstreamRoute.IsError) { diff --git a/src/Ocelot/ClaimsBuilder/Middleware/ClaimsBuilderMiddleware.cs b/src/Ocelot/ClaimsBuilder/Middleware/ClaimsBuilderMiddleware.cs index 570706fa..2ff11c56 100644 --- a/src/Ocelot/ClaimsBuilder/Middleware/ClaimsBuilderMiddleware.cs +++ b/src/Ocelot/ClaimsBuilder/Middleware/ClaimsBuilderMiddleware.cs @@ -1,31 +1,32 @@ -namespace Ocelot.ClaimsBuilder.Middleware +using Ocelot.Infrastructure.RequestData; + +namespace Ocelot.ClaimsBuilder.Middleware { using System.Linq; using System.Threading.Tasks; using DownstreamRouteFinder; using Microsoft.AspNetCore.Http; using Ocelot.Middleware; - using ScopedData; public class ClaimsBuilderMiddleware : OcelotMiddleware { private readonly RequestDelegate _next; private readonly IAddClaimsToRequest _addClaimsToRequest; - private readonly IScopedRequestDataRepository _scopedRequestDataRepository; + private readonly IRequestScopedDataRepository _requestScopedDataRepository; public ClaimsBuilderMiddleware(RequestDelegate next, - IScopedRequestDataRepository scopedRequestDataRepository, + IRequestScopedDataRepository requestScopedDataRepository, IAddClaimsToRequest addClaimsToRequest) - : base(scopedRequestDataRepository) + : base(requestScopedDataRepository) { _next = next; _addClaimsToRequest = addClaimsToRequest; - _scopedRequestDataRepository = scopedRequestDataRepository; + _requestScopedDataRepository = requestScopedDataRepository; } public async Task Invoke(HttpContext context) { - var downstreamRoute = _scopedRequestDataRepository.Get("DownstreamRoute"); + var downstreamRoute = _requestScopedDataRepository.Get("DownstreamRoute"); if (downstreamRoute.Data.ReRoute.ClaimsToClaims.Any()) { diff --git a/src/Ocelot/Configuration/Validator/ConfigurationValidator.cs b/src/Ocelot/Configuration/Validator/ConfigurationValidator.cs index 30b30fc3..494c2aa1 100644 --- a/src/Ocelot/Configuration/Validator/ConfigurationValidator.cs +++ b/src/Ocelot/Configuration/Validator/ConfigurationValidator.cs @@ -65,20 +65,19 @@ namespace Ocelot.Configuration.Validator private ConfigurationValidationResult CheckForDupliateReRoutes(YamlConfiguration configuration) { - var duplicateUpstreamTemplates = configuration.ReRoutes - .Select(r => r.DownstreamTemplate) - .GroupBy(r => r) - .Where(r => r.Count() > 1) - .Select(r => r.Key) - .ToList(); + var hasDupes = configuration.ReRoutes + .GroupBy(x => new { x.UpstreamTemplate, x.UpstreamHttpMethod }).Any(x => x.Skip(1).Any()); - if (duplicateUpstreamTemplates.Count <= 0) + if (!hasDupes) { return new ConfigurationValidationResult(false); } - var errors = duplicateUpstreamTemplates - .Select(duplicateUpstreamTemplate => new DownstreamTemplateAlreadyUsedError(string.Format("Duplicate DownstreamTemplate: {0}", duplicateUpstreamTemplate))) + var dupes = configuration.ReRoutes.GroupBy(x => new { x.UpstreamTemplate, x.UpstreamHttpMethod }) + .Where(x => x.Skip(1).Any()); + + var errors = dupes + .Select(d => new DownstreamTemplateAlreadyUsedError(string.Format("Duplicate DownstreamTemplate: {0}", d.Key.UpstreamTemplate))) .Cast() .ToList(); diff --git a/src/Ocelot/DependencyInjection/ServiceCollectionExtensions.cs b/src/Ocelot/DependencyInjection/ServiceCollectionExtensions.cs index 0b943b19..f9afbfb4 100644 --- a/src/Ocelot/DependencyInjection/ServiceCollectionExtensions.cs +++ b/src/Ocelot/DependencyInjection/ServiceCollectionExtensions.cs @@ -15,10 +15,10 @@ using Ocelot.DownstreamRouteFinder.Finder; using Ocelot.DownstreamRouteFinder.UrlMatcher; using Ocelot.DownstreamUrlCreator.UrlTemplateReplacer; using Ocelot.HeaderBuilder; +using Ocelot.Infrastructure.RequestData; using Ocelot.RequestBuilder.Builder; using Ocelot.Requester; using Ocelot.Responder; -using Ocelot.ScopedData; namespace Ocelot.DependencyInjection { @@ -44,7 +44,7 @@ namespace Ocelot.DependencyInjection public static IServiceCollection AddOcelot(this IServiceCollection services) { - // framework services + // framework services dependency for the identity server middleware services.AddMvcCore().AddJsonFormatters(); services.AddLogging(); @@ -67,7 +67,7 @@ namespace Ocelot.DependencyInjection // see this for why we register this as singleton http://stackoverflow.com/questions/37371264/invalidoperationexception-unable-to-resolve-service-for-type-microsoft-aspnetc // could maybe use a scoped data repository services.AddSingleton(); - services.AddScoped(); + services.AddScoped(); return services; } diff --git a/src/Ocelot/DownstreamRouteFinder/Middleware/DownstreamRouteFinderMiddleware.cs b/src/Ocelot/DownstreamRouteFinder/Middleware/DownstreamRouteFinderMiddleware.cs index e39c3225..4622eec1 100644 --- a/src/Ocelot/DownstreamRouteFinder/Middleware/DownstreamRouteFinderMiddleware.cs +++ b/src/Ocelot/DownstreamRouteFinder/Middleware/DownstreamRouteFinderMiddleware.cs @@ -1,8 +1,8 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Ocelot.DownstreamRouteFinder.Finder; +using Ocelot.Infrastructure.RequestData; using Ocelot.Middleware; -using Ocelot.ScopedData; namespace Ocelot.DownstreamRouteFinder.Middleware { @@ -10,16 +10,16 @@ namespace Ocelot.DownstreamRouteFinder.Middleware { private readonly RequestDelegate _next; private readonly IDownstreamRouteFinder _downstreamRouteFinder; - private readonly IScopedRequestDataRepository _scopedRequestDataRepository; + private readonly IRequestScopedDataRepository _requestScopedDataRepository; public DownstreamRouteFinderMiddleware(RequestDelegate next, IDownstreamRouteFinder downstreamRouteFinder, - IScopedRequestDataRepository scopedRequestDataRepository) - :base(scopedRequestDataRepository) + IRequestScopedDataRepository requestScopedDataRepository) + :base(requestScopedDataRepository) { _next = next; _downstreamRouteFinder = downstreamRouteFinder; - _scopedRequestDataRepository = scopedRequestDataRepository; + _requestScopedDataRepository = requestScopedDataRepository; } public async Task Invoke(HttpContext context) @@ -34,7 +34,7 @@ namespace Ocelot.DownstreamRouteFinder.Middleware return; } - _scopedRequestDataRepository.Add("DownstreamRoute", downstreamRoute.Data); + _requestScopedDataRepository.Add("DownstreamRoute", downstreamRoute.Data); await _next.Invoke(context); } diff --git a/src/Ocelot/DownstreamUrlCreator/Middleware/DownstreamUrlCreatorMiddleware.cs b/src/Ocelot/DownstreamUrlCreator/Middleware/DownstreamUrlCreatorMiddleware.cs index ff19ccfb..691fa6c0 100644 --- a/src/Ocelot/DownstreamUrlCreator/Middleware/DownstreamUrlCreatorMiddleware.cs +++ b/src/Ocelot/DownstreamUrlCreator/Middleware/DownstreamUrlCreatorMiddleware.cs @@ -2,8 +2,8 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Ocelot.DownstreamRouteFinder; using Ocelot.DownstreamUrlCreator.UrlTemplateReplacer; +using Ocelot.Infrastructure.RequestData; using Ocelot.Middleware; -using Ocelot.ScopedData; namespace Ocelot.DownstreamUrlCreator.Middleware { @@ -11,21 +11,21 @@ namespace Ocelot.DownstreamUrlCreator.Middleware { private readonly RequestDelegate _next; private readonly IDownstreamUrlTemplateVariableReplacer _urlReplacer; - private readonly IScopedRequestDataRepository _scopedRequestDataRepository; + private readonly IRequestScopedDataRepository _requestScopedDataRepository; public DownstreamUrlCreatorMiddleware(RequestDelegate next, IDownstreamUrlTemplateVariableReplacer urlReplacer, - IScopedRequestDataRepository scopedRequestDataRepository) - :base(scopedRequestDataRepository) + IRequestScopedDataRepository requestScopedDataRepository) + :base(requestScopedDataRepository) { _next = next; _urlReplacer = urlReplacer; - _scopedRequestDataRepository = scopedRequestDataRepository; + _requestScopedDataRepository = requestScopedDataRepository; } public async Task Invoke(HttpContext context) { - var downstreamRoute = _scopedRequestDataRepository.Get("DownstreamRoute"); + var downstreamRoute = _requestScopedDataRepository.Get("DownstreamRoute"); if (downstreamRoute.IsError) { @@ -41,7 +41,7 @@ namespace Ocelot.DownstreamUrlCreator.Middleware return; } - _scopedRequestDataRepository.Add("DownstreamUrl", downstreamUrl.Data); + _requestScopedDataRepository.Add("DownstreamUrl", downstreamUrl.Data); await _next.Invoke(context); } diff --git a/src/Ocelot/HeaderBuilder/Middleware/HttpRequestHeadersBuilderMiddleware.cs b/src/Ocelot/HeaderBuilder/Middleware/HttpRequestHeadersBuilderMiddleware.cs index a718a7ba..08a0f599 100644 --- a/src/Ocelot/HeaderBuilder/Middleware/HttpRequestHeadersBuilderMiddleware.cs +++ b/src/Ocelot/HeaderBuilder/Middleware/HttpRequestHeadersBuilderMiddleware.cs @@ -2,8 +2,8 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Ocelot.DownstreamRouteFinder; +using Ocelot.Infrastructure.RequestData; using Ocelot.Middleware; -using Ocelot.ScopedData; namespace Ocelot.HeaderBuilder.Middleware { @@ -11,21 +11,21 @@ namespace Ocelot.HeaderBuilder.Middleware { private readonly RequestDelegate _next; private readonly IAddHeadersToRequest _addHeadersToRequest; - private readonly IScopedRequestDataRepository _scopedRequestDataRepository; + private readonly IRequestScopedDataRepository _requestScopedDataRepository; public HttpRequestHeadersBuilderMiddleware(RequestDelegate next, - IScopedRequestDataRepository scopedRequestDataRepository, + IRequestScopedDataRepository requestScopedDataRepository, IAddHeadersToRequest addHeadersToRequest) - : base(scopedRequestDataRepository) + : base(requestScopedDataRepository) { _next = next; _addHeadersToRequest = addHeadersToRequest; - _scopedRequestDataRepository = scopedRequestDataRepository; + _requestScopedDataRepository = requestScopedDataRepository; } public async Task Invoke(HttpContext context) { - var downstreamRoute = _scopedRequestDataRepository.Get("DownstreamRoute"); + var downstreamRoute = _requestScopedDataRepository.Get("DownstreamRoute"); if (downstreamRoute.Data.ReRoute.ClaimsToHeaders.Any()) { diff --git a/src/Ocelot/ScopedData/CannotAddDataError.cs b/src/Ocelot/Infrastructure/RequestData/CannotAddDataError.cs similarity index 82% rename from src/Ocelot/ScopedData/CannotAddDataError.cs rename to src/Ocelot/Infrastructure/RequestData/CannotAddDataError.cs index bc5925e3..806a47e7 100644 --- a/src/Ocelot/ScopedData/CannotAddDataError.cs +++ b/src/Ocelot/Infrastructure/RequestData/CannotAddDataError.cs @@ -1,6 +1,6 @@ using Ocelot.Errors; -namespace Ocelot.ScopedData +namespace Ocelot.Infrastructure.RequestData { public class CannotAddDataError : Error { diff --git a/src/Ocelot/ScopedData/CannotFindDataError.cs b/src/Ocelot/Infrastructure/RequestData/CannotFindDataError.cs similarity index 82% rename from src/Ocelot/ScopedData/CannotFindDataError.cs rename to src/Ocelot/Infrastructure/RequestData/CannotFindDataError.cs index 97ae1540..75a85129 100644 --- a/src/Ocelot/ScopedData/CannotFindDataError.cs +++ b/src/Ocelot/Infrastructure/RequestData/CannotFindDataError.cs @@ -1,6 +1,6 @@ using Ocelot.Errors; -namespace Ocelot.ScopedData +namespace Ocelot.Infrastructure.RequestData { public class CannotFindDataError : Error { diff --git a/src/Ocelot/ScopedData/ScopedRequestDataRepository.cs b/src/Ocelot/Infrastructure/RequestData/HttpDataRepository.cs similarity index 86% rename from src/Ocelot/ScopedData/ScopedRequestDataRepository.cs rename to src/Ocelot/Infrastructure/RequestData/HttpDataRepository.cs index 98e22f68..0f15ca7e 100644 --- a/src/Ocelot/ScopedData/ScopedRequestDataRepository.cs +++ b/src/Ocelot/Infrastructure/RequestData/HttpDataRepository.cs @@ -4,13 +4,13 @@ using Microsoft.AspNetCore.Http; using Ocelot.Errors; using Ocelot.Responses; -namespace Ocelot.ScopedData +namespace Ocelot.Infrastructure.RequestData { - public class ScopedRequestDataRepository : IScopedRequestDataRepository + public class HttpDataRepository : IRequestScopedDataRepository { private readonly IHttpContextAccessor _httpContextAccessor; - public ScopedRequestDataRepository(IHttpContextAccessor httpContextAccessor) + public HttpDataRepository(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } @@ -45,6 +45,6 @@ namespace Ocelot.ScopedData { new CannotFindDataError($"Unable to find data for key: {key}") }); - } + } } } diff --git a/src/Ocelot/ScopedData/IScopedRequestDataRepository.cs b/src/Ocelot/Infrastructure/RequestData/IRequestScopedDataRepository.cs similarity index 57% rename from src/Ocelot/ScopedData/IScopedRequestDataRepository.cs rename to src/Ocelot/Infrastructure/RequestData/IRequestScopedDataRepository.cs index 76630395..f707178c 100644 --- a/src/Ocelot/ScopedData/IScopedRequestDataRepository.cs +++ b/src/Ocelot/Infrastructure/RequestData/IRequestScopedDataRepository.cs @@ -1,8 +1,8 @@ using Ocelot.Responses; -namespace Ocelot.ScopedData +namespace Ocelot.Infrastructure.RequestData { - public interface IScopedRequestDataRepository + public interface IRequestScopedDataRepository { Response Add(string key, T value); Response Get(string key); diff --git a/src/Ocelot/Middleware/OcelotMiddleware.cs b/src/Ocelot/Middleware/OcelotMiddleware.cs index 729493ce..714cebda 100644 --- a/src/Ocelot/Middleware/OcelotMiddleware.cs +++ b/src/Ocelot/Middleware/OcelotMiddleware.cs @@ -1,33 +1,33 @@ using System.Collections.Generic; using Ocelot.Errors; -using Ocelot.ScopedData; +using Ocelot.Infrastructure.RequestData; namespace Ocelot.Middleware { public abstract class OcelotMiddleware { - private readonly IScopedRequestDataRepository _scopedRequestDataRepository; + private readonly IRequestScopedDataRepository _requestScopedDataRepository; - protected OcelotMiddleware(IScopedRequestDataRepository scopedRequestDataRepository) + protected OcelotMiddleware(IRequestScopedDataRepository requestScopedDataRepository) { - _scopedRequestDataRepository = scopedRequestDataRepository; + _requestScopedDataRepository = requestScopedDataRepository; } public void SetPipelineError(List errors) { - _scopedRequestDataRepository.Add("OcelotMiddlewareError", true); - _scopedRequestDataRepository.Add("OcelotMiddlewareErrors", errors); + _requestScopedDataRepository.Add("OcelotMiddlewareError", true); + _requestScopedDataRepository.Add("OcelotMiddlewareErrors", errors); } public bool PipelineError() { - var response = _scopedRequestDataRepository.Get("OcelotMiddlewareError"); + var response = _requestScopedDataRepository.Get("OcelotMiddlewareError"); return response.Data; } public List GetPipelineErrors() { - var response = _scopedRequestDataRepository.Get>("OcelotMiddlewareErrors"); + var response = _requestScopedDataRepository.Get>("OcelotMiddlewareErrors"); return response.Data; } } diff --git a/src/Ocelot/RequestBuilder/Middleware/HttpRequestBuilderMiddleware.cs b/src/Ocelot/RequestBuilder/Middleware/HttpRequestBuilderMiddleware.cs index 3c21413f..2e10c01c 100644 --- a/src/Ocelot/RequestBuilder/Middleware/HttpRequestBuilderMiddleware.cs +++ b/src/Ocelot/RequestBuilder/Middleware/HttpRequestBuilderMiddleware.cs @@ -1,30 +1,30 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; +using Ocelot.Infrastructure.RequestData; using Ocelot.Middleware; using Ocelot.RequestBuilder.Builder; -using Ocelot.ScopedData; namespace Ocelot.RequestBuilder.Middleware { public class HttpRequestBuilderMiddleware : OcelotMiddleware { private readonly RequestDelegate _next; - private readonly IScopedRequestDataRepository _scopedRequestDataRepository; + private readonly IRequestScopedDataRepository _requestScopedDataRepository; private readonly IRequestBuilder _requestBuilder; public HttpRequestBuilderMiddleware(RequestDelegate next, - IScopedRequestDataRepository scopedRequestDataRepository, + IRequestScopedDataRepository requestScopedDataRepository, IRequestBuilder requestBuilder) - :base(scopedRequestDataRepository) + :base(requestScopedDataRepository) { _next = next; - _scopedRequestDataRepository = scopedRequestDataRepository; + _requestScopedDataRepository = requestScopedDataRepository; _requestBuilder = requestBuilder; } public async Task Invoke(HttpContext context) { - var downstreamUrl = _scopedRequestDataRepository.Get("DownstreamUrl"); + var downstreamUrl = _requestScopedDataRepository.Get("DownstreamUrl"); if (downstreamUrl.IsError) { @@ -42,7 +42,7 @@ namespace Ocelot.RequestBuilder.Middleware return; } - _scopedRequestDataRepository.Add("Request", request.Data); + _requestScopedDataRepository.Add("Request", request.Data); await _next.Invoke(context); } diff --git a/src/Ocelot/Requester/Middleware/HttpRequesterMiddleware.cs b/src/Ocelot/Requester/Middleware/HttpRequesterMiddleware.cs index 31f3ea86..d42839c9 100644 --- a/src/Ocelot/Requester/Middleware/HttpRequesterMiddleware.cs +++ b/src/Ocelot/Requester/Middleware/HttpRequesterMiddleware.cs @@ -1,8 +1,8 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; +using Ocelot.Infrastructure.RequestData; using Ocelot.Middleware; using Ocelot.RequestBuilder; -using Ocelot.ScopedData; namespace Ocelot.Requester.Middleware { @@ -10,21 +10,21 @@ namespace Ocelot.Requester.Middleware { private readonly RequestDelegate _next; private readonly IHttpRequester _requester; - private readonly IScopedRequestDataRepository _scopedRequestDataRepository; + private readonly IRequestScopedDataRepository _requestScopedDataRepository; public HttpRequesterMiddleware(RequestDelegate next, IHttpRequester requester, - IScopedRequestDataRepository scopedRequestDataRepository) - :base(scopedRequestDataRepository) + IRequestScopedDataRepository requestScopedDataRepository) + :base(requestScopedDataRepository) { _next = next; _requester = requester; - _scopedRequestDataRepository = scopedRequestDataRepository; + _requestScopedDataRepository = requestScopedDataRepository; } public async Task Invoke(HttpContext context) { - var request = _scopedRequestDataRepository.Get("Request"); + var request = _requestScopedDataRepository.Get("Request"); if (request.IsError) { @@ -40,7 +40,7 @@ namespace Ocelot.Requester.Middleware return; } - _scopedRequestDataRepository.Add("Response", response.Data); + _requestScopedDataRepository.Add("Response", response.Data); } } } \ No newline at end of file diff --git a/src/Ocelot/Responder/Middleware/HttpResponderMiddleware.cs b/src/Ocelot/Responder/Middleware/HttpResponderMiddleware.cs index a9223a5f..4dfc65dd 100644 --- a/src/Ocelot/Responder/Middleware/HttpResponderMiddleware.cs +++ b/src/Ocelot/Responder/Middleware/HttpResponderMiddleware.cs @@ -1,8 +1,8 @@ using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; +using Ocelot.Infrastructure.RequestData; using Ocelot.Middleware; -using Ocelot.ScopedData; namespace Ocelot.Responder.Middleware { @@ -10,18 +10,18 @@ namespace Ocelot.Responder.Middleware { private readonly RequestDelegate _next; private readonly IHttpResponder _responder; - private readonly IScopedRequestDataRepository _scopedRequestDataRepository; + private readonly IRequestScopedDataRepository _requestScopedDataRepository; private readonly IErrorsToHttpStatusCodeMapper _codeMapper; public HttpResponderMiddleware(RequestDelegate next, IHttpResponder responder, - IScopedRequestDataRepository scopedRequestDataRepository, + IRequestScopedDataRepository requestScopedDataRepository, IErrorsToHttpStatusCodeMapper codeMapper) - :base(scopedRequestDataRepository) + :base(requestScopedDataRepository) { _next = next; _responder = responder; - _scopedRequestDataRepository = scopedRequestDataRepository; + _requestScopedDataRepository = requestScopedDataRepository; _codeMapper = codeMapper; } @@ -46,7 +46,7 @@ namespace Ocelot.Responder.Middleware } else { - var response = _scopedRequestDataRepository.Get("Response"); + var response = _requestScopedDataRepository.Get("Response"); await _responder.CreateResponse(context, response.Data); } diff --git a/test/Ocelot.AcceptanceTests/CustomMiddlewareTests.cs b/test/Ocelot.AcceptanceTests/CustomMiddlewareTests.cs index b5b63e5c..50252090 100644 --- a/test/Ocelot.AcceptanceTests/CustomMiddlewareTests.cs +++ b/test/Ocelot.AcceptanceTests/CustomMiddlewareTests.cs @@ -8,8 +8,8 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Ocelot.Configuration.Yaml; +using Ocelot.Infrastructure.RequestData; using Ocelot.Middleware; -using Ocelot.ScopedData; using TestStack.BDDfy; using Xunit; @@ -67,7 +67,7 @@ namespace Ocelot.AcceptanceTests { PreHttpRequesterMiddleware = async (ctx, next) => { - var service = ctx.RequestServices.GetService(); + var service = ctx.RequestServices.GetService(); service.Add("Response", new HttpResponseMessage {Content = new StringContent("PreHttpRequesterMiddleware")}); } }; diff --git a/test/Ocelot.ManualTest/configuration.yaml b/test/Ocelot.ManualTest/configuration.yaml index 04ac7018..3fd2f69d 100644 --- a/test/Ocelot.ManualTest/configuration.yaml +++ b/test/Ocelot.ManualTest/configuration.yaml @@ -1,4 +1,26 @@ ReRoutes: +# the url we are forwarding the request to +- DownstreamTemplate: http://localhost:52876/ +# the path we are listening on for this re route + UpstreamTemplate: /identityserverexample +# the method we are listening for on this re route + UpstreamHttpMethod: Get +# only support identity server at the moment + AuthenticationOptions: + Provider: IdentityServer + ProviderRootUrl: http://localhost:52888 + ScopeName: api + AdditionalScopes: + - openid + - offline_access +#require if using reference tokens + ScopeSecret: secret +# WARNING - will overwrite any headers already in the request with these values + AddHeadersToRequest: + CustomerId: Claims[CustomerId] > value + LocationId: Claims[LocationId] > value + UserType: Claims[sub] > value[0] > | + UserId: Claims[sub] > value[1] > | - DownstreamTemplate: http://www.bbc.co.uk UpstreamTemplate: / UpstreamHttpMethod: Get diff --git a/test/Ocelot.ManualTest/project.json b/test/Ocelot.ManualTest/project.json index 921118bd..39c3457f 100644 --- a/test/Ocelot.ManualTest/project.json +++ b/test/Ocelot.ManualTest/project.json @@ -39,7 +39,8 @@ "preserveCompilationContext": true, "copyToOutput": { "include": [ - "middlewareConfiguration.yaml" + "middlewareConfiguration.yaml", + "configuration.yaml" ] } }, @@ -57,7 +58,8 @@ "Areas/**/Views", "appsettings.json", "web.config", - "middlewareConfiguration.yaml" + "middlewareConfiguration.yaml", + "configuration.yaml" ] }, diff --git a/test/Ocelot.UnitTests/Authentication/AuthenticationMiddlewareTests.cs b/test/Ocelot.UnitTests/Authentication/AuthenticationMiddlewareTests.cs index d8ca67ad..6cc0d120 100644 --- a/test/Ocelot.UnitTests/Authentication/AuthenticationMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/Authentication/AuthenticationMiddlewareTests.cs @@ -11,8 +11,8 @@ using Ocelot.Authentication.Middleware; using Ocelot.Configuration.Builder; using Ocelot.DownstreamRouteFinder; using Ocelot.DownstreamRouteFinder.UrlMatcher; +using Ocelot.Infrastructure.RequestData; using Ocelot.Responses; -using Ocelot.ScopedData; using TestStack.BDDfy; using Xunit; @@ -20,7 +20,7 @@ namespace Ocelot.UnitTests.Authentication { public class AuthenticationMiddlewareTests : IDisposable { - private readonly Mock _scopedRepository; + private readonly Mock _scopedRepository; private readonly Mock _authFactory; private readonly string _url; private readonly TestServer _server; @@ -31,7 +31,7 @@ namespace Ocelot.UnitTests.Authentication public AuthenticationMiddlewareTests() { _url = "http://localhost:51879"; - _scopedRepository = new Mock(); + _scopedRepository = new Mock(); _authFactory = new Mock(); var builder = new WebHostBuilder() .ConfigureServices(x => diff --git a/test/Ocelot.UnitTests/Authorization/AuthorisationMiddlewareTests.cs b/test/Ocelot.UnitTests/Authorization/AuthorisationMiddlewareTests.cs index 134a33b8..3bb5c465 100644 --- a/test/Ocelot.UnitTests/Authorization/AuthorisationMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/Authorization/AuthorisationMiddlewareTests.cs @@ -11,8 +11,8 @@ using Ocelot.Authorisation; using Ocelot.Configuration.Builder; using Ocelot.DownstreamRouteFinder; using Ocelot.DownstreamRouteFinder.UrlMatcher; +using Ocelot.Infrastructure.RequestData; using Ocelot.Responses; -using Ocelot.ScopedData; using TestStack.BDDfy; using Xunit; @@ -22,7 +22,7 @@ namespace Ocelot.UnitTests.Authorization public class AuthorisationMiddlewareTests : IDisposable { - private readonly Mock _scopedRepository; + private readonly Mock _scopedRepository; private readonly Mock _authService; private readonly string _url; private readonly TestServer _server; @@ -33,7 +33,7 @@ namespace Ocelot.UnitTests.Authorization public AuthorisationMiddlewareTests() { _url = "http://localhost:51879"; - _scopedRepository = new Mock(); + _scopedRepository = new Mock(); _authService = new Mock(); var builder = new WebHostBuilder() .ConfigureServices(x => diff --git a/test/Ocelot.UnitTests/ClaimsBuilder/ClaimsBuilderMiddlewareTests.cs b/test/Ocelot.UnitTests/ClaimsBuilder/ClaimsBuilderMiddlewareTests.cs index 210bca83..2fa9605e 100644 --- a/test/Ocelot.UnitTests/ClaimsBuilder/ClaimsBuilderMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/ClaimsBuilder/ClaimsBuilderMiddlewareTests.cs @@ -1,4 +1,6 @@ -namespace Ocelot.UnitTests.ClaimsBuilder +using Ocelot.Infrastructure.RequestData; + +namespace Ocelot.UnitTests.ClaimsBuilder { using System; using System.Collections.Generic; @@ -16,13 +18,12 @@ using Ocelot.DownstreamRouteFinder; using Ocelot.DownstreamRouteFinder.UrlMatcher; using Responses; - using ScopedData; using TestStack.BDDfy; using Xunit; public class ClaimsBuilderMiddlewareTests : IDisposable { - private readonly Mock _scopedRepository; + private readonly Mock _scopedRepository; private readonly Mock _addHeaders; private readonly string _url; private readonly TestServer _server; @@ -33,7 +34,7 @@ public ClaimsBuilderMiddlewareTests() { _url = "http://localhost:51879"; - _scopedRepository = new Mock(); + _scopedRepository = new Mock(); _addHeaders = new Mock(); var builder = new WebHostBuilder() .ConfigureServices(x => diff --git a/test/Ocelot.UnitTests/DownstreamRouteFinder/DownstreamRouteFinderMiddlewareTests.cs b/test/Ocelot.UnitTests/DownstreamRouteFinder/DownstreamRouteFinderMiddlewareTests.cs index b932539a..c8733f65 100644 --- a/test/Ocelot.UnitTests/DownstreamRouteFinder/DownstreamRouteFinderMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/DownstreamRouteFinder/DownstreamRouteFinderMiddlewareTests.cs @@ -11,8 +11,8 @@ using Ocelot.DownstreamRouteFinder; using Ocelot.DownstreamRouteFinder.Finder; using Ocelot.DownstreamRouteFinder.Middleware; using Ocelot.DownstreamRouteFinder.UrlMatcher; +using Ocelot.Infrastructure.RequestData; using Ocelot.Responses; -using Ocelot.ScopedData; using TestStack.BDDfy; using Xunit; @@ -21,7 +21,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder public class DownstreamRouteFinderMiddlewareTests : IDisposable { private readonly Mock _downstreamRouteFinder; - private readonly Mock _scopedRepository; + private readonly Mock _scopedRepository; private readonly string _url; private readonly TestServer _server; private readonly HttpClient _client; @@ -32,7 +32,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder { _url = "http://localhost:51879"; _downstreamRouteFinder = new Mock(); - _scopedRepository = new Mock(); + _scopedRepository = new Mock(); var builder = new WebHostBuilder() .ConfigureServices(x => diff --git a/test/Ocelot.UnitTests/DownstreamUrlCreator/DownstreamUrlCreatorMiddlewareTests.cs b/test/Ocelot.UnitTests/DownstreamUrlCreator/DownstreamUrlCreatorMiddlewareTests.cs index 959e46c5..7207e3f0 100644 --- a/test/Ocelot.UnitTests/DownstreamUrlCreator/DownstreamUrlCreatorMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/DownstreamUrlCreator/DownstreamUrlCreatorMiddlewareTests.cs @@ -11,8 +11,8 @@ using Ocelot.DownstreamRouteFinder; using Ocelot.DownstreamRouteFinder.UrlMatcher; using Ocelot.DownstreamUrlCreator.Middleware; using Ocelot.DownstreamUrlCreator.UrlTemplateReplacer; +using Ocelot.Infrastructure.RequestData; using Ocelot.Responses; -using Ocelot.ScopedData; using TestStack.BDDfy; using Xunit; @@ -21,7 +21,7 @@ namespace Ocelot.UnitTests.DownstreamUrlCreator public class DownstreamUrlCreatorMiddlewareTests : IDisposable { private readonly Mock _downstreamUrlTemplateVariableReplacer; - private readonly Mock _scopedRepository; + private readonly Mock _scopedRepository; private readonly string _url; private readonly TestServer _server; private readonly HttpClient _client; @@ -33,7 +33,7 @@ namespace Ocelot.UnitTests.DownstreamUrlCreator { _url = "http://localhost:51879"; _downstreamUrlTemplateVariableReplacer = new Mock(); - _scopedRepository = new Mock(); + _scopedRepository = new Mock(); var builder = new WebHostBuilder() .ConfigureServices(x => diff --git a/test/Ocelot.UnitTests/HeaderBuilder/HttpRequestHeadersBuilderMiddlewareTests.cs b/test/Ocelot.UnitTests/HeaderBuilder/HttpRequestHeadersBuilderMiddlewareTests.cs index 6d28f64c..ee8fae7c 100644 --- a/test/Ocelot.UnitTests/HeaderBuilder/HttpRequestHeadersBuilderMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/HeaderBuilder/HttpRequestHeadersBuilderMiddlewareTests.cs @@ -13,8 +13,8 @@ using Ocelot.DownstreamRouteFinder; using Ocelot.DownstreamRouteFinder.UrlMatcher; using Ocelot.HeaderBuilder; using Ocelot.HeaderBuilder.Middleware; +using Ocelot.Infrastructure.RequestData; using Ocelot.Responses; -using Ocelot.ScopedData; using TestStack.BDDfy; using Xunit; @@ -22,7 +22,7 @@ namespace Ocelot.UnitTests.HeaderBuilder { public class HttpRequestHeadersBuilderMiddlewareTests : IDisposable { - private readonly Mock _scopedRepository; + private readonly Mock _scopedRepository; private readonly Mock _addHeaders; private readonly string _url; private readonly TestServer _server; @@ -33,7 +33,7 @@ namespace Ocelot.UnitTests.HeaderBuilder public HttpRequestHeadersBuilderMiddlewareTests() { _url = "http://localhost:51879"; - _scopedRepository = new Mock(); + _scopedRepository = new Mock(); _addHeaders = new Mock(); var builder = new WebHostBuilder() .ConfigureServices(x => diff --git a/test/Ocelot.UnitTests/Repository/ScopedRequestDataRepositoryTests.cs b/test/Ocelot.UnitTests/Repository/ScopedRequestDataRepositoryTests.cs index 196b6a92..030c3834 100644 --- a/test/Ocelot.UnitTests/Repository/ScopedRequestDataRepositoryTests.cs +++ b/test/Ocelot.UnitTests/Repository/ScopedRequestDataRepositoryTests.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Http; +using Ocelot.Infrastructure.RequestData; using Ocelot.Responses; -using Ocelot.ScopedData; using Shouldly; using TestStack.BDDfy; using Xunit; @@ -9,7 +9,7 @@ namespace Ocelot.UnitTests.Repository { public class ScopedRequestDataRepositoryTests { - private IScopedRequestDataRepository _scopedRequestDataRepository; + private IRequestScopedDataRepository _requestScopedDataRepository; private IHttpContextAccessor _httpContextAccesor; private string _key; private object _toAdd; @@ -19,7 +19,7 @@ namespace Ocelot.UnitTests.Repository { _httpContextAccesor = new HttpContextAccessor(); _httpContextAccesor.HttpContext = new DefaultHttpContext(); - _scopedRequestDataRepository = new ScopedRequestDataRepository(_httpContextAccesor); + _requestScopedDataRepository = new HttpDataRepository(_httpContextAccesor); } [Fact] @@ -48,7 +48,7 @@ namespace Ocelot.UnitTests.Repository private void WhenIGetTheItem() { - _result = _scopedRequestDataRepository.Get(_key); + _result = _requestScopedDataRepository.Get(_key); } private void GivenThereIsAnItemInTheContext(string key) @@ -66,7 +66,7 @@ namespace Ocelot.UnitTests.Repository private void WhenIAddTheItem() { - _scopedRequestDataRepository.Add(_key, _toAdd); + _requestScopedDataRepository.Add(_key, _toAdd); } private void ThenTheItemIsAdded() diff --git a/test/Ocelot.UnitTests/RequestBuilder/HttpRequestBuilderMiddlewareTests.cs b/test/Ocelot.UnitTests/RequestBuilder/HttpRequestBuilderMiddlewareTests.cs index d7683445..b4024899 100644 --- a/test/Ocelot.UnitTests/RequestBuilder/HttpRequestBuilderMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/RequestBuilder/HttpRequestBuilderMiddlewareTests.cs @@ -7,11 +7,11 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; using Moq; +using Ocelot.Infrastructure.RequestData; using Ocelot.RequestBuilder; using Ocelot.RequestBuilder.Builder; using Ocelot.RequestBuilder.Middleware; using Ocelot.Responses; -using Ocelot.ScopedData; using TestStack.BDDfy; using Xunit; @@ -20,7 +20,7 @@ namespace Ocelot.UnitTests.RequestBuilder public class HttpRequestBuilderMiddlewareTests : IDisposable { private readonly Mock _requestBuilder; - private readonly Mock _scopedRepository; + private readonly Mock _scopedRepository; private readonly string _url; private readonly TestServer _server; private readonly HttpClient _client; @@ -32,7 +32,7 @@ namespace Ocelot.UnitTests.RequestBuilder { _url = "http://localhost:51879"; _requestBuilder = new Mock(); - _scopedRepository = new Mock(); + _scopedRepository = new Mock(); var builder = new WebHostBuilder() .ConfigureServices(x => diff --git a/test/Ocelot.UnitTests/Requester/HttpRequesterMiddlewareTests.cs b/test/Ocelot.UnitTests/Requester/HttpRequesterMiddlewareTests.cs index 34d73b64..fde81909 100644 --- a/test/Ocelot.UnitTests/Requester/HttpRequesterMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/Requester/HttpRequesterMiddlewareTests.cs @@ -6,11 +6,11 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; using Moq; +using Ocelot.Infrastructure.RequestData; using Ocelot.RequestBuilder; using Ocelot.Requester; using Ocelot.Requester.Middleware; using Ocelot.Responses; -using Ocelot.ScopedData; using TestStack.BDDfy; using Xunit; @@ -19,7 +19,7 @@ namespace Ocelot.UnitTests.Requester public class HttpRequesterMiddlewareTests : IDisposable { private readonly Mock _requester; - private readonly Mock _scopedRepository; + private readonly Mock _scopedRepository; private readonly string _url; private readonly TestServer _server; private readonly HttpClient _client; @@ -31,7 +31,7 @@ namespace Ocelot.UnitTests.Requester { _url = "http://localhost:51879"; _requester = new Mock(); - _scopedRepository = new Mock(); + _scopedRepository = new Mock(); var builder = new WebHostBuilder() .ConfigureServices(x => diff --git a/test/Ocelot.UnitTests/Responder/HttpResponderMiddlewareTests.cs b/test/Ocelot.UnitTests/Responder/HttpResponderMiddlewareTests.cs index 0a24907a..20793726 100644 --- a/test/Ocelot.UnitTests/Responder/HttpResponderMiddlewareTests.cs +++ b/test/Ocelot.UnitTests/Responder/HttpResponderMiddlewareTests.cs @@ -6,10 +6,10 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; using Moq; +using Ocelot.Infrastructure.RequestData; using Ocelot.Responder; using Ocelot.Responder.Middleware; using Ocelot.Responses; -using Ocelot.ScopedData; using TestStack.BDDfy; using Xunit; @@ -18,7 +18,7 @@ namespace Ocelot.UnitTests.Responder public class HttpResponderMiddlewareTests : IDisposable { private readonly Mock _responder; - private readonly Mock _scopedRepository; + private readonly Mock _scopedRepository; private readonly Mock _codeMapper; private readonly string _url; private readonly TestServer _server; @@ -30,7 +30,7 @@ namespace Ocelot.UnitTests.Responder { _url = "http://localhost:51879"; _responder = new Mock(); - _scopedRepository = new Mock(); + _scopedRepository = new Mock(); _codeMapper = new Mock(); var builder = new WebHostBuilder()