Ejemplo n.º 1
0
        private static ControllerSummary locateController(ICMSRequest pageRequest, ref string controller)
        {
            var schema = (pageRequest as ICMSPageTypeRequest).Schema;

            var matchingController = controllerSummaries.Where(
                c => !string.IsNullOrEmpty(schema) && c.Name == schema + "Controller")
                                     .FirstOrDefault();

            if (matchingController != null)
            {
                controller = schema;
            }
            return(matchingController);
        }
Ejemplo n.º 2
0
        private ActionResult rewriteToCmsPath(string pageId,
                                              Dictionary <string, string> queryStrings)
        {
            //present download page that hosts this download
            CMSPageDefaultController pageController = initPageController();

            //get page by id
            ICMSRequest interceptPage = pageController._PageFactory.GetPage(Request, pageId);

            //add 3 query strings

            foreach (var pair in queryStrings)
            {
                (interceptPage as ICMSEnvironment).QueryString.Add(pair.Key, pair.Value);
            }

            //redo page content to reserialize the querystrings
            (interceptPage as CMSPageRequest).GetPageContent();

            setNoCache();

            return(pageController.viewOrXsltFallback(interceptPage as CMSPageRequest));
        }
Ejemplo n.º 3
0
        protected virtual ActionResult handleRequest(Func <ICMSRoutingRequest, ActionResult> nonCmsRouteHandle, Func <CMSPageRequest, string, ActionResult> remainingPathHandle, Func <CMSPageRequest, ActionResult> standardCmsPageHandle)
        {
            if (_InvalidPageResult != null)
            {
                return(_InvalidPageResult);
            }

            if (_AllowTfrm)
            {
                //exception for settings.xml and urlmap.xml, allow them to display only if
                string path = Request.Url.AbsolutePath.ToLower();
                if (path.EndsWith("settings/settings.xml") || path.EndsWith("settings/urlmap.xml"))
                {
                    var    relativePath = path.Substring(Request.ApplicationPath.Length);
                    string filePath     = Path.Combine(_SitePath, relativePath.TrimStart('/').Replace("/", @"\"));
                    if (System.IO.File.Exists(filePath))
                    {
                        return(new XmlResult(XDocument.Load(filePath)));
                    }
                }
            }

            if (_CMSPageRoutingRequest.CMSRequest == null || !_CMSPageRoutingRequest.CMSRequest.Exists)
            {
                return(nonCmsRouteHandle(_CMSPageRoutingRequest));
            }

            ICMSRequest cmsRequest = _CMSPageRoutingRequest.CMSRequest;

            //if the request is for redirection, do redirect
            if (cmsRequest is CMSPageRedirectRequest)
            {
                var cmsRedir = cmsRequest as CMSPageRedirectRequest;
                //string absoluteUrl = cmsRedir.FinalUrl.ToAbsoluteUrl();
                string absoluteUrl = cmsRedir.FinalUrl;
                if (!absoluteUrl.StartsWith("http://") && !absoluteUrl.StartsWith("https://"))
                {
                    absoluteUrl = VirtualPathUtility.ToAbsolute("~/" + absoluteUrl.TrimStart('/'));
                }

                if (cmsRedir.NoRedirectCache)
                {
                    Response.Expires = -1;
                    Response.Cache.SetCacheability(HttpCacheability.NoCache);
                }

                if (cmsRedir.IsPermanent)
                {
                    Response.RedirectPermanent(absoluteUrl);
                }
                else
                {
                    Response.Redirect(absoluteUrl);
                }
                return(null);
            }
            else if (cmsRequest is CMSPageRequest)
            {
                CMSPageRequest pageRequest = cmsRequest as CMSPageRequest;

                //first handle requests with remaining path, if the method doesn't return any result, proceed
                //to treat it as a standard CMS page
                string remainigPath = _CMSPageRoutingRequest.RemaingPath;
                if (!string.IsNullOrEmpty(remainigPath))
                {
                    ActionResult cmsWithRemainingPathResult = remainingPathHandle(pageRequest, remainigPath);
                    if (cmsWithRemainingPathResult != null)
                    {
                        return(cmsWithRemainingPathResult);
                    }
                }

                if (pageRequest.RestrictedAccess)
                {
                    disableClientSideCaching();
                }

                return(standardCmsPageHandle(pageRequest));
            }
            else
            {
                throw new HttpException(501, Ingeniux.Runtime.Properties.Resources.RequestTypeNotRecognized);
            }
        }
Ejemplo n.º 4
0
        public override RouteData GetRouteData(HttpContextBase httpContext)
        {
            if (string.IsNullOrWhiteSpace(_BaseController))
            {
                _BaseController = ConfigurationManager.AppSettings["BaseControllerName"]
                                  .ToNullOrEmptyHelper()
                                  .Return(DEFAULT_CONTROLLER_NAME);
            }

            ICMSRequest pageRequest = null;
            RouteData   data        = null;
            string      action      = defaultAction;
            string      controller  = _BaseController;

            string appPath = httpContext.Request.ApplicationPath;

            if (appPath == "/")
            {
                appPath = string.Empty;
            }

            string relativePath = httpContext.Request.Path.Substring(appPath.Length).ToLowerInvariant();

            if (relativePath.StartsWith("/igxdtpreview"))
            {
                pageRequest = _PageFactory.GetPreviewPage(httpContext.Request, true);
                // because the preview does not get a url, but rather an id and xml,
                // it is not possible to look for other actions based on the URL
                action = "Preview";
                locateController(pageRequest, ref controller);
                data = createRouteData(action, controller);
            }
            if (relativePath.StartsWith("/igxdynamicpreview") || _PageFactory == null)
            {
                action = "DynamicPreview";
                try
                {
                    CMS.IContentStore contentStore = CMSPageFactoryHelper.GetPreviewContentStore(httpContext.Request.RequestContext, _SitePath);
                    CMS.IReadonlyUser currentUser  = CMSPageFactoryHelper.GetPreviewCurrentUser(contentStore,
                                                                                                httpContext.Request.RequestContext, httpContext.Session);

                    _PageFactory = new DocumentPreviewPageFactory(contentStore, currentUser, _SitePath);
                    _PageFactory.CacheSiteControls = false;

                    pageRequest = _PageFactory.GetDynamicPreviewPage(httpContext.Request, true, true);
                    // because the preview does not get a url, but rather an id and xml,
                    // it is not possible to look for other actions based on the URL

                    locateController(pageRequest, ref controller);
                }
                catch
                {
                    controller = "CMSPageDefault";
                }
                data = createRouteData(action, controller);
            }
            else
            {
                //only need the schema data, not the whole page
                ICMSRoutingRequest routingRequest = _PageFactory.GetPage(httpContext.Request, true);
                if (routingRequest != null && routingRequest.CMSRequest != null && routingRequest.CMSRequest.Exists)
                {
                    pageRequest = routingRequest.CMSRequest;
                    if (pageRequest != null)
                    {
                        //use default controller for routing request
                        if (pageRequest is CMSPageRedirectRequest)
                        {
                            data = createRouteData(defaultAction, controller);
                        }
                        else
                        {
                            var matchingController = locateController(pageRequest, ref controller);

                            if (!string.IsNullOrEmpty(routingRequest.RemaingPath.Trim('/')))
                            {
                                //use the first section of the remaining path as action, this is arbitrary.
                                string actionInPath = routingRequest.RemaingPath.Trim('/').SubstringBefore("/");

                                //if the controller doesn't have this action, use default action
                                action = matchingController.ToNullHelper()
                                         .Propagate(
                                    c => c.ActionNames
                                    .Where(an => an.ToLowerInvariant() == actionInPath.ToLowerInvariant())
                                    .FirstOrDefault())
                                         .Return(defaultAction);

                                //get the remaining path in the controller action itself
                            }
                            else
                            {
                                action = defaultAction;
                            }

                            data = createRouteData(action, controller);
                        }
                    }
                    else
                    {
                        data = createRouteData(defaultAction, controller);
                    }
                }
                else
                {
                    data = createRouteData(defaultAction, controller);
                }
            }

            return(data);
        }