public void ProcessAction_PageDoesNotExist_ReturnsStatusCodeNotFound()
            {
                pagesRetrieverMock.GetPage(Arg.Any <string>()).Returns((TreeNode)null);

                var result = richTextGetPageActionExecutor.ProcessAction(PAGE_PREVIEW_URL_PATH);

                Assert.Multiple(() =>
                {
                    Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
                    Assert.That(result.StatusCodeMessage, Is.Not.Empty);
                    Assert.That(result.StatusCodeMessage, Is.Not.Null);
                });
            }
        /// <summary>
        /// Processes the GetLinkMetadata action.
        /// </summary>
        /// <param name="linkUrl">The link URL.</param>
        public GetLinkMetadataActionResult ProcessAction(string linkUrl)
        {
            if (!VirtualContext.IsPreviewLinkInitialized)
            {
                return(new GetLinkMetadataActionResult(HttpStatusCode.Forbidden, statusCodeMessage: "The request is not authenticated via the preview URL decorator."));
            }

            if (String.IsNullOrEmpty(linkUrl))
            {
                return(new GetLinkMetadataActionResult(HttpStatusCode.BadRequest, statusCodeMessage: "URL is missing the \"linkUrl\" parameter."));
            }

            LinkModel linkModel = new LinkModel()
            {
                LinkURL  = linkUrl,
                LinkType = LinkTypeEnum.External
            };

            // Try to identify particular local link types
            if (IsLocalUrl(linkUrl))
            {
                LinkModel localLinkModel = null;
                string    urlPath        = GetUrlPath(linkUrl);

                // Media file
                var mediaFile = mediaFilesRetriever.GetMediaFile(urlPath);
                if (mediaFile != null)
                {
                    localLinkModel = GetMediaFileLinkModel(mediaFile);
                }

                // Page
                if (localLinkModel == null)
                {
                    var page = pagesProvider.GetPage(urlPath);
                    if (page != null)
                    {
                        if (!page.CheckPermissions(PermissionsEnum.Read, siteName, MembershipContext.AuthenticatedUser))
                        {
                            return(new GetLinkMetadataActionResult(HttpStatusCode.Forbidden, statusCodeMessage: $"You are not authorized to access data of the page '{urlPath}'."));
                        }

                        localLinkModel = GetPageLinkModel(page);
                    }
                }

                // Local link with of an unknown type
                if (localLinkModel == null)
                {
                    localLinkModel = GetLocalLinkModel();
                }

                // Store the local URL path that does not contain the virtual context data
                localLinkModel.LinkURL = GetAbsolutePath(urlPath);

                linkModel = localLinkModel;
            }

            return(new GetLinkMetadataActionResult(HttpStatusCode.OK, linkModel));
        }
Beispiel #3
0
            public void ProcessAction_LocalUrl_ExistingPage_UserWithInsufficientPermissions_ReturnsStatusCodeUnauthorized()
            {
                var pageMock = Substitute.For <TreeNode>();

                pageMock.CheckPermissions(PermissionsEnum.Read, Arg.Any <string>(), Arg.Any <IUserInfo>()).Returns(false);
                pagesRetrieverMock.GetPage(Arg.Any <string>()).Returns(pageMock);

                var result = richTextGetLinkMetadataActionExecutor.ProcessAction("/page");

                Assert.Multiple(() =>
                {
                    Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.Forbidden));
                    Assert.That(result.StatusCodeMessage, Is.Not.Empty);
                    Assert.That(result.StatusCodeMessage, Is.Not.Null);
                    Assert.That(result.LinkModel, Is.Null);
                });
            }
        /// <summary>
        /// Processes the GetLinkMetadata action.
        /// </summary>
        /// <param name="linkUrl">The link URL.</param>
        public GetLinkMetadataActionResult ProcessAction(string linkUrl)
        {
            if (!VirtualContext.IsPreviewLinkInitialized)
            {
                return(new GetLinkMetadataActionResult(HttpStatusCode.Forbidden, statusCodeMessage: "The request is not authenticated via the preview URL decorator."));
            }

            if (String.IsNullOrEmpty(linkUrl))
            {
                return(new GetLinkMetadataActionResult(HttpStatusCode.BadRequest, statusCodeMessage: "URL is missing the \"linkUrl\" parameter."));
            }

            var linkModel = new LinkModel()
            {
                LinkURL = linkUrl
            };

            if (IsLocalUrl(linkUrl))
            {
                string urlPath = GetUrlPath(linkUrl);

                var page = pagesProvider.GetPage(urlPath);
                if (page != null)
                {
                    if (!page.CheckPermissions(PermissionsEnum.Read, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser))
                    {
                        return(new GetLinkMetadataActionResult(HttpStatusCode.Forbidden, statusCodeMessage: $"You are not authorized to access data of the page '{urlPath}'."));
                    }

                    linkModel = GetPageLinkModel(page);
                }
                else
                {
                    linkModel = GetLocalLinkModel();
                }

                // Store the local URL path that does not contain the virtual context data
                linkModel.LinkURL = GetAbsolutePath(urlPath);
            }

            return(new GetLinkMetadataActionResult(HttpStatusCode.OK, linkModel));
        }
Beispiel #5
0
        /// <summary>
        /// Processes the GetPage action.
        /// </summary>
        /// <param name="pagePreviewUrl">The page URL decorated with the preview URL prefix (virtual context).</param>
        public GetPageActionResult ProcessAction(string pagePreviewUrl)
        {
            if (!VirtualContext.IsPreviewLinkInitialized)
            {
                return(new GetPageActionResult(HttpStatusCode.Forbidden, statusCodeMessage: "The request is not authenticated via the preview URL decorator."));
            }

            if (String.IsNullOrEmpty(pagePreviewUrl))
            {
                return(new GetPageActionResult(HttpStatusCode.BadRequest, statusCodeMessage: "URL is missing the \"pageUrl\" parameter."));
            }

            string pageUrlPath = ExtractPageUrlPath(pagePreviewUrl);

            if (pageUrlPath == null)
            {
                return(new GetPageActionResult(HttpStatusCode.BadRequest, statusCodeMessage: "Invalid \"pageUrl\" parameter."));
            }

            TreeNode page = pagesProvider.GetPage(pageUrlPath);

            if (page == null)
            {
                return(new GetPageActionResult(HttpStatusCode.NotFound, statusCodeMessage: $"No page was found for the URL '{pageUrlPath}'."));
            }

            if (!page.CheckPermissions(PermissionsEnum.Read, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser))
            {
                return(new GetPageActionResult(HttpStatusCode.Forbidden, statusCodeMessage: $"You are not authorized to access data of the page '{pageUrlPath}'."));
            }

            var pageModel = new PageLinkModel
            {
                Name     = GetPageName(page),
                NodeGuid = page.NodeGUID
            };

            return(new GetPageActionResult(HttpStatusCode.OK, pageModel));
        }