public async Task <KnownCommenterResponse> IsKnownCommenter(string username, string email)
        {
            var response = new KnownCommenterResponse
            {
                Username = username,
                Email    = email,
            };

            try
            {
                var knownCommentersContents =
                    await _github.Repository.Content.GetAllContents(_owner, _repo, _knownCommentersPath);

                var knownCommentersContent = knownCommentersContents.FirstOrDefault();
                response.FileExists      = knownCommentersContent != null;
                response.KnownCommenters = knownCommentersContent?.Content;
                response.Sha             = knownCommentersContent?.Sha;

                var row = CreateKnownCommenterRow(username, email);
                response.IsKnownCommenter = response.KnownCommenters?.Contains(row, StringComparison.InvariantCultureIgnoreCase) ?? false;
            }
            catch (Octokit.NotFoundException)
            {
            }

            return(response);
        }
Beispiel #2
0
 private void CheckKnownCommenter(KnownCommenterResponse knownCommenterResponse, StringBuilder reasonForModeration)
 {
     if (!knownCommenterResponse.IsKnownCommenter)
     {
         reasonForModeration.AppendLine(
             $"User '{knownCommenterResponse.Username}' hasn't commented before.");
     }
 }
        private static string AddKnownCommenterToCsvContent(KnownCommenterResponse knownCommenterResponse)
        {
            var allCommenters = new StringBuilder(knownCommenterResponse.KnownCommenters);

            string row = CreateKnownCommenterRow(knownCommenterResponse.Username, knownCommenterResponse.Email);

            allCommenters.AppendLine(row);

            return(allCommenters.ToString());
        }
        private async Task CreateOrUpdateKnownCommentersFile(KnownCommenterResponse knownCommenterResponse, string branch)
        {
            var message = $"Add known commenter '{knownCommenterResponse.Username}'";
            var content = AddKnownCommenterToCsvContent(knownCommenterResponse);

            if (knownCommenterResponse.FileExists)
            {
                var updateFileRequest = new UpdateFileRequest(message, content, knownCommenterResponse.Sha, branch);
                await _github.Repository.Content.UpdateFile(_owner, _repo, _knownCommentersPath, updateFileRequest);
            }
            else
            {
                var createFileRequest = new CreateFileRequest(message, content, branch);
                await _github.Repository.Content.CreateFile(_owner, _repo, _knownCommentersPath, createFileRequest);
            }
        }
        public async Task AddComment(Comment comment, ModerationAnalysisReport report, KnownCommenterResponse knownCommenterResponse)
        {
            string yaml = CommentSerializer.SerializeToYaml(comment);

            var message = $"Add comment to '{comment.Slug}' by '{comment.Name}'";
            var path    = Path.Combine(_commentDataPath, comment.Slug, $"comment-{comment.Date.Ticks}.yml");
            var branch  = _branch;

            if (report.NeedsModeration)
            {
                branch = $"sc2g-{comment.Slug}-{comment.Date.Ticks}";
                await CreateNewBranch(branch);
            }

            var createFileRequest = new CreateFileRequest(message, yaml, branch);
            await _github.Repository.Content.CreateFile(_owner, _repo, path, createFileRequest);

            if (!knownCommenterResponse.IsKnownCommenter)
            {
                await CreateOrUpdateKnownCommentersFile(knownCommenterResponse, branch);
            }

            if (report.NeedsModeration)
            {
                var newPullRequest = new NewPullRequest(message, branch, _branch);
                newPullRequest.Body = report.ReasonForModeration;
                await _github.Repository.PullRequest.Create(_owner, _repo, newPullRequest);
            }
        }
Beispiel #6
0
        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()
            });
        }