public ActionResult Details(int id, string slug, Guid key) { var post = RavenSession .Include<Post>(x => x.CommentsId) .Include(x => x.AuthorId) .Load(id); if (post == null) return HttpNotFound(); if (post.IsPublicPost(key) == false) return HttpNotFound(); var comments = RavenSession.Load<PostComments>(post.CommentsId) ?? new PostComments(); var vm = new PostViewModel { Post = post.MapTo<PostViewModel.PostDetails>(), Comments = comments.Comments.MapTo<PostViewModel.Comment>(), NextPost = RavenSession.GetNextPrevPost(post, true), PreviousPost = RavenSession.GetNextPrevPost(post, false), AreCommentsClosed = comments.AreCommentsClosed(post, BlogConfig.NumberOfDayToCloseComments), }; vm.Post.Author = RavenSession.Load<User>(post.AuthorId).MapTo<PostViewModel.UserDetails>(); var comment = TempData["new-comment"] as CommentInput; if (comment != null) { vm.Comments.Add(new PostViewModel.Comment { CreatedAt = DateTimeOffset.Now.ToString(), Author = comment.Name, Body = MarkdownResolver.Resolve(comment.Body), Id = -1, Url = UrlResolver.Resolve(comment.Url), Tooltip = "Comment by " + comment.Name, EmailHash = EmailHashResolver.Resolve(comment.Email) }); } if (vm.Post.Slug != slug) return RedirectToActionPermanent("Details", new { id, vm.Post.Slug }); SetWhateverUserIsTrustedCommenter(vm); return View("Details", vm); }
private void SetWhateverUserIsTrustedCommenter(PostViewModel vm) { if (Request.IsAuthenticated) { var user = RavenSession.GetCurrentUser(); vm.Input = user.MapTo<CommentInput>(); vm.IsTrustedCommenter = true; vm.IsLoggedInCommenter = true; return; } var cookie = Request.Cookies[CommenterUtil.CommenterCookieName]; if (cookie == null) return; var commenter = RavenSession.GetCommenter(cookie.Value); if (commenter == null) { vm.IsLoggedInCommenter = false; Response.Cookies.Set(new HttpCookie(CommenterUtil.CommenterCookieName) { Expires = DateTime.Now.AddYears(-1) }); return; } vm.IsLoggedInCommenter = string.IsNullOrWhiteSpace(commenter.OpenId) == false; vm.Input = commenter.MapTo<CommentInput>(); vm.IsTrustedCommenter = commenter.IsTrustedCommenter == true; }