public string ping( string sourceUri, string targetUri) { if (!siteConfig.EnablePingbackService) { throw new ServiceDisabledException(); } string returnValue = "0"; if (ReferralBlackList.IsBlockedReferrer(sourceUri)) { if (siteConfig.EnableReferralUrlBlackList404s) { this.Context.Response.StatusCode = 404; this.Context.Response.End(); throw new XmlRpcFaultException(404, "not found"); } } try { string entryId = null; // OmarS: need to rewrite the URL so w can find the entryId Uri uriTargetUri = new Uri(SiteUtilities.MapUrl(targetUri)); string query = uriTargetUri.Query; if (query.Length > 0 && query[0] == '?') { query = query.Substring(1); } else { return(returnValue); } string[] queryItems = query.Split('&'); if (queryItems == null) { return(returnValue); } foreach (string queryItem in queryItems) { string[] keyvalue = queryItem.Split('='); if (keyvalue.Length == 2) { string key = keyvalue[0]; string @value = keyvalue[1]; if (key == "guid") { entryId = @value; break; } } } if (entryId != null) { Entry entry = dataService.GetEntry(entryId); if (entry != null) { Tracking t = new Tracking(); t.PermaLink = sourceUri; t.Referer = this.Context.Request.UrlReferrer != null?this.Context.Request.UrlReferrer.ToString() : String.Empty; t.RefererBlogName = sourceUri; t.RefererExcerpt = String.Empty; t.RefererTitle = sourceUri; t.TargetEntryId = entryId; t.TargetTitle = entry.Title; t.TrackingType = TrackingType.Pingback; t.RefererIPAddress = this.Context.Request.UserHostAddress; ISpamBlockingService spamBlockingService = siteConfig.SpamBlockingService; if (spamBlockingService != null) { bool isSpam = false; try { isSpam = spamBlockingService.IsSpam(t); } catch (Exception ex) { logDataService.AddEvent(new EventDataItem(EventCodes.Error, String.Format("The external spam blocking service failed for pingback from {0}. Original exception: {1}", sourceUri, ex), targetUri)); } if (isSpam) { //TODO: May provide moderation in the future. For now we just ignore the pingback logDataService.AddEvent(new EventDataItem( EventCodes.PingbackBlocked, "Pingback blocked from " + sourceUri + " because it was considered spam by the external blocking service.", targetUri, sourceUri)); System.Web.HttpContext.Current.Response.StatusCode = 404; System.Web.HttpContext.Current.Response.End(); throw new XmlRpcFaultException(404, "not found"); } } if (siteConfig.SendPingbacksByEmail && siteConfig.SmtpServer != null && siteConfig.SmtpServer.Length > 0) { MailMessage emailMessage = new MailMessage(); if (siteConfig.NotificationEMailAddress != null && siteConfig.NotificationEMailAddress.Length > 0) { emailMessage.To.Add(siteConfig.NotificationEMailAddress); } else { emailMessage.To.Add(siteConfig.Contact); } emailMessage.Subject = String.Format("Weblog pingback by '{0}' on '{1}'", sourceUri, t.TargetTitle); emailMessage.Body = String.Format("You were pinged back by\n{0}\r\non your weblog entry '{1}'\n({2}\r\n\r\nDelete Trackback: {3})", sourceUri, t.TargetTitle, SiteUtilities.GetPermaLinkUrl(entry), SiteUtilities.GetTrackbackDeleteUrl(entryId, t.PermaLink, t.TrackingType)); emailMessage.IsBodyHtml = false; emailMessage.BodyEncoding = System.Text.Encoding.UTF8; emailMessage.From = new MailAddress(siteConfig.Contact); SendMailInfo sendMailInfo = new SendMailInfo(emailMessage, siteConfig.SmtpServer, siteConfig.EnableSmtpAuthentication, siteConfig.UseSSLForSMTP, siteConfig.SmtpUserName, siteConfig.SmtpPassword, siteConfig.SmtpPort); dataService.AddTracking(t, sendMailInfo); } else { dataService.AddTracking(t); } logDataService.AddEvent( new EventDataItem(EventCodes.PingbackReceived, entry.Title, targetUri, sourceUri)); returnValue = sourceUri; } } } catch (Exception e) { ErrorTrace.Trace(System.Diagnostics.TraceLevel.Error, e); return("0"); } return(returnValue); }
protected void Page_PreRender(object sender, System.EventArgs e) { SharedBasePage requestPage = Page as SharedBasePage; Control root = this; HtmlGenericControl entry = new HtmlGenericControl("div"); if (SiteSecurity.GetUserByEmail(comment.AuthorEmail) == null) { entry.Attributes["class"] = "commentBoxStyle"; } else { entry.Attributes["class"] = "commentBoxStyle commentBoxAuthorStyle"; } root.Controls.Add(entry); HtmlGenericControl entryTitle = new HtmlGenericControl("div"); entryTitle.Attributes["class"] = "commentDateStyle"; //Add the unique anchor for each comment HtmlAnchor anchor = new HtmlAnchor(); anchor.Name = comment.EntryId; entryTitle.Controls.Add(anchor); if (requestPage.SiteConfig.AdjustDisplayTimeZone) { entryTitle.Controls.Add(new LiteralControl(requestPage.SiteConfig.GetConfiguredTimeZone().FormatAdjustedUniversalTime(comment.CreatedUtc))); } else { entryTitle.Controls.Add(new LiteralControl(comment.CreatedUtc.ToString("U") + " UTC")); } entry.Controls.Add(entryTitle); HtmlGenericControl entryBody = new HtmlGenericControl("div"); if (SiteSecurity.GetUserByEmail(comment.AuthorEmail) == null) { entryBody.Attributes["class"] = "commentBodyStyle"; } else { entryBody.Attributes["class"] = "commentBodyStyle commentBodyAuthorStyle"; } if (comment.Content != null) { entryBody.Controls.Add(new LiteralControl(Regex.Replace(comment.Content, "\n", "<br />"))); } if (!requestPage.HideAdminTools && SiteSecurity.IsInRole("admin")) { HtmlGenericControl spamStatus = new HtmlGenericControl("div"); spamStatus.Attributes["class"] = "commentSpamStateStyle"; spamStatus.InnerText = ApplicationResourceTable.GetSpamStateDescription(comment.SpamState); entryBody.Controls.Add(spamStatus); } entry.Controls.Add(entryBody); HtmlGenericControl footer = new HtmlGenericControl("div"); footer.Attributes["class"] = "commentBoxFooterStyle"; entry.Controls.Add(footer); if (requestPage.SiteConfig.CommentsAllowGravatar && String.IsNullOrEmpty(comment.AuthorEmail) == false) { string hash = ""; byte[] data, enc; data = Encoding.Default.GetBytes(comment.AuthorEmail.ToLowerInvariant()); using (MD5 md5 = new MD5CryptoServiceProvider()) { enc = md5.TransformFinalBlock(data, 0, data.Length); foreach (byte b in md5.Hash) { hash += Convert.ToString(b, 16).ToLower().PadLeft(2, '0'); } md5.Clear(); } string nogravpath = ""; if (requestPage.SiteConfig.CommentsGravatarNoImgPath != null) { if (requestPage.SiteConfig.CommentsGravatarNoImgPath != "") { if (requestPage.SiteConfig.CommentsGravatarNoImgPath.Substring(0, 4) == "http") { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.CommentsGravatarNoImgPath); } else { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.Root + requestPage.SiteConfig.CommentsGravatarNoImgPath); } } } if (String.IsNullOrEmpty(requestPage.SiteConfig.CommentsGravatarNoImgPath) == false) { if (requestPage.SiteConfig.CommentsGravatarNoImgPath == "identicon" || requestPage.SiteConfig.CommentsGravatarNoImgPath == "wavatar" || requestPage.SiteConfig.CommentsGravatarNoImgPath == "monsterid" || requestPage.SiteConfig.CommentsGravatarNoImgPath.Substring(0, 4) == "http") { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.CommentsGravatarNoImgPath); } else { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.Root + requestPage.SiteConfig.CommentsGravatarNoImgPath); } } string gravborder = ""; if (requestPage.SiteConfig.CommentsGravatarBorder != null) { if (requestPage.SiteConfig.CommentsGravatarBorder != "") { gravborder = "&border=" + requestPage.SiteConfig.CommentsGravatarBorder; } } string gravsize = ""; if (requestPage.SiteConfig.CommentsGravatarSize != null) { if (requestPage.SiteConfig.CommentsGravatarSize != "") { gravsize = "&size=" + requestPage.SiteConfig.CommentsGravatarSize; } } string gravrating = ""; if (requestPage.SiteConfig.CommentsGravatarRating != null) { if (requestPage.SiteConfig.CommentsGravatarRating != "") { gravrating = "&rating=" + requestPage.SiteConfig.CommentsGravatarRating; } } HtmlGenericControl entryGRAVATAR = new HtmlGenericControl("span"); entryGRAVATAR.Attributes["class"] = "commentGravatarBlock"; entryGRAVATAR.InnerHtml = "<img class=\"commentGravatar\" src=\"http://www.gravatar.com/avatar.php?gravatar_id=" + hash + gravrating + gravsize + nogravpath + gravborder + "\"/>"; footer.Controls.Add(entryGRAVATAR); } string authorLink = null; if (comment.AuthorHomepage != null && comment.AuthorHomepage.Length > 0) { authorLink = FixUrl(comment.AuthorHomepage); } else if (comment.AuthorEmail != null && comment.AuthorEmail.Length > 0) { if (!requestPage.SiteConfig.SupressEmailAddressDisplay) { authorLink = "mailto:" + SiteUtilities.SpamBlocker(comment.AuthorEmail); } } if (authorLink != null) { HyperLink link = new HyperLink(); link.Attributes["class"] = "commentPermalinkStyle"; link.NavigateUrl = authorLink; link.Text = comment.Author; link.Attributes.Add("rel", "nofollow"); footer.Controls.Add(link); if (comment.OpenId) { System.Web.UI.WebControls.Image i = new System.Web.UI.WebControls.Image(); i.ImageUrl = "~/images/openid-icon-small.gif"; i.CssClass = "commentOpenId"; link.Controls.Add(i); Literal l = new Literal(); l.Text = comment.Author; link.Controls.Add(l); } } else { Label l = new Label(); l.Attributes["class"] = "commentPermalinkStyle"; l.Text = comment.Author; footer.Controls.Add(l); } if (!requestPage.SiteConfig.SupressEmailAddressDisplay) { if (comment.AuthorEmail != null && comment.AuthorEmail.Length > 0) { footer.Controls.Add(new LiteralControl(" | ")); HtmlGenericControl mailto = new HtmlGenericControl("span"); footer.Controls.Add(mailto); HyperLink link = new HyperLink(); link.CssClass = "commentMailToStyle"; link.NavigateUrl = "mailto:" + SiteUtilities.SpamBlocker(comment.AuthorEmail); link.Text = SiteUtilities.SpamBlocker(comment.AuthorEmail); mailto.Controls.Add(link); } } if (!requestPage.HideAdminTools && SiteSecurity.IsInRole("admin")) { if (!string.IsNullOrEmpty(comment.AuthorIPAddress)) { try { if (requestPage.SiteConfig.ResolveCommenterIP == true) { System.Net.IPHostEntry hostInfo = System.Net.Dns.GetHostEntry(comment.AuthorIPAddress); footer.Controls.Add( new LiteralControl(" (" + comment.AuthorIPAddress + " " + hostInfo.HostName + ") ")); } else { footer.Controls.Add(new LiteralControl(" (" + comment.AuthorIPAddress + ") ")); } } catch { footer.Controls.Add(new LiteralControl(" (" + comment.AuthorIPAddress + ") ")); } } footer.Controls.Add(new LiteralControl(" ")); // create delete hyperlink HyperLink deleteHl = new HyperLink(); deleteHl.CssClass = "deleteLinkStyle"; System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image(); img.CssClass = "deleteLinkImageStyle"; img.ImageUrl = new Uri(new Uri(SiteUtilities.GetBaseUrl(requestPage.SiteConfig)), requestPage.GetThemedImageUrl("deletebutton")).ToString(); img.BorderWidth = 0; deleteHl.Controls.Add(img); deleteHl.NavigateUrl = String.Format("javascript:deleteComment(\"{0}\", \"{1}\", \"{2}\")", Comment.TargetEntryId, Comment.EntryId, Comment.Author == null ? String.Empty : Comment.Author.Replace("\"", "\\\"")); ResourceManager resmgr = resmgr = ApplicationResourceTable.Get(); if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "deleteCommentScript")) { // add the javascript to allow deletion of the comment string scriptString = "<script type=\"text/javascript\" language=\"JavaScript\">\n"; scriptString += "function deleteComment(entryId, commentId, commentFrom)\n"; scriptString += "{\n"; scriptString += String.Format(" if(confirm(\"{0} \\n\\n\" + commentFrom))\n", resmgr.GetString("text_delete_confirm")); scriptString += " {\n"; scriptString += " location.href=\"deleteItem.ashx?entryid=\" + entryId + \"&commentId=\" + commentId\n"; scriptString += " }\n"; scriptString += "}\n"; scriptString += "</script>"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "deleteCommentScript", scriptString); } footer.Controls.Add(deleteHl); // create approve hyperlink, when a comment is not public or if its marked as spam if ((!Comment.IsPublic) || (Comment.SpamState == SpamState.Spam)) { HyperLink approveHl = new HyperLink(); approveHl.CssClass = "approveLinkStyle"; System.Web.UI.WebControls.Image okImg = new System.Web.UI.WebControls.Image(); okImg.CssClass = "approveImageStyle"; okImg.ImageUrl = new Uri(new Uri(SiteUtilities.GetBaseUrl(requestPage.SiteConfig)), requestPage.GetThemedImageUrl("okbutton-list")).ToString(); okImg.BorderWidth = 0; approveHl.Controls.Add(okImg); approveHl.NavigateUrl = String.Format("javascript:approveComment(\"{0}\", \"{1}\")", Comment.TargetEntryId, Comment.EntryId); if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "approveCommentScript")) { string approveScript = "<script type=\"text/javascript\" language=\"JavaScript\">\n"; approveScript += "function approveComment(entryId, commentId)\n"; approveScript += "{\n"; approveScript += " location.href=\"approveItem.ashx?entryid=\" + entryId + \"&commentId=\" + commentId\n"; approveScript += "}\n"; approveScript += "</script>"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "approveCommentScript", approveScript); } footer.Controls.Add(approveHl); } ISpamBlockingService spamBlockingService = requestPage.SiteConfig.SpamBlockingService; if ((spamBlockingService != null) && (comment.SpamState != SpamState.Spam)) { HyperLink reportSpamLink = new HyperLink(); reportSpamLink.CssClass = "approveLinkStyle"; System.Web.UI.WebControls.Image spamImg = new System.Web.UI.WebControls.Image(); spamImg.CssClass = "approveImageStyle"; spamImg.ImageUrl = new Uri(new Uri(SiteUtilities.GetBaseUrl(requestPage.SiteConfig)), requestPage.GetThemedImageUrl("reportspambutton")).ToString(); spamImg.BorderWidth = 0; reportSpamLink.Controls.Add(spamImg); reportSpamLink.NavigateUrl = String.Format("javascript:reportComment(\"{0}\", \"{1}\", \"{2}\")", Comment.TargetEntryId, Comment.EntryId, Comment.Author == null ? String.Empty : Comment.Author.Replace("\"", "\\\"")); string reportScript = "<script type=\"text/javascript\" language=\"JavaScript\">\n"; reportScript += "function reportComment(entryId, commentId, commentFrom)\n"; reportScript += "{\n"; reportScript += String.Format(" if(confirm(\"{0} \\n\\n\" + commentFrom))\n", resmgr.GetString("text_reportspam_confirm")); reportScript += " {\n"; reportScript += " location.href=\"deleteItem.ashx?report=true&entryid=\" + entryId + \"&commentId=\" + commentId\n"; reportScript += " }\n"; reportScript += "}\n"; reportScript += "</script>"; if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "reportCommentScript")) { Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "reportCommentScript", reportScript); } footer.Controls.Add(reportSpamLink); } } }
public void ProcessRequest(HttpContext context) { SiteConfig siteConfig = SiteConfig.GetSiteConfig(); string entryId; string title; string excerpt; string url; string blog_name; if (!siteConfig.EnableTrackbackService) { context.Response.StatusCode = 503; context.Response.Status = "503 Service Unavailable"; context.Response.End(); return; } // Try blocking them once, on the off chance they sent us a referrer string referrer = context.Request.UrlReferrer != null?context.Request.UrlReferrer.AbsoluteUri:""; if (ReferralBlackList.IsBlockedReferrer(referrer)) { if (siteConfig.EnableReferralUrlBlackList404s) { context.Response.StatusCode = 404; context.Response.End(); return; } } entryId = context.Request.QueryString["guid"]; if (context.Request.HttpMethod == "POST") { title = context.Request.Form["title"]; excerpt = context.Request.Form["excerpt"]; url = context.Request.Form["url"]; blog_name = context.Request.Form["blog_name"]; } /* GET is no longer in the Trackback spec. Keeping * this arround for testing. Just uncomment. * else if ( context.Request.HttpMethod == "GET" ) * { * title = context.Request.QueryString["title"]; * excerpt= context.Request.QueryString["excerpt"]; * url = context.Request.QueryString["url"]; * blog_name = context.Request.QueryString["blog_name"]; * } */ else { context.Response.Redirect(SiteUtilities.GetStartPageUrl(siteConfig)); return; } if (url != null && url.Length > 0) { try { // First line of defense, try blocking again with the URL they are tracking us back with if (ReferralBlackList.IsBlockedReferrer(url)) { if (siteConfig.EnableReferralUrlBlackList404s) { context.Response.StatusCode = 404; context.Response.End(); return; } } ILoggingDataService logService = LoggingDataServiceFactory.GetService(SiteConfig.GetLogPathFromCurrentContext()); IBlogDataService dataService = BlogDataServiceFactory.GetService(SiteConfig.GetContentPathFromCurrentContext(), logService); Entry entry = dataService.GetEntry(entryId); if (entry != null) { try { string requestBody = null; // see if this is a spammer HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest; webRequest.Method = "GET"; webRequest.UserAgent = SiteUtilities.GetUserAgent(); HttpWebResponse response = webRequest.GetResponse() as HttpWebResponse; // now we want to get the page contents of the target body using (StreamReader requestReader = new StreamReader(response.GetResponseStream())) { requestBody = requestReader.ReadToEnd(); } response.Close(); // the source URL in the page could be URL encoded like the ClickThroughHandler does string urlEncodedBaseUrl = HttpUtility.UrlEncode(SiteUtilities.GetBaseUrl()); // check to see if the source's page contains a link to us if (Regex.Match(requestBody, SiteUtilities.GetBaseUrl()).Success == false && Regex.Match(requestBody, urlEncodedBaseUrl).Success == false) { logService.AddEvent(new EventDataItem( EventCodes.TrackbackBlocked, context.Request.UserHostAddress + " because it did not contain a link", SiteUtilities.GetPermaLinkUrl(entryId), url, entry.Title )); context.Response.StatusCode = 404; context.Response.End(); return; } } catch { // trackback url is not even alive logService.AddEvent(new EventDataItem( EventCodes.TrackbackBlocked, context.Request.UserHostAddress + " because the server did not return a valid response", SiteUtilities.GetPermaLinkUrl(entryId), url, entry.Title )); context.Response.StatusCode = 404; context.Response.End(); return; } // if we've gotten this far, the trackback is real and valid Tracking t = new Tracking(); t.PermaLink = url; t.Referer = context.Request.UrlReferrer != null?context.Request.UrlReferrer.ToString() : String.Empty; t.RefererBlogName = blog_name; t.RefererExcerpt = excerpt; t.RefererTitle = title; t.RefererIPAddress = context.Request.UserHostAddress; t.TargetEntryId = entryId; t.TargetTitle = entry.Title; t.TrackingType = TrackingType.Trackback; ISpamBlockingService spamBlockingService = siteConfig.SpamBlockingService; if (spamBlockingService != null) { bool isSpam = false; try { isSpam = spamBlockingService.IsSpam(t); } catch (Exception ex) { logService.AddEvent(new EventDataItem(EventCodes.Error, String.Format("The external spam blocking service failed for trackback from {0}. Original exception: {1}", t.PermaLink, ex), SiteUtilities.GetPermaLinkUrl(entryId))); } if (isSpam) { //TODO: maybe we can add a configuration option to moderate trackbacks. // For now, we'll just avoid saving suspected spam logService.AddEvent(new EventDataItem( EventCodes.TrackbackBlocked, context.Request.UserHostAddress + " because it was considered spam by the external blocking service.", SiteUtilities.GetPermaLinkUrl(entryId), url, entry.Title )); context.Response.StatusCode = 404; context.Response.End(); return; } } if (siteConfig.SendTrackbacksByEmail && siteConfig.SmtpServer != null && siteConfig.SmtpServer.Length > 0) { MailMessage emailMessage = new MailMessage(); if (siteConfig.NotificationEMailAddress != null && siteConfig.NotificationEMailAddress.Length > 0) { emailMessage.To.Add(siteConfig.NotificationEMailAddress); } else { emailMessage.To.Add(siteConfig.Contact); } emailMessage.Subject = String.Format("Weblog trackback by '{0}' on '{1}'", t.PermaLink, t.TargetTitle); emailMessage.Body = String.Format("You were tracked back from\n{0}\r\non your weblog entry '{1}'\n({2}\r\n\r\nDelete Trackback: {3})", t.PermaLink, t.TargetTitle, SiteUtilities.GetPermaLinkUrl(entryId), SiteUtilities.GetTrackbackDeleteUrl(entryId, t.PermaLink, t.TrackingType)); emailMessage.IsBodyHtml = false; emailMessage.BodyEncoding = System.Text.Encoding.UTF8; emailMessage.From = new MailAddress(siteConfig.Contact); SendMailInfo sendMailInfo = new SendMailInfo(emailMessage, siteConfig.SmtpServer, siteConfig.EnableSmtpAuthentication, siteConfig.UseSSLForSMTP, siteConfig.SmtpUserName, siteConfig.SmtpPassword, siteConfig.SmtpPort); dataService.AddTracking(t, sendMailInfo); } else { dataService.AddTracking(t); } logService.AddEvent( new EventDataItem( EventCodes.TrackbackReceived, entry.Title, SiteUtilities.GetPermaLinkUrl(entryId), url)); // return the correct Trackback response // http://www.movabletype.org/docs/mttrackback.html context.Response.Write("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><response><error>0</error></response>"); return; } } catch (System.Threading.ThreadAbortException ex) { // absorb ErrorTrace.Trace(System.Diagnostics.TraceLevel.Error, ex); return; } catch (Exception exc) { // absorb ErrorTrace.Trace(System.Diagnostics.TraceLevel.Error, exc); // return the correct Trackback response // http://www.movabletype.org/docs/mttrackback.html context.Response.Write("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><response><error>1</error><message>" + exc.ToString() + "</message></response>"); return; } } if (entryId != null && entryId.Length > 0) { context.Response.Redirect(SiteUtilities.GetPermaLinkUrl(siteConfig, entryId)); } else { context.Response.Redirect(SiteUtilities.GetStartPageUrl(siteConfig)); } }
public void ProcessRequest(HttpContext context) { if (!SiteSecurity.IsValidContributor()) { context.Response.Redirect("~/FormatPage.aspx?path=SiteConfig/accessdenied.format.html"); } SiteConfig siteConfig = SiteConfig.GetSiteConfig(); string entryId; string commentId; string referralPermalink; string type; string redirectUrl = SiteUtilities.GetStartPageUrl(); bool reportAsSpam; entryId = context.Request.QueryString["entryId"]; commentId = context.Request.QueryString["commentId"]; referralPermalink = context.Request.QueryString["referralPermalink"]; type = context.Request.QueryString["type"]; reportAsSpam = context.Request.QueryString["report"] != null; // make sure the entry param is there if (entryId == null || entryId.Length == 0) { context.Response.Redirect(SiteUtilities.GetStartPageUrl(siteConfig)); return; } else { try { ILoggingDataService logService = LoggingDataServiceFactory.GetService(SiteConfig.GetLogPathFromCurrentContext()); IBlogDataService dataService = BlogDataServiceFactory.GetService(SiteConfig.GetContentPathFromCurrentContext(), logService); Entry entry = dataService.GetEntry(entryId); if (entry != null) { if (commentId != null && commentId.Length > 0) { if (reportAsSpam) { ISpamBlockingService spamBlockingService = siteConfig.SpamBlockingService; if (spamBlockingService != null) { Comment comment = dataService.GetCommentById(entryId, commentId); if ((comment != null) && (comment.SpamState != SpamState.Spam)) { try { spamBlockingService.ReportSpam(comment); } catch (Exception ex) { logService.AddEvent(new EventDataItem(EventCodes.Error, String.Format("Unable to report comment {0} as spam. Original exception: {1}", comment.EntryId, ex), SiteUtilities.GetPermaLinkUrl(entryId))); } } } } dataService.DeleteComment(entryId, commentId); logService.AddEvent( new EventDataItem( EventCodes.CommentDeleted, commentId, SiteUtilities.GetPermaLinkUrl(entryId))); redirectUrl = SiteUtilities.GetCommentViewUrl(entryId); } else if (referralPermalink != null && referralPermalink.Length > 0) { TrackingType trackingType = TrackingType.Referral; if (type != null && type.Length != 0) { trackingType = (TrackingType)Enum.Parse(typeof(TrackingType), type); } dataService.DeleteTracking(entryId, referralPermalink, trackingType); logService.AddEvent( new EventDataItem( EventCodes.ItemReferralDeleted, referralPermalink, SiteUtilities.GetPermaLinkUrl(entryId))); redirectUrl = SiteUtilities.GetPermaLinkUrl(entryId); } else // it must be an entry we are deleting { SiteUtilities.DeleteEntry(entryId, siteConfig, logService, dataService); redirectUrl = SiteUtilities.GetStartPageUrl(); } } } catch (Exception exc) { // absorb ErrorTrace.Trace(System.Diagnostics.TraceLevel.Error, exc); } } context.Response.Redirect(redirectUrl); }