Exemplo n.º 1
0
        public void FilterBeforePersistDoesNotAllowDuplicateComments()
        {
            //arrange
            var recentCommentChecksums = new Queue <string>();

            recentCommentChecksums.Enqueue("TestChecksum");
            var subtextContext = new Mock <ISubtextContext>();
            var cache          = new TestCache();

            cache["COMMENT FILTER:.RECENT_COMMENTS"] = recentCommentChecksums;
            subtextContext.Setup(c => c.Cache).Returns(cache);
            subtextContext.Setup(c => c.User.IsInRole("Admins")).Returns(false);
            subtextContext.Setup(c => c.Blog).Returns(new Blog {
                CommentDelayInMinutes = 0, DuplicateCommentsEnabled = false
            });
            var commentSpamFilter = new Mock <ICommentSpamService>();
            var commentFilter     = new CommentFilter(subtextContext.Object, commentSpamFilter.Object);

            //act, assert
            UnitTestHelper.AssertThrows <CommentDuplicateException>(() =>
                                                                    commentFilter.FilterBeforePersist(
                                                                        new FeedbackItem(FeedbackType.Comment)
            {
                ChecksumHash = "TestChecksum"
            })
                                                                    );
        }
Exemplo n.º 2
0
        public void FilterBeforePersistIgnoresAdminRole()
        {
            //arrange
            var subtextContext = new Mock <ISubtextContext>();
            var cache          = new TestCache();

            cache["COMMENT FILTER:127.0.0.1"] = new FeedbackItem(FeedbackType.Comment);
            subtextContext.Setup(c => c.Cache).Returns(cache);
            subtextContext.Setup(c => c.User.IsInRole("Admins")).Returns(true);
            subtextContext.Setup(c => c.Blog).Returns(new Blog {
                CommentDelayInMinutes = 1
            });
            var commentSpamFilter = new Mock <ICommentSpamService>();
            var commentFilter     = new CommentFilter(subtextContext.Object, commentSpamFilter.Object);

            //act, assert (no throw)
            commentFilter.FilterBeforePersist(new FeedbackItem(FeedbackType.PingTrack)
            {
                IpAddress = IPAddress.Parse("127.0.0.1")
            });
        }
Exemplo n.º 3
0
        public void FilterBeforePersistDoesNotAllowTooManyCommentsWithinCommentDelay()
        {
            //arrange
            var subtextContext = new Mock <ISubtextContext>();
            var cache          = new TestCache();

            cache["COMMENT FILTER:127.0.0.1"] = new FeedbackItem(FeedbackType.Comment);
            subtextContext.Setup(c => c.Cache).Returns(cache);
            subtextContext.Setup(c => c.User.IsInRole("Admins")).Returns(false); // change to true.
            subtextContext.Setup(c => c.Blog).Returns(new Blog {
                CommentDelayInMinutes = 100
            });
            var commentSpamFilter = new Mock <ICommentSpamService>();
            var commentFilter     = new CommentFilter(subtextContext.Object, commentSpamFilter.Object);

            //act, assert (no throw)
            UnitTestHelper.AssertThrows <CommentFrequencyException>(() =>
                                                                    commentFilter.FilterBeforePersist(
                                                                        new FeedbackItem(FeedbackType.Comment)
            {
                IpAddress = IPAddress.Parse("127.0.0.1")
            })
                                                                    );
        }
Exemplo n.º 4
0
        /// <summary>
        /// Creates a feedback item in the database.
        /// </summary>
        /// <param name="feedback">The feedback.</param>
        /// <param name="filter">Spam filter.</param>
        /// <returns></returns>
        public static int Create(FeedbackItem feedback, CommentFilter filter)
        {
            if (HttpContext.Current != null && HttpContext.Current.Request != null)
            {
                feedback.UserAgent = HttpContext.Current.Request.UserAgent;
                feedback.IpAddress = HttpHelper.GetUserIpAddress(HttpContext.Current);
            }

            feedback.FlaggedAsSpam = true; //We're going to start with this assumption.
            feedback.Author = HtmlHelper.SafeFormat(feedback.Author);
            feedback.Body = HtmlHelper.ConvertUrlsToHyperLinks(HtmlHelper.ConvertToAllowedHtml(feedback.Body));
            feedback.Title = HtmlHelper.SafeFormat(feedback.Title);

            // If we are creating this feedback item as part of an import, we want to
            // be sure to use the item's datetime, and not set it to the current time.
            if (NullValue.NullDateTime.Equals(feedback.DateCreated))
            {
                feedback.DateCreated = Config.CurrentBlog.TimeZone.Now;
                feedback.DateModified = feedback.DateCreated;
            }
            else if (NullValue.NullDateTime.Equals(feedback.DateModified))
            {
                feedback.DateModified = feedback.DateCreated;
            }

            if(filter != null)
                filter.FilterBeforePersist(feedback);

            feedback.Id = ObjectProvider.Instance().Create(feedback);

            if(filter != null)
                filter.FilterAfterPersist(feedback);

            // if it's not the administrator commenting and it's not a trackback.
            if (!SecurityHelper.IsAdmin && !String.IsNullOrEmpty(Config.CurrentBlog.Email) && feedback.FeedbackType != Extensibility.FeedbackType.PingTrack)
            {
                //In order to make this async, we need to pass the HttpContext.Current
                //several layers deep. Instead, we should create our own context.
                EmailCommentToAdmin(feedback, Config.CurrentBlog);
            }

            return feedback.Id;
        }