public void should_clean_html_using_sanitizer()
        {
            // Arrange
            string html     = "<div onclick=\"javascript:alert('ouch');\">test</div>";
            var    pagehtml = new PageHtml()
            {
                Html = html
            };

            var htmlSanitizerMock = Substitute.For <IHtmlSanitizer>();

            var factoryMock = Substitute.For <IHtmlSanitizerFactory>();

            factoryMock
            .CreateHtmlSanitizer()
            .Returns(htmlSanitizerMock);

            var middleware = new HarmfulTagMiddleware(factoryMock);

            // Act
            middleware.Invoke(pagehtml);

            // Assert
            htmlSanitizerMock
            .Received(1)
            .Sanitize(html, "", null);
        }
Пример #2
0
        public void should_parser_markup_using_parser()
        {
            // Arrange
            string markdown     = "some **bold** text";
            string expectedHtml = "<p>some <strong>bold</strong> text</p>\n";

            var pagehtml = new PageHtml()
            {
                Html = markdown
            };

            var parser = Substitute.For <IMarkupParser>();

            parser
            .ToHtml(markdown)
            .Returns(expectedHtml);

            var middleware = new MarkupParserMiddleware(parser);

            // Act
            PageHtml actualPageHtml = middleware.Invoke(pagehtml);

            // Assert
            Assert.Equal(expectedHtml, actualPageHtml.Html);
        }
Пример #3
0
        /// <summary>
        /// Turns the wiki markup provided into HTML.
        /// </summary>
        /// <param name="text">A wiki markup string, e.g. creole markup.</param>
        /// <returns>The wiki markup converted to HTML.</returns>
        public PageHtml ToHtml(string text)
        {
            CustomTokenParser tokenParser = new CustomTokenParser(_applicationSettings);
            PageHtml          pageHtml    = new PageHtml();
            TextPluginRunner  runner      = new TextPluginRunner(_pluginFactory);

            // Text plugins before parse
            text = runner.BeforeParse(text, pageHtml);

            // Parse the markup into HTML
            string html = _parser.Transform(text);

            // Remove bad HTML tags
            html = RemoveHarmfulTags(html);

            // Customvariables.xml file
            html = tokenParser.ReplaceTokensAfterParse(html);

            // Text plugins after parse
            html = runner.AfterParse(html);

            // Text plugins pre and post #container HTML
            pageHtml.PreContainerHtml  = runner.PreContainerHtml();
            pageHtml.PostContainerHtml = runner.PostContainerHtml();

            pageHtml.IsCacheable = runner.IsCacheable;
            pageHtml.Html        = html;

            return(pageHtml);
        }
Пример #4
0
        public Task <ActionResult <string> > ConvertToHtml([FromBody] string markDown)
        {
            PageHtml result = _textMiddlewareBuilder.Execute(markDown);
            ActionResult <string> actionResult = Ok(result.Html);

            return(Task.FromResult(actionResult));
        }
Пример #5
0
        public void should_clean_html_using_sanitizer()
        {
            string markdown = @"@@warningbox:ENTER YOUR CONTENT HERE

here is some more content

@@";

            string expectedHtml = @"<div class=""alert alert-warning"">ENTER YOUR CONTENT HERE

here is some more content

</div><br style=""clear:both""/>";

            var pagehtml = new PageHtml()
            {
                Html = markdown
            };

            var settings = new TextSettings();

            settings.CustomTokensPath = Path.Combine(Directory.GetCurrentDirectory(), "Text", "CustomTokens", "customvariables.xml");

            var customTokenParser = new CustomTokenParser(settings, _logger);
            var middleware        = new CustomTokenMiddleware(customTokenParser);

            // Act
            PageHtml actualPageHtml = middleware.Invoke(pagehtml);

            actualPageHtml.Html = actualPageHtml.Html.Replace(Environment.NewLine, "", StringComparison.Ordinal);
            expectedHtml        = expectedHtml.Replace(Environment.NewLine, "", StringComparison.Ordinal);

            // Assert
            Assert.Equal(expectedHtml, actualPageHtml.Html);
        }
        public override PageHtml Invoke(PageHtml pageHtml)
        {
            string text = TextPluginRunner.BeforeParse(pageHtml);

            pageHtml.Html = text;

            return(pageHtml);
        }
