Beispiel #1
0
        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);
        }
Beispiel #2
0
 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);
 }
Beispiel #5
0
        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));
 }