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); }
// 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} {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)); }