Пример #7
0
        protected override string ExtractFriendlyName()
        {
            var titleContainer = PageHtml
                                 .FastEnumerateDescendantsByName(HtmlElements.Div)
                                 .FirstOrDefault(x => x.HasAttribute(HtmlAttributes.Class, "apphub_AppName"));

            return(titleContainer?.InnerText ?? UnknownAppName);
        }
        public override PageHtml Invoke(PageHtml pageHtml)
        {
            pageHtml.Html              = TextPluginRunner.AfterParse(pageHtml.Html);
            pageHtml.PreContainerHtml  = TextPluginRunner.PreContainerHtml();
            pageHtml.PostContainerHtml = TextPluginRunner.PostContainerHtml();
            pageHtml.IsCacheable       = _textPluginRunner.IsCacheable;

            return(pageHtml);
        }
        public override PageHtml Invoke(PageHtml pageHtml)
        {
            if (_sanitizer != null)
            {
                pageHtml.Html = _sanitizer.Sanitize(pageHtml.Html);
            }

            return(pageHtml);
        }
        public void should()
        {
            // given
            var builder = CreateBuilderWithoutParser();

            // when
            PageHtml pageHtml = builder.Execute("![Image title](/DSC001.jpg)");

            // then
            Console.WriteLine(pageHtml);
        }
Пример #11
0
        public PageViewModel(PageContent pageContent, MarkupConverter converter)
        {
            if (pageContent == null)
            {
                throw new ArgumentNullException("pageContent");
            }

            if (pageContent.Page == null)
            {
                throw new ArgumentNullException("pageContent.Page");
            }

            if (converter == null)
            {
                throw new ArgumentNullException("converter");
            }

            RoadkillContext = ObjectFactory.GetInstance <IUserContext>();

            Id                   = pageContent.Page.Id;
            Title                = pageContent.Page.Title;
            PreviousTitle        = pageContent.Page.Title;
            CreatedBy            = pageContent.Page.CreatedBy;
            CreatedOn            = pageContent.Page.CreatedOn;
            IsLocked             = pageContent.Page.IsLocked;
            ModifiedBy           = pageContent.Page.ModifiedBy;
            ModifiedOn           = pageContent.Page.ModifiedOn;
            RawTags              = pageContent.Page.Tags;
            Content              = pageContent.Text;
            VersionNumber        = pageContent.VersionNumber;
            ProjectStart         = pageContent.Page.ProjectStart;
            ProjectEnd           = pageContent.ProjectEnd;
            ProjectEstimatedTime = pageContent.ProjectEstimatedTime;
            ProjectStatus        = pageContent.ProjectStatus;
            ProjectLanguage      = pageContent.ProjectLanguage;
            orgID                = pageContent.orgID;

            Rel = RelToUserToPage(Id);

            Relationships = GetRelationships();

            PageHtml pageHtml = converter.ToHtml(pageContent.Text);

            ContentAsHtml       = pageHtml.Html;
            IsCacheable         = pageHtml.IsCacheable;
            PluginHeadHtml      = pageHtml.HeadHtml;
            PluginFooterHtml    = pageHtml.FooterHtml;
            PluginPreContainer  = pageHtml.PreContainerHtml;
            PluginPostContainer = pageHtml.PostContainerHtml;

            CreatedOn  = DateTime.SpecifyKind(CreatedOn, DateTimeKind.Utc);
            ModifiedOn = DateTime.SpecifyKind(ModifiedOn, DateTimeKind.Utc);
            AllTags    = new List <TagViewModel>();
        }
Пример #12
0
        public static void CreatePageItem(IEntity entity, string snippetPath, string description)
        {
            var queue = PageHtml.PageHtmlCodeQueue(entity, snippetPath, description);

            using var sw = new StreamWriter(entity.Path + entity.FileName);

            while (queue.Any())
            {
                sw.WriteLine(queue.Dequeue());
            }
        }
Пример #13
0
        public ActionResult GetPreview(string id)
        {
            PageHtml pagehtml = "";

            if (!string.IsNullOrEmpty(id))
            {
                MarkupConverter converter = _pageService.GetMarkupConverter();
                pagehtml = converter.ToHtml(id);
            }

            return(JavaScript(pagehtml.Html));
        }
