public async Task <AkismetResponse> IsSpam(HttpRequest req, Comment comment, FormContents formContents) { var userAgent = req.Headers["User-Agent"]; var blog = new Uri(_settings.AkismetBlogUrl); using (var akismetClient = new AkismetClient(_settings.AkismetApiKey, blog, userAgent)) { var akismetResult = await akismetClient.IsSpam2(new AkismetComment { Blog = blog, CommentAuthor = comment.Name, CommentAuthorEmail = formContents.Fields.Email, CommentContent = comment.Body, CommentType = "comment", // https://akismet.com/development/api/#comment-check Permalink = formContents.Options.Origin, Referrer = req.Headers["Referer"], UserAgent = userAgent, UserIp = req.HttpContext.Connection.RemoteIpAddress.ToString() }); var response = new AkismetResponse { IsSpam = akismetResult.IsSpam, Text = akismetResult.Text, ProTip = akismetResult.ProTip, DebugHelp = akismetResult.DebugHelp }; _log.LogDebug("Akismet result: {0}", response); return(response); } }
private void CheckAkismet(AkismetResponse akismetResponse, StringBuilder reasonForModeration) { if (akismetResponse.IsSpam) { reasonForModeration.AppendLine("Akismet says it's spam"); } if (string.Compare(akismetResponse.ProTip, "discard", StringComparison.InvariantCultureIgnoreCase) == 0) { reasonForModeration.AppendLine("Akismet pro-tip is 'discard'"); } }
public ModerationAnalysisReport NeedsModeration(Comment comment, RecaptchaResponse recaptchaResponse, AkismetResponse akismetResponse, KnownCommenterResponse knownCommenterResponse) { var reasonForModeration = new StringBuilder(); CheckReCaptcha(recaptchaResponse, reasonForModeration); CheckAkismet(akismetResponse, reasonForModeration); CheckKnownCommenter(knownCommenterResponse, reasonForModeration); if (reasonForModeration.Length > 0) { _log.LogInformation("Comment needs moderation because: {0}", reasonForModeration.ToString()); } else { _log.LogInformation("Comment does not need moderation"); } return(new ModerationAnalysisReport { NeedsModeration = reasonForModeration.Length > 0, ReasonForModeration = reasonForModeration.ToString() }); }