Пример #1
0
        protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        {
            base.Initialize(requestContext);

            _SitePath = CmsRoute.GetSitePath();

            _DTSitePath = ConfigurationManager.AppSettings["DesignTimeAssetsLocation"]
                          .ToNullOrEmptyHelper()
                          .Return(_SitePath);
            _AllowTfrm = ConfigurationManager.AppSettings["EnableTFRMParameter"].ToNullHelper().Branch(
                str => str.Trim().ToLowerInvariant() == "true",
                () => true);
            _LegacyTransformation = ConfigurationManager.AppSettings["LegacyRendering"].ToNullHelper()
                                    .Branch(
                str => str.Trim().ToLowerInvariant() != "false",
                () => true);

            _UseTempStylesheetsLocation = ConfigurationManager.AppSettings["UseTempStylesheetsLocation"].ToNullHelper().Branch(str => str.Trim().ToLowerInvariant() != "false", () => true);

            _IsDesignTime = Reference.Reference.IsDesignTime(_SitePath);

            try
            {
                //page factory is a cheap object to construct, since both surl map and ssmap are cached most time
                _PageFactory = CMSPageFactoryHelper.GetPageFactory(_IsDesignTime, _SitePath, requestContext, _LegacyTransformation, out _IsDTAuthenticated) as CMSPageFactory;
            }
            catch (Ingeniux.CMS.Exceptions.LicensingException e)
            {
                if (e.Expired)
                {
                    _InvalidPageResult = new XmlResult(
                        new XElement("TrialLicenseExpired",
                                     new XAttribute("ExpirationDateUTC", e.ExpirationDate.ToIso8601DateString(true)),
                                     new XElement("IngeniuxSupport",
                                                  new XAttribute("Phone", "1.877.299.8900"),
                                                  new XAttribute("Email", "*****@*****.**"),
                                                  new XAttribute("Portal", "http://support.ingeniux.com/"))));
                }
                else
                {
                    _InvalidPageResult = new XmlResult(
                        new XElement("InvalidCMSLicense",
                                     new XElement("IngeniuxSupport",
                                                  new XAttribute("Phone", "1.877.299.8900"),
                                                  new XAttribute("Email", "*****@*****.**"),
                                                  new XAttribute("Portal", "http://support.ingeniux.com/"))));
                }
            }

            if (_InvalidPageResult == null)
            {
                if (_PageFactory.CacheSiteControls)
                {
                    // only set site control schemas when list is not empty
                    string[] siteControlSchemas = ConfigurationManager.AppSettings["SiteControlSchemas"].ToNullHelper().Branch <string[]>(
                        str => str.Split(';').Select(
                            s => s.Trim()).Where(
                            s => s != "").ToArray(),
                        () => new string[] { });

                    if (siteControlSchemas.Length > 0)
                    {
                        _PageFactory.SiteControlSchemas = siteControlSchemas;
                    }
                }

                _PageFactory.LocalExportsIncludeLinks = ConfigurationManager.AppSettings["LocalExportsIncludeLinks"].ToNullHelper().Branch <bool>(
                    str => str.Trim().ToLowerInvariant() == "true",
                    () => true);

                //move page getting to here so it can be used to OnActionExecuting
                try
                {
                    _CMSPageRoutingRequest = _PageFactory.GetPage(Request, false);
                }
                catch (DesignTimeInvalidPageIDException exp)
                {
                    //this message is exclusive to design time and need to present a special page
                    _InvalidPageResult = new XmlResult(new XElement("DynamicPreviewError", exp.Message));
                }
            }

            if (_CMSPageRoutingRequest != null && string.IsNullOrWhiteSpace(_CMSPageRoutingRequest.RemaingPath))
            {
                HttpContext.Items["PageRequest"] = _CMSPageRoutingRequest;
            }
        }
Пример #2
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);
        }
Пример #3
0
 /// <summary>
 /// Get called when routingRequest not pointing to CMS page
 /// Default behavior is to introduce 404 error.
 /// </summary>
 /// <param name="routingRequest"></param>
 protected virtual ActionResult handleNoneCmsPageRoute(ICMSRoutingRequest routingRequest)
 {
     //throw 404 error, and let the 404 page handle it
     throw new HttpException(404, Ingeniux.Runtime.Properties.Resources.CannotLocateIngeniuxCMSPage);
 }
Пример #4
0
        protected ActionResult handleRequest(Func <ICMSRoutingRequest, ActionResult> nonCmsRouteHandle, Func <CMSPageRequest, string, ActionResult> remainingPathHandle, Func <CMSPageRequest, ActionResult> standardCmsPageHandle)
        {
            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)));
                    }
                }
            }

            try
            {
                _CMSPageRoutingRequest = _PageFactory.GetPage(Request, false);
            }
            catch (DesignTimeInvalidPageIDException exp)
            {
                //this message is exclusive to design time and need to present a special page
                return(new XmlResult(new XElement("DynamicPreviewError",
                                                  exp.Message)));
            }

            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);
            }
        }