public ActionResult Image(int?code)
        {
            if (code == null)
            {
                code = IdenticonUtil.Code(HttpContext.Request.UserHostAddress);
            }

            string etag = IdenticonUtil.ETag(code.Value, Size);

            if (HttpContext != null && HttpContext.Request != null && HttpContext.Request.Headers != null && HttpContext.Request.Headers["If-None-Match"] == etag)
            {
                // browser already has the image cached
                return(new NotModifiedResult());
            }

            return(new IdenticonResult(code.Value, Size, etag));
        }
        public void Image_WithRequestMatchingEtag_ReturnsNotModifiedResult()
        {
            // arrange
            string etag              = IdenticonUtil.ETag(-1234, 40);
            var    controller        = new IdenticonController();
            var    controllerContext = new Mock <ControllerContext>();

            controller.ControllerContext = controllerContext.Object;
            controllerContext.Setup(c => c.HttpContext.Request.Headers).Returns(new NameValueCollection {
                { "If-None-Match", etag }
            });

            // act
            var result = controller.Image(-1234) as NotModifiedResult;

            // assert
            Assert.IsNotNull(result);
        }
Пример #3
0
        // Customizes the display row for each comment.
        protected void CommentsCreated(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                var feedbackItem = (FeedbackItem)e.Item.DataItem;
                _comment = new CommentViewModel(feedbackItem, SubtextContext);
                if (feedbackItem != null)
                {
                    var title = (Literal)(e.Item.FindControl("Title"));
                    if (title != null)
                    {
                        // we should probably change skin format to dynamically wire up to
                        // skin located title and permalinks at some point
                        title.Text = string.Format(CultureInfo.InvariantCulture, "{2}&nbsp;{0}{1}",
                                                   Anchor(feedbackItem.Id),
                                                   feedbackItem.Title,
                                                   Link(feedbackItem.Title, Url.FeedbackUrl(feedbackItem)));
                    }

                    //Shows the name of the commenter with a link if provided.
                    var namelink = (HyperLink)e.Item.FindControl("NameLink");
                    if (namelink != null)
                    {
                        if (feedbackItem.SourceUrl != null)
                        {
                            namelink.NavigateUrl = feedbackItem.SourceUrl.ToString();
                            ControlHelper.SetTitleIfNone(namelink, feedbackItem.SourceUrl.ToString());
                        }

                        if (feedbackItem.FeedbackType == FeedbackType.Comment)
                        {
                            namelink.Text = feedbackItem.Author;
                            ControlHelper.SetTitleIfNone(namelink, feedbackItem.Author);
                        }
                        else if (feedbackItem.FeedbackType == FeedbackType.PingTrack)
                        {
                            namelink.Text = !String.IsNullOrEmpty(feedbackItem.Author)
                                                ? feedbackItem.Author
                                                : "Pingback/TrackBack";
                            ControlHelper.SetTitleIfNone(namelink, "PingBack/TrackBack");
                        }

                        if (feedbackItem.IsBlogAuthor)
                        {
                            HtmlHelper.AppendCssClass(namelink, "author");
                        }
                    }

                    var postDate = (Literal)(e.Item.FindControl("PostDate"));
                    if (postDate != null)
                    {
                        postDate.Text = feedbackItem.DateCreated.ToShortDateString() + " " +
                                        feedbackItem.DateCreated.ToShortTimeString();
                    }

                    var post = e.Item.FindControl("PostText") as Literal;
                    if (post != null)
                    {
                        if (feedbackItem.Body.Length > 0)
                        {
                            post.Text = feedbackItem.Body;
                            if (feedbackItem.Body.Length == 0 && feedbackItem.FeedbackType == FeedbackType.PingTrack)
                            {
                                post.Text = "Pingback / Trackback";
                            }
                        }
                    }

                    if (_gravatarService.Enabled)
                    {
                        var gravatarImage = e.Item.FindControl("GravatarImg") as Image;
                        if (gravatarImage != null)
                        {
                            //This allows per-skin configuration of the default gravatar image.
                            string defaultGravatarImage = gravatarImage.Attributes["PlaceHolderImage"];

                            string ip;
                            if (feedbackItem.IpAddress != null)
                            {
                                ip = feedbackItem.IpAddress.ToString();
                            }
                            else
                            {
                                ip = string.Format("{0} {1}", DateTime.Now.Millisecond, DateTime.Now.Second);
                            }

                            //This allows a host-wide setting of the default gravatar image.
                            string gravatarUrl = null;
                            if (!String.IsNullOrEmpty(feedbackItem.Email))
                            {
                                if (!String.IsNullOrEmpty(defaultGravatarImage))
                                {
                                    string host             = Request.Url.Host;
                                    string scheme           = Request.Url.Scheme;
                                    string port             = Request.Url.Port == 80 ? string.Empty : string.Format(":{0}", Request.Url.Port);
                                    string defaultImagePath = HttpHelper.ExpandTildePath(defaultGravatarImage);
                                    defaultGravatarImage = string.Format(CultureInfo.InvariantCulture, "{0}://{1}{2}{3}",
                                                                         scheme, host, port, defaultImagePath);
                                    defaultGravatarImage = HttpUtility.UrlEncode(defaultGravatarImage);
                                }
                                gravatarUrl = _gravatarService.GenerateUrl(feedbackItem.Email, defaultGravatarImage);
                            }
                            if (!String.IsNullOrEmpty(gravatarUrl))
                            {
                                gravatarImage.Attributes.Remove("PlaceHolderImage");
                                if (gravatarUrl.Length != 0)
                                {
                                    gravatarImage.ImageUrl = gravatarUrl;
                                    gravatarImage.Visible  = true;
                                }
                            }
                            else
                            {
                                string identiconUrl = Url.IdenticonUrl(IdenticonUtil.Code(ip));
                                gravatarImage.ImageUrl = identiconUrl;
                                gravatarImage.Visible  = true;
                            }
                        }
                    }

                    if (Request.IsAuthenticated && SecurityHelper.IsAdmin)
                    {
                        var editCommentTextLink = (HyperLink)(e.Item.FindControl("EditCommentTextLink"));
                        if (editCommentTextLink != null)
                        {
                            editCommentTextLink.NavigateUrl = AdminUrl.FeedbackEdit(feedbackItem.Id);
                            if (String.IsNullOrEmpty(editCommentTextLink.Text))
                            {
                                editCommentTextLink.Text = "Edit Comment " +
                                                           feedbackItem.Id.ToString(CultureInfo.InstalledUICulture);
                            }
                            ControlHelper.SetTitleIfNone(editCommentTextLink, "Click to edit this entry.");
                        }
                        var editCommentImgLink = (HyperLink)(e.Item.FindControl("EditCommentImgLink"));
                        if (editCommentImgLink != null)
                        {
                            editCommentImgLink.NavigateUrl = AdminUrl.FeedbackEdit(feedbackItem.Id);
                            if (String.IsNullOrEmpty(editCommentImgLink.ImageUrl))
                            {
                                editCommentImgLink.ImageUrl = Url.EditIconUrl();
                            }
                            ControlHelper.SetTitleIfNone(editCommentImgLink,
                                                         "Click to edit comment " +
                                                         feedbackItem.Id.ToString(CultureInfo.InstalledUICulture));
                        }
                    }
                }
            }
        }
 public void Code_WithNullIp_ThrowsArgumentNullException()
 {
     UnitTestHelper.AssertThrowsArgumentNullException(() => IdenticonUtil.Code(null));
 }
 public void CodeReturnsProperHash(string ip, string salt, long expectedCode)
 {
     IdenticonUtil.Salt = salt;
     Assert.AreEqual(expectedCode, IdenticonUtil.Code(ip));
 }