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