Пример #14
0
        public SteamPage(Uri address, HtmlDocument pageHtml, params string[] prefetchHtmlElementNames)
        {
            if (address is null)
            {
                throw new ArgumentNullException(nameof(address));
            }

            PageHtml          = pageHtml ?? throw new ArgumentNullException(nameof(pageHtml));
            NormalizedAddress = LinkSanitizer.GetSanitizedLinkWithoutQueryAndFragment(address);

            PrefetchedHtmlNodes = PageHtml.GetDescendantsByNames(prefetchHtmlElementNames.Union(new[] { HtmlElements.Anchor, HtmlElements.Form }).ToArray());
            FriendlyName        = ExtractFriendlyName();

            var htmlLinks = PrefetchedHtmlNodes[HtmlElements.Anchor];
            var subLinks  = GetLinksForSubs(PrefetchedHtmlNodes[HtmlElements.Form]);

            NormalizedLinks = htmlLinks
                              .Select(x => x.GetAttributeValue(HtmlAttributes.Href, null))
                              .Where(x => !string.IsNullOrWhiteSpace(x))
                              .Where(x => x.StartsWith(PageUrlPrefixes.Steam, StringComparison.OrdinalIgnoreCase))
                              .Select(x => LinkSanitizer.GetSanitizedLinkWithoutQueryAndFragment(new Uri(x, UriKind.Absolute)))
                              .Concat(subLinks.Select(x => x.Address))
                              .Distinct(UriAbsoluteUriEqualityComparer.Instance)
                              .OrderBy(x => x.AbsoluteUri)
                              .ToList();

            AppLinks = NormalizedLinks
                       .Where(uri => uri.AbsoluteUri.StartsWith(PageUrlPrefixes.App))
                       .OrderBy(x => x.AbsoluteUri)
                       .Select(x => new AppLink(x))
                       .ToList();

            BundleLinks = NormalizedLinks
                          .Where(uri => uri.AbsoluteUri.StartsWith(PageUrlPrefixes.Bundle))
                          .OrderBy(x => x.AbsoluteUri)
                          .Select(x => new BundleLink(x))
                          .ToList();

            DlcLinks = NormalizedLinks
                       .Where(uri => uri.AbsoluteUri.StartsWith(PageUrlPrefixes.Dlc))
                       .OrderBy(x => x.AbsoluteUri)
                       .ToList();

            SubLinks = subLinks;
        }
Пример #15
0
        private string[] GetChapterPages(int ID)
        {
            var           Page  = GetChapterHtml(ID);
            List <string> Pages = new List <string>();

            var Scripts = Page.SelectNodes("//body//script[@type=\"text/javascript\"]");

            bool Found = false;

            foreach (var Node in Scripts)
            {
                if (!Node.InnerHtml.Contains("var images"))
                {
                    continue;
                }

                Found = true;

                string JS     = Node.InnerHtml.Substring("var images = ", "\"];") + "\"]";
                var    Result = (from x in JSTools.EvaluateScript <List <object> >(JS) select(string) x).ToArray();
                foreach (string PageHtml in Result)
                {
                    var PageUrl = PageHtml.Substring("src=", " ").Trim(' ', '\'', '"');
                    Pages.Add(PageUrl);
                }
            }

            if (!Found)
            {
                foreach (var Img in Page.SelectNodes("//section[@id='imageWrapper']//img"))
                {
                    Pages.Add(Img.GetAttributeValue("src", string.Empty));
                }
            }

            var Links = (from x in Pages select x.Replace(".webp", "").Replace("/images", "/mangas_files")).ToArray();

            if (Links.Where(x => string.IsNullOrEmpty(System.IO.Path.GetExtension(x))).Any())
            {
                return(Links.Select(x => x + ".webp").ToArray());
            }

            return(Links);
        }
