Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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."
                }));
            }
        }
Exemplo n.º 5
0
        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());
        }