public async Task <IActionResult> ToggleHidden([FromBody] ThreadIDModel t) { var user = await _userManager.GetUserAsync(HttpContext.User); var thread = _context.Threads.Find(t.ThreadID); if (thread != null) { var hiddenThreadRows = Util.GetHiddenThreadMatches(user, thread, _context, Request); if (!hiddenThreadRows.Any()) { var hiddenThread = new HiddenThread { Thread = thread, User = user, IP = user == null ? Util.GetCurrentIPString(Request) : null }; await _context.AddAsync(hiddenThread); } else { foreach (HiddenThread row in hiddenThreadRows) { _context.Remove(row); } } await _context.SaveChangesAsync(); return(new OkObjectResult(t.ThreadID)); } else { return(new BadRequestObjectResult(thread)); } }
public async Task <IActionResult> ToggleSelectedTag([FromBody] TagIDModel t) { var user = await _userManager.GetUserAsync(HttpContext.User); var tag = _context.Tags.Find(t.TagID); if (tag != null) { var selectedTagRows = Util.GetSelectedTagMatches(user, tag, _context, Request); if (!selectedTagRows.Any()) { var selectedTag = new SelectedTag { Tag = tag, User = user, IP = user == null ? Util.GetCurrentIPString(Request) : null }; await _context.AddAsync(selectedTag); } else { foreach (SelectedTag row in selectedTagRows) { _context.Remove(row); } } await _context.SaveChangesAsync(); return(new OkObjectResult(t.TagID)); } else { return(new BadRequestObjectResult(tag)); } }
public async Task <bool> AddPostAsync(int topicId, string postMessage) { _logger.LogInformation($"Adding new post{{topicId: {topicId}; postMessage: {postMessage}}}"); if (postMessage.Length == 0) { _logger.LogError($"Adding new post failed, message is empty!"); return(false); } IdentityUser?user = await _userManager.GetUserAsync(_httpContextAccessor.HttpContext.User); if (user == null) { _logger.LogError($"Adding new post failed, current user is null!"); return(false); } Topic?topic = await _forumContext.Topics.FindAsync(topicId); if (topic == null) { _logger.LogError($"Adding new post failed, there is no such topic!"); return(false); } Post newPost = new Post { Author = user, Message = postMessage, TimePublished = DateTime.Now, Topic = topic, TopicId = topicId }; await _forumContext.AddAsync(newPost); await _forumContext.SaveChangesAsync(); _logger.LogInformation($"Have successfully added new post: {newPost}"); return(true); }
public async Task <IActionResult> New(int threadID, IFormCollection collection) { var thread = _context.Threads .Include(t => t.Posts) .ThenInclude(p => p.User) .Where(t => t.ID == threadID) .FirstOrDefault(); var user = await _userManager.GetUserAsync(HttpContext.User); var canBump = Util.CanBump( thread.Posts.FirstOrDefault().User, thread.Posts.FirstOrDefault().IP, user, Util.GetCurrentIPString(Request)); var isOP = Util.IsOP( thread.Posts.FirstOrDefault().User, thread.Posts.FirstOrDefault().IP, user, Util.GetCurrentIPString(Request)); collection.TryGetValue("Text", out StringValues text); if (Util.IsBanned(user, Util.GetCurrentIPString(Request), _context)) { return(RedirectToAction("Error", "Home")); } 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/Threads/View/" + threadID.ToString(), CommentType = "reply", Author = user?.UserName, AuthorEmail = null, AuthorUrl = null, Content = text, }; var isSpam = await akismet.IsCommentSpam(akismetComment); if (!isSpam) { try { var roles = Util.GetRoles(user, _userManager); if (!thread.Locked || roles.Contains("Moderator")) { collection.TryGetValue("Anonymous", out StringValues anonymous); collection.TryGetValue("Bump", out StringValues bump); collection.TryGetValue("RevealOP", out StringValues revealOP); var post = new Post { Thread = thread, User = user, IP = Util.GetCurrentIPString(Request), Text = text, Time = DateTime.UtcNow, Deleted = false, Anonymous = anonymous == "on" ? true : false, Bump = bump == "on" && canBump ? true : false, RevealOP = revealOP == "on" && isOP ? true : false, }; await _context.AddAsync(post); await _context.SaveChangesAsync(); return(new OkObjectResult(collection)); } else { return(new JsonResult(new { error = "Cannot post reply: thread locked." })); } } catch { return(new BadRequestObjectResult(collection)); } } else { return(new JsonResult(new { error = "Cannot post reply: Spam detected. If this was in error, please contact the administrator." })); } }
public async Task <IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (ModelState.IsValid) { var user = new User { UserName = Input.UserName }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { _logger.LogInformation("User created a new account with password."); await _signInManager.SignInAsync(user, isPersistent : false); var loggedInUser = await _context.Users.Where(u => u.UserName == Input.UserName).FirstOrDefaultAsync(); await _userManager.AddToRoleAsync(user, "User"); var ipFollowedThreads = _context.FollowedThreads .Where(thread => thread.IP == Util.GetCurrentIPString(Request)) .Include(thread => thread.Thread); foreach (FollowedThread followedThread in ipFollowedThreads) { await _context.AddAsync(new FollowedThread { User = loggedInUser, Thread = followedThread.Thread, LastSeenPostID = followedThread.LastSeenPostID }); } var ipHiddenThreads = _context.HiddenThreads .Where(thread => thread.IP == Util.GetCurrentIPString(Request)) .Include(thread => thread.Thread); foreach (HiddenThread hiddenThread in ipHiddenThreads) { await _context.AddAsync(new HiddenThread { User = loggedInUser, Thread = hiddenThread.Thread }); } var ipSelectedTags = _context.SelectedTags .Where(tag => tag.IP == Util.GetCurrentIPString(Request)) .Include(tag => tag.Tag); foreach (SelectedTag selectedTag in ipSelectedTags) { await _context.AddAsync(new SelectedTag { User = loggedInUser, Tag = selectedTag.Tag }); } await _context.SaveChangesAsync(); return(LocalRedirect(returnUrl)); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return(Page()); }