Esempio n. 1
0
        public IHttpResponse Handle(IHttpRequest request)
        {
            var getParams     = request.UrlParameters;
            var postParams    = request.FormData;
            var requestMethod = request.Method.ToString();

            var controllerName = string.Empty;
            var actionName     = string.Empty;

            if (request.Path == DefaultPath)
            {
                controllerName = DefaultControllerName;
                actionName     = DefaultActionName;
            }
            else
            {
                string[] invocationParameters =
                    request.Path.Split('/', StringSplitOptions.RemoveEmptyEntries);
                if (invocationParameters.Length != 2)
                {
                    throw new InvalidOperationException("Invalid URL");
                }

                controllerName = invocationParameters[0].CapitalizeFirstLetter() + MvcContext.Get.ControllerSuffix;
                actionName     = invocationParameters[1].CapitalizeFirstLetter();
            }

            var controller = this.GetController(controllerName, request);

            try
            {
                MethodInfo action = this.GetMethod(requestMethod, controller, actionName);

                if (action == null)
                {
                    return(new NotFoundResponse());
                }

                PreAuthorizeAttribute authorizationAttribute = action.GetCustomAttributes()
                                                               .Where(x => x is PreAuthorizeAttribute)
                                                               .Cast <PreAuthorizeAttribute>()
                                                               .FirstOrDefault();

                if (authorizationAttribute != null && !controller.SessionUser.IsAuthenticated)
                {
                    throw new UnauthorizedException(UnauthorizedToViewContentMessage);
                }

                var actionParameters = this.MapActionParameters(action, getParams, postParams);
                return(this.PrepareResponse(controller, action, actionParameters));
            }
            catch (UnauthorizedException e)
            {
                return(new PreAuthorizeAttribute().GetResponse(e.Message));
            }
        }
        public IHttpResponse Handle(IHttpRequest request)
        {
            var getParams     = request.UrlParameters;
            var postParams    = request.FormData;
            var requestMethod = request.Method.ToString();

            List <string> invocationParameters =
                request.Path.Split('/', StringSplitOptions.RemoveEmptyEntries).ToList();

            if (request.Path == "/")
            {
                invocationParameters.Add("home");
                invocationParameters.Add("index");
            }

            if (invocationParameters.Count < 2)
            {
                throw new InvalidOperationException("Invalid URL");
            }

            var controllerName = invocationParameters[0].CapitalizeFirstLetter() + MvcContext.Get.ControllerSuffix;
            var actionName     = invocationParameters[1].CapitalizeFirstLetter();

            var controller = this.GetController(controllerName, request);


            try
            {
                MethodInfo action = this.GetMethod(requestMethod, controller, actionName);

                if (action == null)
                {
                    return(new NotFoundResponse());
                }

                PreAuthorizeAttribute validationAttribute = action
                                                            .GetCustomAttributes()
                                                            .Where(attr => attr is PreAuthorizeAttribute)
                                                            .Cast <PreAuthorizeAttribute>()
                                                            .FirstOrDefault();


                if (validationAttribute != null && !controller.User.IsAuthenticated)
                {
                    return(validationAttribute.GetResponse("The user is not authorized !"));
                }

                var actionParameters = this.MapActionParameters(action, getParams, postParams);

                return(this.PrepareResponse(controller, action, actionParameters));
            }
            catch (UnauthorizedAccessException e)
            {
                return(new PreAuthorizeAttribute().GetResponse(e.Message));
            }
        }