public async Task Invoke(HttpContext context) { if (_validationDelegate != null) { if (!await _validationDelegate(context).ConfigureAwait(false)) { return; } } else { var matchedRouteResult = await RoutesUtils.MatchRouteAsync(context, _routesRepository).ConfigureAwait(false); if (matchedRouteResult.Key != null) { if (!await ValidationUtils .ValidateClaimsAsync(matchedRouteResult.Key, context, matchedRouteResult.Value) .ConfigureAwait(false)) { return; } } } await _next(context).ConfigureAwait(false); }
internal Task RegisterRoutesAsync(IEnumerable <IRouteDefinitions> routeDefs) { lock (_lockObject) { _routes = RoutesUtils.GetValidRouteDefs(routeDefs); _routeDefinitionProvider = null; _useProvider = false; } return(Task.CompletedTask); }
public void GetValidRouteDefsTest() { TestingUtils.ResetRoutesRepository(); var result = RoutesUtils.GetValidRouteDefs(new List <IRouteDefinitions>() { new Routes() }); Assert.Equal(7, result.Keys.Count); Assert.Equal(2, result["PUT"].Count); }
public void GetValidRouteDefsTest_InvalidRouteTemplate() { TestingUtils.ResetRoutesRepository(); try { RoutesUtils.GetValidRouteDefs(new List <IRouteDefinitions>() { new InvalidRouteTemplateRoutes() }); } catch (Exception) { return; } Assert.True(false); }
internal async Task <Dictionary <string, List <InternalRouteDefinition> > > GetRoutesAsync() { if (!_useProvider || _routeDefinitionProvider == null) { return(_routes); } LoadRefreshTimestamp(); if (DateTime.Now - _lastRetrievedAt > _refreshTimespan) { var routes = await _routeDefinitionProvider.GetAsync().ConfigureAwait(false); var routesDict = RoutesUtils.GetValidRouteDefs(routes); lock (_refreshLockObject) { _routes = routesDict; _lastRetrievedAt = DateTime.Now; } } return(_routes); }
public void MatchRouteAsyncTest_NoMatch() { TestingUtils.ResetRoutesRepository(); var routesRepository = new RoutesRepository(); routesRepository.RegisterRoutesAsync(new List <IRouteDefinitions>() { new SpecialRouteTemplateRoutes() }).Wait(); var httpContext = new DefaultHttpContext(); var request = new DefaultHttpRequest(httpContext) { Method = HttpMethod.Post.Method, Path = "/v1/yolo/nolo/asdf/kjlkjl" }; var result = RoutesUtils.MatchRouteAsync(httpContext, routesRepository).Result; Assert.NotNull(request); Assert.Null(result.Key); Assert.Null(result.Value); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, IMemoryCache memoryCache) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMiddleware <TokenMiddleware>(); app.UseCustomClaimsValidationAsync(new List <IRouteDefinitions> { new ValuesRoutes() }).Wait(); app.UseCustomClaimsValidationAsync(new CachedValidRouteDefinitionProvider(memoryCache), async(context) => { var matchedRouteResult = await RoutesUtils.GetMatchingRoute(context).ConfigureAwait(false); if (matchedRouteResult.Route != null) { return(await ValidationUtils .ValidateClaimsAsync(matchedRouteResult.Route, context, matchedRouteResult.RouteValues) .ConfigureAwait(false)); } return(true); }).Wait(); app.UseMvc(); }
public void MatchRouteAsyncTest() { TestingUtils.ResetRoutesRepository(); var routesRepository = new RoutesRepository(); routesRepository.RegisterRoutesAsync(new List <IRouteDefinitions>() { new SpecialRouteTemplateRoutes() }).Wait(); var httpContext = new DefaultHttpContext(); var request = new DefaultHttpRequest(httpContext) { Method = HttpMethod.Post.Method, Path = "/v1/yolo/nolo/1" }; var result = RoutesUtils.MatchRouteAsync(httpContext, routesRepository).Result; Assert.NotNull(request); Assert.Equal(4, result.Key.ClaimsConfig.ExtractionConfigs.Count); Assert.Equal(1, result.Key.ClaimsConfig.ValidationConfigs.Count); Assert.NotNull(result.Key.ClaimsConfig.BadRequestResponse); Assert.Equal("1", result.Value["id"]); }
public void GetValidRouteDefsTest_NullRouteDefs() { TestingUtils.ResetRoutesRepository(); Assert.Equal(new Dictionary <string, List <InternalRouteDefinition> >(), RoutesUtils.GetValidRouteDefs(null)); }