public IActionResult OnGet(string link) { if (link == null) { return(NotFound()); } var resultLink = _repository.Single(LinkSpecification.ByUrl(link)); if (resultLink == null) { return(NotFound()); } var resultTopic = _repository.SingleInclude(BaseSpecification <Topic> .ById(resultLink.TopicId), new List <ISpecification <Topic> > { TopicSpecification.IncludeQuestions() }); if (resultTopic == null) { return(NotFound()); } Questions = resultTopic.Questions; Link = link; Title = resultTopic.Title; return(Page()); }
public IActionResult OnPost() { var resultLink = _repository.Single(LinkSpecification.ByUrl(ShortcutLink)); if (resultLink == null) { return(NotFound()); } var resultTopic = _repository.SingleInclude(BaseSpecification <Topic> .ById(resultLink.TopicId), new List <ISpecification <Topic> > { TopicSpecification.IncludeQuestions() }); if (resultTopic == null) { return(NotFound()); } if (resultTopic.PreventNSFW) { if (IsNsfw(Question.Content)) { ModelState.AddModelError("Question.Content", "Question contains word/s that are considered as NSFW"); } } if (resultTopic.PreventSpam) { if (!ReCaptchaHelper.ValidateRecaptcha(Request.Form["g-recaptcha-response"])) { ModelState.AddModelError("Question.Content", "Invalid ReCaptcha"); } } switch (resultTopic.DuplicationCheck) { case DuplicationCheck.IpAddress: { if (IpAddressExists(WebHelper.GetRemoteIP, resultTopic.Id)) { ModelState.AddModelError("Question.Content", "You have already asked a question on this poll"); break; } else if (ModelState.IsValid) { AddIpAddress(resultTopic.Id); } break; } case DuplicationCheck.BrowserCookie: { const string cookieKey = "PID"; if (CookieExists(cookieKey, ShortcutLink)) { ModelState.AddModelError("Question.Content", "You have already asked a question on this poll"); break; } else if (ModelState.IsValid) { WebHelper.SetCookie(cookieKey, ShortcutLink, null); } break; } case DuplicationCheck.None: break; default: _logger.LogError($"Unkown duplication check case {resultTopic.DuplicationCheck}."); throw new InvalidEnumArgumentException("Unrecognized case value."); } if (!ModelState.IsValid) { return(Page()); } resultTopic.Questions.Add(Question); _repository.Update(resultTopic); InterrogateClient.UpdateList(ShortcutLink, Question); InterrogateClient.UpdateQuestionCount(ShortcutLink, resultTopic.Questions.Count); return(RedirectToPage("Result")); }