Esempio n. 1
0
 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));
 }
Esempio n. 2
0
 private void EnsureThreadDetails(NewThreadViewModel thread)
 {
     if (!new ThreadValidator().IsValid(thread))
     {
         throw new InvalidModelDetailsException();
     }
 }
Esempio n. 3
0
 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));
 }
Esempio n. 4
0
        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);
            }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        public async Task <IHttpActionResult> Post(NewThreadViewModel thread)
        {
            await Logic.Create(thread);

            return(Ok());
        }
Esempio n. 8
0
        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());
        }
Esempio n. 9
0
 /// <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);
 }