/// <summary> /// Matches the controller route. /// </summary> /// <param name="controllerMetaData">The controller meta data.</param> /// <param name="sourceRoute">The source route.</param> /// <param name="httpMethod">The HTTP method.</param> /// <returns></returns> public IRouteMatchResult MatchControllerRoute(IControllerMetaData controllerMetaData, string sourceRoute, string httpMethod) { if (controllerMetaData.ExecParameters?.RouteInfo == null) return _routeMatcher.Match(sourceRoute, null); switch (httpMethod) { case "GET": return controllerMetaData.ExecParameters.RouteInfo.GetRoute == null ? null : _routeMatcher.Match(sourceRoute, controllerMetaData.ExecParameters.RouteInfo.GetRoute); case "POST": return controllerMetaData.ExecParameters.RouteInfo.PostRoute == null ? null : _routeMatcher.Match(sourceRoute, controllerMetaData.ExecParameters.RouteInfo.PostRoute); case "PUT": return controllerMetaData.ExecParameters.RouteInfo.PutRoute == null ? null : _routeMatcher.Match(sourceRoute, controllerMetaData.ExecParameters.RouteInfo.PutRoute); case "PATCH": return controllerMetaData.ExecParameters.RouteInfo.PatchRoute == null ? null : _routeMatcher.Match(sourceRoute, controllerMetaData.ExecParameters.RouteInfo.PatchRoute); case "DELETE": return controllerMetaData.ExecParameters.RouteInfo.DeleteRoute == null ? null : _routeMatcher.Match(sourceRoute, controllerMetaData.ExecParameters.RouteInfo.DeleteRoute); } return null; }
/// <summary> /// Creates and executes the specified controller. /// </summary> /// <param name="controllerMetaData">Type of the controller.</param> /// <param name="resolver">The DI container resolver.</param> /// <param name="context">The context.</param> /// <param name="routeParameters">The route parameters.</param> /// <returns></returns> public async Task <ControllerResponseResult> Execute(IControllerMetaData controllerMetaData, IDIResolver resolver, HttpContext context, dynamic?routeParameters = null) { ControllerResponse?response = null; var controller = _controllerFactory.CreateController(controllerMetaData.ControllerType, resolver, context, routeParameters); switch (controller) { case SyncControllerBase syncController: { response = syncController.Invoke(); break; } case AsyncControllerBase asyncController: { response = await asyncController.Invoke(); break; } } if (response == null) { return(ControllerResponseResult.Default); } _controllerResponseBuilder.BuildControllerResponseProperties(response, resolver); return(await response.Process()); }
/// <summary> /// Matches the controller route. /// </summary> /// <param name="controllerMetaData">The controller meta data.</param> /// <param name="sourceRoute">The source route.</param> /// <param name="httpMethod">The HTTP method.</param> /// <returns></returns> public IRouteMatchResult MatchControllerRoute(IControllerMetaData controllerMetaData, string sourceRoute, string httpMethod) { if (controllerMetaData.ExecParameters == null || controllerMetaData.ExecParameters.RouteInfo == null) { return(_routeMatcher.Match(sourceRoute, null)); } switch (httpMethod) { case "GET": return(controllerMetaData.ExecParameters.RouteInfo.GetRoute == null ? null : _routeMatcher.Match(sourceRoute, controllerMetaData.ExecParameters.RouteInfo.GetRoute)); case "POST": return(controllerMetaData.ExecParameters.RouteInfo.PostRoute == null ? null : _routeMatcher.Match(sourceRoute, controllerMetaData.ExecParameters.RouteInfo.PostRoute)); case "PUT": return(controllerMetaData.ExecParameters.RouteInfo.PutRoute == null ? null : _routeMatcher.Match(sourceRoute, controllerMetaData.ExecParameters.RouteInfo.PutRoute)); case "DELETE": return(controllerMetaData.ExecParameters.RouteInfo.DeleteRoute == null ? null : _routeMatcher.Match(sourceRoute, controllerMetaData.ExecParameters.RouteInfo.DeleteRoute)); } return(null); }
/// <summary> /// Determines whether controller can be executed on any page. /// </summary> /// <param name="metaData">The controller meta data.</param> /// <returns></returns> public bool IsAnyPageController(IControllerMetaData metaData) { if (metaData.Role != null) { if (metaData.Role.Is400Handler || metaData.Role.Is403Handler || metaData.Role.Is404Handler) { return(false); } } if (metaData.ExecParameters != null) { if (metaData.ExecParameters.RouteInfo != null) { if (!string.IsNullOrEmpty(metaData.ExecParameters.RouteInfo.GetRoute) || !string.IsNullOrEmpty(metaData.ExecParameters.RouteInfo.PostRoute) || !string.IsNullOrEmpty(metaData.ExecParameters.RouteInfo.PutRoute) || !string.IsNullOrEmpty(metaData.ExecParameters.RouteInfo.DeleteRoute)) { return(false); } } } return(true); }
public IRouteMatchResult MatchControllerRoute(IControllerMetaData controllerMetaData, string sourceRoute, string httpMethod) { if (controllerMetaData.ExecParameters == null || controllerMetaData.ExecParameters.Routes.Count == 0) { return(_routeMatcher.Match(sourceRoute, null)); } var item = controllerMetaData.ExecParameters.Routes.FirstOrDefault(x => x.Key == HttpRequestUtil.HttpMethodStringToHttpMethod(httpMethod)); return(default(KeyValuePair <HttpMethod, string>).Equals(item) ? null : _routeMatcher.Match(sourceRoute, item.Value)); }
private ControllersProcessorResult ProcessController(IControllerMetaData controllerType, IDIResolver resolver, HttpContext context, dynamic routeParameters) { var result = _controllerExecutor.Execute(controllerType, resolver, context, routeParameters); if (result == ControllerResponseResult.RawOutput) { return(ControllersProcessorResult.RawOutput); } if (result == ControllerResponseResult.Redirect) { return(ControllersProcessorResult.Redirect); } return(ControllersProcessorResult.Ok); }
/// <summary> /// Gets the handler controller. /// </summary> /// <param name="controllerType">Type of the controller.</param> /// <returns></returns> public IControllerMetaData GetHandlerController(HandlerControllerType controllerType) { IControllerMetaData metaData = null; switch (controllerType) { case HandlerControllerType.Http403Handler: metaData = _controllersMetaStore.ControllersMetaData.FirstOrDefault(x => x.Role != null && x.Role.Is403Handler); break; case HandlerControllerType.Http404Handler: metaData = _controllersMetaStore.ControllersMetaData.FirstOrDefault(x => x.Role != null && x.Role.Is404Handler); break; } return(metaData); }
/// <summary> /// Determines whether controller can be executed on any page. /// </summary> /// <param name="metaData">The controller meta data.</param> /// <returns></returns> public bool IsAnyPageController(IControllerMetaData metaData) { if(metaData.Role != null) if(metaData.Role.Is400Handler || metaData.Role.Is403Handler || metaData.Role.Is404Handler) return false; if(metaData.ExecParameters != null) if(metaData.ExecParameters.RouteInfo != null) if(!string.IsNullOrEmpty(metaData.ExecParameters.RouteInfo.GetRoute) || !string.IsNullOrEmpty(metaData.ExecParameters.RouteInfo.PostRoute) || !string.IsNullOrEmpty(metaData.ExecParameters.RouteInfo.PutRoute) || !string.IsNullOrEmpty(metaData.ExecParameters.RouteInfo.DeleteRoute)) return false; return true; }
public bool IsAnyPageController(IControllerMetaData metaData) { if (metaData.Role != null) { if (metaData.Role.Is400Handler || metaData.Role.Is403Handler || metaData.Role.Is404Handler) { return(false); } } if (metaData.ExecParameters == null) { return(true); } return(metaData.ExecParameters.Routes.Count == 0 || metaData.ExecParameters.Routes.All(x => string.IsNullOrEmpty(x.Value))); }
/// <summary> /// Creates and executes the specified controller. /// </summary> /// <param name="controllerMetaData">Type of the controller.</param> /// <param name="resolver">The DI container resolver.</param> /// <param name="context">The context.</param> /// <param name="routeParameters">The route parameters.</param> /// <returns></returns> public ControllerResponseResult Execute(IControllerMetaData controllerMetaData, IDIResolver resolver, HttpContext context, dynamic?routeParameters = null) { var controller = _controllerFactory.CreateController(controllerMetaData.ControllerType, resolver, context, routeParameters); switch (controller) { case SyncControllerBase syncController: return(ProcessControllerResponse(syncController.Invoke(), resolver)); case AsyncControllerBase asyncController: { var task = asyncController.Invoke(); _controllersResponses.Add(task); break; } } return(ControllerResponseResult.Default); }
/// <summary> /// Determines whether controller security rules violated. /// </summary> /// <param name="metaData">The controller meta data.</param> /// <param name="user">The current request user.</param> /// <returns></returns> public SecurityRuleCheckResult IsSecurityRulesViolated(IControllerMetaData metaData, ClaimsPrincipal user) { if (metaData.Security == null) { return(SecurityRuleCheckResult.Ok); } if (!metaData.Security.IsAuthorizationRequired) { return(SecurityRuleCheckResult.Ok); } if (metaData.Security.RequiredUserRoles == null) { return(user?.Identity == null || !user.Identity.IsAuthenticated ? SecurityRuleCheckResult.NotAuthenticated : SecurityRuleCheckResult.Ok); } if (user?.Identity == null || !user.Identity.IsAuthenticated) { return(SecurityRuleCheckResult.NotAuthenticated); } return(metaData.Security.RequiredUserRoles.Any(user.IsInRole) ? SecurityRuleCheckResult.Ok : SecurityRuleCheckResult.Forbidden); }
/// <summary> /// Determines whether controller security rules violated. /// </summary> /// <param name="metaData">The controller meta data.</param> /// <param name="user">The current request user.</param> /// <returns></returns> public SecurityRuleCheckResult IsSecurityRulesViolated(IControllerMetaData metaData, ClaimsPrincipal user) { if (metaData.Security == null) return SecurityRuleCheckResult.Ok; if (!metaData.Security.IsAuthorizationRequired) return SecurityRuleCheckResult.Ok; if (metaData.Security.RequiredUserRoles == null) return user?.Identity == null || !user.Identity.IsAuthenticated ? SecurityRuleCheckResult.NotAuthenticated : SecurityRuleCheckResult.Ok; if (user?.Identity == null || !user.Identity.IsAuthenticated) return SecurityRuleCheckResult.NotAuthenticated; return metaData.Security.RequiredUserRoles.Any(user.IsInRole) ? SecurityRuleCheckResult.Ok : SecurityRuleCheckResult.Forbidden; }
private static CollectionItem BuildCollectionItem(IControllerMetaData metaData, KeyValuePair <HttpMethod, string> route) =>