Пример #16
0
        public PageViewModel(PageContent pageContent, MarkupConverter converter)
        {
            if (pageContent == null)
            {
                throw new ArgumentNullException("pageContent");
            }

            if (pageContent.Page == null)
            {
                throw new ArgumentNullException("pageContent.Page");
            }

            if (converter == null)
            {
                throw new ArgumentNullException("converter");
            }

            Id            = pageContent.Page.Id;
            Title         = pageContent.Page.Title;
            PreviousTitle = pageContent.Page.Title;
            CreatedBy     = pageContent.Page.CreatedBy;
            CreatedOn     = pageContent.Page.CreatedOn;
            IsLocked      = pageContent.Page.IsLocked;
            ModifiedBy    = pageContent.Page.ModifiedBy;
            ModifiedOn    = pageContent.Page.ModifiedOn;
            RawTags       = pageContent.Page.Tags;
            Content       = pageContent.Text;
            VersionNumber = pageContent.VersionNumber;

            PageHtml pageHtml = converter.ToHtml(pageContent.Text);

            ContentAsHtml       = pageHtml.Html;
            IsCacheable         = pageHtml.IsCacheable;
            PluginHeadHtml      = pageHtml.HeadHtml;
            PluginFooterHtml    = pageHtml.FooterHtml;
            PluginPreContainer  = pageHtml.PreContainerHtml;
            PluginPostContainer = pageHtml.PostContainerHtml;

            CreatedOn            = DateTime.SpecifyKind(CreatedOn, DateTimeKind.Utc);
            ModifiedOn           = DateTime.SpecifyKind(ModifiedOn, DateTimeKind.Utc);
            AllTags              = new List <TagViewModel>();
            CustomWysiwygButtons = new List <WysiwygButtonViewModel>();
        }
        public PageHtml Execute(string markdown)
        {
            var pageHtml = new PageHtml()
            {
                Html = markdown
            };

            foreach (Middleware item in MiddlewareItems)
            {
                try
                {
                    pageHtml = item.Invoke(pageHtml);
                }
                catch (Exception ex)
                {
                    _logger.LogWarning("TextMiddlewareBuilder exception: {0}", ex);
                }
            }

            return(pageHtml);
        }
        public void should_handle_null_sanitizer_from_factory_and_return_uncleaned_html()
        {
            // Arrange
            string html     = "<div onclick=\"javascript:alert('ouch');\">test</div>";
            var    pagehtml = new PageHtml()
            {
                Html = html
            };

            var factoryMock = Substitute.For <IHtmlSanitizerFactory>();

            factoryMock
            .CreateHtmlSanitizer()
            .Returns(callInfo => null);

            var middleware = new HarmfulTagMiddleware(factoryMock);

            // Act
            PageHtml actualPageHtml = middleware.Invoke(pagehtml);

            // Assert
            Assert.Equal(html, actualPageHtml.Html);
        }
Пример #19
0
        protected virtual void Extract()
        {
            try
            {
                Regex r = new Regex(ItemRegex, RegexOptions.Multiline);

                MatchCollection mc = r.Matches(PageHtml);

                if (mc.Count == 0)
                {
                    return;
                }

                string text = "";

                for (int i = 0; i < mc.Count; i++)
                {
                    if (i < mc.Count - 2)
                    {
                        text = PageHtml.Substring(mc[i].Index, mc[i + 1].Index - mc[i].Index);
                    }
                    else
                    {
                        text = PageHtml.Substring(mc[i].Index, PageHtml.IndexOf(LastItemEndTag, mc[i].Index) - mc[i].Index);
                    }

                    text = RemoveGarbage(text);

                    OnExtract(text);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 public static string BeforeParse(PageHtml pageHtml)
 {
     return(pageHtml.Html);
 }
Пример #21
0
 public override PageHtml Invoke(PageHtml pageHtml)
 {
     pageHtml.Html = _parser.ToHtml(pageHtml.Html);
     return(pageHtml);
 }
        public Task <string> ConvertToHtml(string markDown)
        {
            PageHtml result = _textMiddlewareBuilder.Execute(markDown);

            return(Task.FromResult(result.Html));
        }
 public abstract PageHtml Invoke(PageHtml pageHtml);
 public override PageHtml Invoke(PageHtml pageHtml)
 {
     return(pageHtml.Html.Replace(SearchString, Replacement, StringComparison.Ordinal));
 }
 public override PageHtml Invoke(PageHtml pageHtml)
 {
     pageHtml.Html = _customTokenParser.ReplaceTokensAfterParse(pageHtml.Html);
     return(pageHtml);
 }
Пример #26
0
 /// <summary>
 /// Allows a string to be implicitly cast from a <c>PageHtml</c>.
 /// </summary>
 /// <param name="pageHtml">A PageHtml object.</param>
 /// <returns>The PageHtml's Html property.</returns>
 public static string FromPageHtml(PageHtml pageHtml)
 {
     // string s = pageHtml
     return(pageHtml.Html);
 }