Exemplo n.º 1
0
		/// <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;
		}
Exemplo n.º 2
0
        /// <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());
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
        /// <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;
        }
Exemplo n.º 9
0
        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)));
        }
Exemplo n.º 10
0
        /// <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);
        }
Exemplo n.º 11
0
        /// <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);
        }
Exemplo n.º 12
0
		/// <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) =>