Пример #1
0
        public async Task ProcessPayload(CheckRunEventPayload payload, IGitHubManager gitHubManager, CancellationToken cancellationToken)
        {
            if (payload.Action != "rerequested")
            {
                return;
            }
            //nice thing about check runs we know they contain our pull request number in the title
            var prRegex = Regex.Match(payload.CheckRun.Name, "#([1-9][0-9]*)");

            if (prRegex.Success)
            {
                backgroundJobClient.Enqueue(() => ScanPullRequest(payload.Repository.Id, Convert.ToInt32(prRegex.Groups[1].Value, CultureInfo.InvariantCulture), JobCancellationToken.Null));
            }
            else
            {
                var now = DateTimeOffset.Now;
                var nmc = stringLocalizer[NaprLocalize];
                await gitHubManager.CreateCheckRun(payload.Repository.Id, new NewCheckRun
                {
                    CompletedAt = now,
                    StartedAt   = now,
                    Conclusion  = CheckConclusion.Neutral,
                    HeadBranch  = payload.CheckRun.CheckSuite.HeadBranch,
                    HeadSha     = payload.CheckRun.CheckSuite.HeadSha,
                    Name        = nmc,
                    Output      = new CheckRunOutput(nmc, String.Empty, null, null, null),
                    Status      = CheckStatus.Completed
                }, cancellationToken).ConfigureAwait(false);
            }
        }
Пример #2
0
 public CheckSuiteRequestHandler(CheckRunEventPayload payload, IPrivateKeySource keySource, Guid requestId)
 {
     GithubInstallationId = payload.Installation.Id;
     CurrentRepository    = payload.Repository;
     CommitSha            = payload.CheckRun.HeadSha;
     IsPullRequest        = false;
     RequestId            = requestId;
     Init(keySource);
 }
Пример #3
0
        /// <inheritdoc />
        public async Task ProcessPayload(CheckRunEventPayload payload, IGitHubManager gitHubManager, CancellationToken cancellationToken)
        {
            if (payload.Action != "rerequested")
            {
                return;
            }
            var prNumber = GetPullRequestNumberFromCheckRun(payload.CheckRun);

            if (prNumber.HasValue)
            {
                backgroundJobClient.Enqueue(() => ScanPullRequest(payload.Repository.Id, prNumber.Value, payload.Installation.Id, JobCancellationToken.Null));
            }
            else
            {
                await CreateUnassociatedCheck(payload.Repository.Id, payload.Installation.Id, gitHubManager, payload.CheckRun.CheckSuite.HeadSha, cancellationToken).ConfigureAwait(false);
            }
        }
Пример #4
0
        public ActionResult Default()
        {
            string actionName = Request.Headers.Get("X-GITHUB-EVENT");

            // Only the below events will be handled
            if (!actionName.Equals("check_suite", StringComparison.InvariantCultureIgnoreCase) &&
                !actionName.Equals("check_run", StringComparison.InvariantCultureIgnoreCase) &&
                !actionName.Equals("pull_request", StringComparison.InvariantCultureIgnoreCase))
            {
                return(new HttpStatusCodeResult(200));
            }

            // Obtain the body signature
            string messageSignature = Request.Headers.Get("X-HUB-Signature");

            if (string.IsNullOrEmpty(messageSignature))
            {
                return(new HttpStatusCodeResult(400));
            }

            // Read the body
            string body = GetRequestPostData(Request);

            // Validate message integrity
            if (!RequestPayloadHelper.ValidateSender(body, messageSignature, GitScanAppConfig.GetValue(Constants.GlobalSection, Constants.GitHubAppWebhookSecretKey)))
            {
                return(new HttpStatusCodeResult(400));
            }

            Guid requestId = Guid.NewGuid();

            if (actionName.Equals("check_run", StringComparison.InvariantCultureIgnoreCase))
            {
                CheckRunEventPayload checkRunPayload = RequestPayloadHelper.Parse <CheckRunEventPayload>(body);

                if (checkRunPayload.Action.Equals("rerequested", StringComparison.InvariantCultureIgnoreCase))
                {
                    CheckSuiteRequestHandler handler = new CheckSuiteRequestHandler(checkRunPayload, PrivateKeySource.Value, requestId);
                    handler.Go();
                    return(new HttpStatusCodeResult(200));
                }
                else
                {
                    return(new HttpStatusCodeResult(200));
                }
            }

            if (actionName.Equals("pull_request", StringComparison.InvariantCultureIgnoreCase))
            {
                PullRequestEventPayload pullPayload = RequestPayloadHelper.Parse <PullRequestEventPayload>(body);
                if (pullPayload.Action.Equals("opened", StringComparison.InvariantCultureIgnoreCase))
                {
                    CheckSuiteRequestHandler handler = new CheckSuiteRequestHandler(pullPayload, PrivateKeySource.Value, requestId);
                    handler.Go().Wait();
                    return(new HttpStatusCodeResult(200));
                }
                else
                {
                    return(new HttpStatusCodeResult(200));
                }
            }

            CheckSuiteEventPayload payload = RequestPayloadHelper.Parse(body);

            if (!payload.Action.Equals("rerequested", StringComparison.OrdinalIgnoreCase) &&
                (payload.CheckSuite.PullRequests == null || payload.CheckSuite.PullRequests.Count == 0))
            {
                return(new HttpStatusCodeResult(200));
            }

            if (!payload.Action.Equals("completed", StringComparison.OrdinalIgnoreCase))
            {
                CheckSuiteRequestHandler handler = new CheckSuiteRequestHandler(payload, PrivateKeySource.Value, requestId);
                handler.Go();
            }

            return(new HttpStatusCodeResult(200));
        }