Пример #1
0
        public static string SanitizeHtml(string html, bool isFragment = true)
        {
            if (string.IsNullOrEmpty(html))
            {
                return(string.Empty);
            }

            var sanitizer = new HtmlSanitizer();

            if (isFragment)
            {
                return(sanitizer.Sanitize(html));
            }
            else
            {
                return(sanitizer.SanitizeDocument(html));
            }
        }
        public async Task <IActionResult> PreviewArticle(Guid id)
        {
            var htmlSanitizer = new HtmlSanitizer();                            //HtmlSanitizer
            var articleEntity = _dbContext.Articles                             //Get articles that matches Id.
                                .FirstOrDefault(a => a.Id == id);

            if (articleEntity == null)                                          //if null return NotFound
            {
                return(NotFound());
            }
            var articleText = await _fileRepository                             //Read the article from the file.
                              .GetArticle(articleEntity.ArticlePath);

            articleText = htmlSanitizer                                         //Convert article MarkDown and sanitize
                          .SanitizeDocument(MarkdownParser.Parse(articleText).ToString());
            var articleDto = Mapper.Map <GetArticleDto>(articleEntity);         //Map article entity to Article Dto

            articleDto.ArticleText = articleText;                               //Add text to article Dto
            return(View(articleDto));                                           //Return dto.
        }
Пример #3
0
        /// <summary>
        /// Scrape Html content and map to business entity.
        /// </summary>
        /// <param name="hackerNewsHtmlContent">html content.</param>
        /// <param name="pageSize">number of business entities to map.</param>
        /// <returns>.</returns>
        public IList <HackerNewsItem> ScrapeHackerNewsHtmlContent(string hackerNewsHtmlContent, int pageSize)
        {
            IList <HackerNewsItem> hackerNewsItem;

            HtmlDocument htmlDocument = new HtmlDocument();

            var sanitizer = new HtmlSanitizer();

            sanitizer.AllowedAttributes.Add("id");
            sanitizer.AllowedAttributes.Add("class");

            sanitizer.KeepChildNodes = false;

            var sanitized = sanitizer.SanitizeDocument(hackerNewsHtmlContent, "https://news.ycombinator.com/");

            htmlDocument.LoadHtml(sanitized);

            hackerNewsItem = ReadMainFields(htmlDocument, pageSize);

            hackerNewsItem = ReadSecondaryFields(htmlDocument, pageSize, hackerNewsItem);

            return(hackerNewsItem);
        }
        /// <summary>
        /// Display a published article
        /// </summary>
        /// <param name="id">id of article</param>
        /// <returns>View of article</returns>
        public async Task <IActionResult> Article(Guid id)
        {
            var htmlSanitizer = new HtmlSanitizer();                    //HTML sanitizer
            var articleEntity = _dbContext.Articles                     //Get article
                                .FirstOrDefault(a => a.Id == id);

            if (articleEntity == null)                                  //if null return NotFound
            {
                return(NotFound());
            }
            else if (articleEntity.Status != Status.Published)          //If not published return NotFound
            {
                return(NotFound());
            }
            var articleDto =                                            //Map to Dto
                             Mapper.Map <GetArticleDto>(articleEntity);
            var articleText = await _fileRepository                     //Load article file
                              .GetArticle(articleEntity.ArticlePath);

            articleText            = MarkdownParser.Parse(articleText).ToString(); //Parse MarkDown
            articleDto.ArticleText = htmlSanitizer                                 //Sanatize and add to DTO
                                     .SanitizeDocument(articleText);
            return(View(articleDto));                                              //return view of DTO
        }
        public async Task <IActionResult> PreviewArticle(Guid id)
        {
            var htmlSanitizer = new HtmlSanitizer();            //HTML Sanitizer
            var userEntity    = await _userManager              //Get logged in user's db entry
                                .GetUserAsync(User);

            var articleInfo = _dbContext.Articles                           //Get all articles
                              .FirstOrDefault(a => a.Id == id &&            //That match the Id in the route
                                              a.AuthorId == userEntity.Id); //and is submited by current user

            if (articleInfo == null)                                        //if null return not found
            {
                return(NotFound());
            }
            var articleText = await _fileRepository             //Read article file from disk
                              .GetArticle(articleInfo.ArticlePath);

            articleText = MarkdownParser                        //parse markdown
                          .Parse(articleText)
                          .ToString();
            articleText = htmlSanitizer                         //sanitize
                          .SanitizeDocument(articleText);
            return(View(articleText));                          //return View of Article Dto
        }