public bool IsValid(NewThreadViewModel thread) { return(!string.IsNullOrWhiteSpace(thread.SubwebbitId) && new StringValidator().IsLengthBetween(thread.Title, 1, 200) && !string.IsNullOrWhiteSpace(thread.Content) && !string.IsNullOrWhiteSpace(thread.Author)); }
private void EnsureThreadDetails(NewThreadViewModel thread) { if (!new ThreadValidator().IsValid(thread)) { throw new InvalidModelDetailsException(); } }
public async Task Create(NewThreadViewModel thread) { EnsureThreadDetails(thread); var newThread = new Thread(thread.Title, thread.Content, thread.Author); await Collection.UpdateOneAsync(GenerateByIdFilter <Subwebbit>(thread.SubwebbitId), UpdateBuilder.AddToSet(x => x.Threads, newThread)); }
public NewThreadPage() { this.InitializeComponent(); ViewModel = new NewThreadViewModel(); DataContext = ViewModel; }
public void MapsToViewModel() { var endpoint = TestableNewThreadEndpoint.Build(); var request = new NewThreadRequest(); var expectedViewModel = new NewThreadViewModel(); endpoint.Mapper.Setup(x => x.Map<NewThreadRequest, NewThreadViewModel>(request)).Returns(expectedViewModel); var viewModel = endpoint.NewThread(request); viewModel.ShouldEqual(expectedViewModel); }
public IActionResult New() { var user = _userManager.GetUserAsync(HttpContext.User).Result; var selectedTags = Util.GetSelectedTags(user, _context, Request); if (!selectedTags.Any()) { selectedTags = Util.GetTags(_context) .Where(tag => Util.GetRoles(user, _userManager).Contains(tag.WriteRole.Name)); } var newThreadModel = new NewThreadViewModel { Tags = Util.GetTags(_context) .Where(tag => selectedTags.Contains(tag)) .OrderBy(t => t.Name) }; return(View(newThreadModel)); }
public async Task <IHttpActionResult> Post(NewThreadViewModel thread) { await Logic.Create(thread); return(Ok()); }
public async Task <IActionResult> New(NewThreadViewModel model) { var user = await _userManager.GetUserAsync(HttpContext.User); if (Util.IsBanned(user, Util.GetCurrentIPString(Request), _context)) { return(RedirectToAction("Error", "Home")); } if (ModelState.IsValid) { var client = new HttpClient(); var akismet = new AkismetClient("https://ignorama.azurewebsites.net/", Util.AkismetKey, client); var akismetComment = new AkismetComment() { Blog = "https://ignorama.azurewebsites.net/", UserIp = Util.GetCurrentIPString(Request), UserAgent = Request.Headers["User-Agent"].ToString(), Referrer = Request.Headers["Referer"].ToString(), Permalink = "https://ignorama.azurewebsites.net/", CommentType = "forum-post", Author = user?.UserName, AuthorEmail = null, AuthorUrl = null, Content = model.Text, }; var isSpam = await akismet.IsCommentSpam(akismetComment); if (!isSpam) { var thread = new Thread { Title = model.Title, Stickied = false, Locked = false, Deleted = false, Tag = _context.Tags .Include(tag => tag.WriteRole) .Where(tag => tag.ID == model.TagID) .FirstOrDefault() }; if (!Util.GetRoles(user, _userManager).Contains(thread.Tag.WriteRole.Name)) { return(RedirectToAction("Error", "Home")); } var post = new Post { Thread = thread, User = user, Text = model.Text, Time = DateTime.UtcNow, Deleted = false, Bump = true, RevealOP = true, Anonymous = model.Anonymous, IP = Util.GetCurrentIPString(Request) }; _context.Threads.Add(thread); _context.Posts.Add(post); await _context.SaveChangesAsync(); return(RedirectToAction("View", "Threads", new { threadID = thread.ID })); } else { return(RedirectToAction("Spam", "Home")); } } return(RedirectToAction()); }
/// <summary> /// The methods provided in this section are simply used to allow /// NavigationHelper to respond to the page's navigation methods. /// <para> /// Page specific logic should be placed in event handlers for the /// <see cref="NavigationHelper.LoadState"/> /// and <see cref="NavigationHelper.SaveState"/>. /// The navigation parameter is available in the LoadState method /// in addition to page state preserved during an earlier session. /// </para> /// </summary> /// <param name="e">Provides data for navigation methods and event /// handlers that cannot cancel the navigation request.</param> protected override void OnNavigatedTo(NavigationEventArgs e) { _vm = (NewThreadViewModel)DataContext; this.navigationHelper.OnNavigatedTo(e); }