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