public async Task <ActionResult> ModeratorDelete(string subverse, int submissionID, int commentID) { if (!ModeratorPermission.HasPermission(User, subverse, Domain.Models.ModeratorAction.DeleteComments)) { return(HybridError(ErrorViewModel.GetErrorViewModel(ErrorType.Unauthorized))); } var q = new QueryComment(commentID); var comment = await q.ExecuteAsync(); if (comment == null || comment.SubmissionID != submissionID) { ModelState.AddModelError("", "Can not find comment. Who did this?"); return(View(new ModeratorDeleteContentViewModel())); } if (!comment.Subverse.IsEqual(subverse)) { ModelState.AddModelError("", "Data mismatch detected"); return(View(new ModeratorDeleteContentViewModel())); } ViewBag.Comment = comment; return(View(new ModeratorDeleteContentViewModel() { ID = commentID })); }
public async Task <ActionResult> ModeratorDelete(string subverse, int submissionID, ModeratorDeleteContentViewModel model) { var q = new QueryComment(model.ID); var comment = await q.ExecuteAsync(); if (comment == null || comment.SubmissionID != submissionID) { ModelState.AddModelError("", "Can not find comment. Who did this?"); return(View(new ModeratorDeleteContentViewModel())); } if (!ModeratorPermission.HasPermission(User.Identity.Name, comment.Subverse, Domain.Models.ModeratorAction.DeleteComments)) { return(new HttpUnauthorizedResult()); } if (!ModelState.IsValid) { return(View(model)); } var cmd = new DeleteCommentCommand(model.ID, model.Reason); var r = await cmd.Execute(); if (r.Success) { return(RedirectToRoute("SubverseCommentsWithSort_Short", new { subverseName = subverse, submissionID = submissionID })); } else { ModelState.AddModelError("", r.Message); return(View(model)); } }
public void Query_Comment_Anon() { var q = new QueryComment(3, null); var result = q.ExecuteAsync().Result; Assert.IsNotNull(result); Assert.AreEqual(result.ID.ToString(), result.UserName); }
public void Query_Comment_Anon() { VerifyValidHandler(); var q = new QueryComment(3, null); q.CacheHandler = handler; var result = q.ExecuteAsync().Result; Assert.IsNotNull(result); Assert.AreEqual(result.ID.ToString(), result.UserName); }
protected override RuleOutcome EvaluateRule(VoatRuleContext context) { var q = new QueryComment(context.CommentID.Value); var comment = q.Execute(); // do not execute downvoting if comment is older than 7 days var commentPostingDate = comment.CreationDate; TimeSpan timeElapsed = Repository.CurrentDate - commentPostingDate; if (timeElapsed.TotalDays > 7) { return(CreateOutcome(RuleResult.Denied, "Comment downvotes not registered after 7 days")); } return(base.EvaluateRule(context)); }
protected override RuleOutcome EvaluateRule(VoatRuleContext context) { var q = new QueryComment(context.CommentID.Value); var comment = q.Execute(); using (var repo = new Repository(context.User)) { var count = repo.VoteCount(context.UserName, comment.UserName, Domain.Models.ContentType.Comment, Domain.Models.VoteValue.Down, _timeSpan); if (count >= _threshold) { return(CreateOutcome(RuleResult.Denied, "You need a cooling down period")); } } return(base.EvaluateRule(context)); }
protected void VerifyCommentIsProtected(int submissionID, int commentID, string userName = null) { IPrincipal user = null; if (!String.IsNullOrEmpty(userName)) { user = TestHelper.SetPrincipal(userName); } //verify comment segment hides user name var q = new QueryCommentContext(submissionID, commentID).SetUserContext(user); var r = q.Execute(); Assert.IsNotNull(r, "Query response is null"); Assert.IsNotNull(r.Comments, "Comment segment is null"); VerifyCommentSegmentIsAnonProtected(r); var comment = r.Comments.FirstOrDefault(); if (!String.IsNullOrEmpty(userName)) { Assert.IsTrue(comment.IsOwner, $"Expected user {userName} to be submitter on comment {comment.ID}"); } //Ensure direct comment is protected var q2 = new QueryComment(commentID, CachePolicy.None); var r2 = q2.Execute(); Assert.IsNotNull(r2, "Query 2 response is null"); EnsureAnonIsProtected(r2); //Ensure stream comment is protected var options = new SearchOptions(); options.StartDate = r2.CreationDate.AddMinutes(-5); var q3 = new QueryComments(r2.Subverse, options, CachePolicy.None); var r3 = q3.Execute(); Assert.IsNotNull(r3, "Expecting stream endpoint to return comment"); Assert.AreNotEqual(0, r3.Count(), "Expected at least 1 comment to be returned"); foreach (var c in r3) { EnsureAnonIsProtected(c); } }
public QueryResult MapFromDatabaseToQueryResult(BsonDocument item) { QueryResult result = new QueryResult(); BsonValue val; item.TryGetValue("_id", out val); result.Id = val.AsInt32; item.TryGetValue("headline", out val); result.Headline = val.AsString; item.TryGetValue("body", out val); result.Body = val.AsString; item.TryGetValue("author", out val); result.Author = val.AsString; if (item.TryGetValue("image", out val)) { result.Image = val.AsByteArray; } result.Comments = new List <QueryComment>(); if (item.TryGetValue("comments", out val)) { var commentList = val.AsBsonArray; foreach (var comment in commentList) { QueryComment com = new QueryComment(); BsonValue temp; var commentAsDocument = comment.AsBsonDocument; commentAsDocument.TryGetValue("timestamp", out temp); com.Timestamp = temp.ToUniversalTime(); commentAsDocument.TryGetValue("text", out temp); com.Text = temp.AsString; result.Comments.Add(com); } } return(result); }
public async Task <ActionResult> ModeratorDelete(string subverse, int submissionID, int commentID) { if (!ModeratorPermission.HasPermission(User.Identity.Name, subverse, Domain.Models.ModeratorAction.DeleteComments)) { return(new HttpUnauthorizedResult()); } var q = new QueryComment(commentID); var comment = await q.ExecuteAsync(); if (comment == null || comment.SubmissionID != submissionID) { ModelState.AddModelError("", "Can not find comment. Who did this?"); return(View(new ModeratorDeleteContentViewModel())); } ViewBag.Comment = comment; return(View(new ModeratorDeleteContentViewModel() { ID = commentID })); }
public void EnsureVoteSavedIsPopulated() { TestHelper.SetPrincipal("UnitTestUser18"); var q = new QueryComment(1); var comment = q.Execute(); Assert.IsNotNull(comment, "Comment is null 1"); Assert.AreEqual(0, comment.Vote, "vote value not set for logged in user 1"); var cmd = new CommentVoteCommand(1, 1, IpHash.CreateHash(Guid.NewGuid().ToString())); var result = cmd.Execute().Result; Assert.IsNotNull(result, "Result is null"); Assert.AreEqual(Status.Success, result.Status); q = new QueryComment(1); comment = q.Execute(); Assert.IsNotNull(comment, "Comment is null 2"); Assert.AreEqual(1, comment.Vote, "vote value not set for logged in user 2"); }
private void VerifyComment(int commentID, string expectedContent, bool isDeleted) { var queryCommentDirect = new QueryComment(commentID, Caching.CachePolicy.None); var comment = queryCommentDirect.Execute(); Assert.IsNotNull(comment); Assert.IsTrue(comment.Content.Contains(expectedContent)); Assert.AreEqual(isDeleted, comment.IsDeleted); //purge cache to ensure fresh pull Caching.CacheHandler.Instance.Remove(Caching.CachingKey.CommentTree(comment.SubmissionID.Value)); var queryCommentTree = new QueryCommentSegment(comment.SubmissionID.Value); var tree = queryCommentTree.Execute(); var treeComment = tree.Comments.FirstOrDefault(x => x.ID == commentID); Assert.IsNotNull(treeComment); Assert.IsTrue(treeComment.Content.Contains(expectedContent)); Assert.AreEqual(isDeleted, treeComment.IsDeleted); }
protected override object GetMissingValue(string name) { switch (name) { case "Subverse": if (SubmissionID != null) { var cmd = new QuerySubmission(SubmissionID.Value); var submission = cmd.Execute(); PropertyBag.Submission = submission; var cmdSubverse = new QuerySubverse(submission.Subverse); var subverse = cmdSubverse.Execute(); return(subverse); } if (CommentID != null) { var cmdComment = new QueryComment(CommentID.Value); var comment = cmdComment.Execute(); PropertyBag.Comment = comment; var cmd = new QuerySubmission(comment.SubmissionID.Value); var submission = cmd.Execute(); PropertyBag.Submission = submission; var cmdSubverse = new QuerySubverse(submission.Subverse); var subverse = cmdSubverse.Execute(); return(subverse); } break; } return(base.GetMissingValue(name)); }
protected override object GetMissingValue(string name) { //TODO: This lazy loading needs to be optimized and rewritten. I. Don't. Like. This. switch (name) { case "Comment": if (CommentID != null) { var cmdComment = new QueryComment(CommentID.Value); var comment = cmdComment.Execute(); PropertyBag.Comment = comment; return(comment); } break; case "Submission": if (SubmissionID != null) { var cmd = new QuerySubmission(SubmissionID.Value); var submission = cmd.Execute(); return(submission); } if (CommentID != null) { var cmdComment = new QueryComment(CommentID.Value); var comment = cmdComment.Execute(); PropertyBag.Comment = comment; var cmd = new QuerySubmission(comment.SubmissionID.Value); var submission = cmd.Execute(); return(submission); } break; case "Subverse": if (SubmissionID != null) { var cmd = new QuerySubmission(SubmissionID.Value); var submission = cmd.Execute(); PropertyBag.Submission = submission; var cmdSubverse = new QuerySubverse(submission.Subverse); var subverse = cmdSubverse.Execute(); return(subverse); } if (CommentID != null) { var cmdComment = new QueryComment(CommentID.Value); var comment = cmdComment.Execute(); PropertyBag.Comment = comment; var cmd = new QuerySubmission(comment.SubmissionID.Value); var submission = cmd.Execute(); PropertyBag.Submission = submission; var cmdSubverse = new QuerySubverse(submission.Subverse); var subverse = cmdSubverse.Execute(); return(subverse); } break; } return(base.GetMissingValue(name)); }