Example #1
0
 public CaberRouteData Route(CaberRequestContext context)
 {
     foreach (var route in routes)
     {
         var routeData = TryRoute(route, context);
         if (routeData != null)
         {
             return(routeData);
         }
     }
     return(null);
 }
Example #2
0
        private CaberRouteData TryRoute(ICaberRoute route, CaberRequestContext context)
        {
            var routeContext    = new RouteContext(context.HttpContext);
            var matcher         = new TemplateMatcher(route.Template, new RouteValueDictionary());
            var routeParameters = new RouteValueDictionary();

            if (matcher.TryMatch(routeContext.HttpContext.Request.Path, routeParameters))
            {
                return(new CaberRouteData {
                    Route = route, Parameters = routeParameters
                });
            }
            return(null);
        }
Example #3
0
        public async Task HandleAsync(CaberRequestContext context)
        {
            if (!await Authenticate(context))
            {
                return;
            }

            if (context.RouteData != null)
            {
                var handler = context.RouteData.Route.Create(context.Services, context.RouteData.Parameters);
                await handler.ExecuteAsync(context);
            }
            else
            {
                context.NotFound();
            }
        }
Example #4
0
        private async Task <bool> Authenticate(CaberRequestContext context)
        {
            var result = await context.HttpContext.AuthenticateAsync();

            if (result.Succeeded)
            {
                return(true);
            }
            if (result.None && context.RouteData != null)
            {
                return(true);                                               // Let the route decide how to handle absent authentication.
            }
            var failureCode = result.Properties.GetParameter <CaberMutualAuthenticationFailureReason>(CaberMutualAuthenticationHandler.FailureReasonEntry);

            context.WriteResponseMessage(
                StatusCodes.Status401Unauthorized,
                new CaberAuthenticationFailureMessage
            {
                Message = result.Failure.Message,
                Reason  = failureCode == CaberMutualAuthenticationFailureReason.None ? null : failureCode.ToString()
            });
            return(false);
        }