protected override async Task <JobResult> ProcessQueueEntryAsync(QueueEntryContext <WebHookNotification> context) { WebHookNotification body = context.QueueEntry.Value; bool shouldLog = body.ProjectId != Settings.Current.InternalProjectId; _logger.Trace().Project(body.ProjectId).Message("Process web hook call: id={0} project={1} url={2}", context.QueueEntry.Id, body.ProjectId, body.Url).WriteIf(shouldLog); var client = new HttpClient(); try { var response = await client.PostAsJsonAsync(body.Url, body.Data.ToJson(Formatting.Indented, _jsonSerializerSettings), context.CancellationToken).AnyContext(); if (response.StatusCode == HttpStatusCode.Gone) { _logger.Warn().Project(body.ProjectId).Message("Deleting web hook: org={0} project={1} url={2}", body.OrganizationId, body.ProjectId, body.Url).Write(); await _webHookRepository.RemoveAsync(body.WebHookId).AnyContext(); } _logger.Info().Project(body.ProjectId).Message("Web hook POST complete: status={0} org={1} project={2} url={3}", response.StatusCode, body.OrganizationId, body.ProjectId, body.Url).WriteIf(shouldLog); } catch (Exception ex) { return(JobResult.FromException(ex)); } return(JobResult.Success); }
private async Task RemoveIntegrationAsync(WebHookNotification body) { switch (body.Type) { case WebHookType.General: await _webHookRepository.RemoveAsync(body.WebHookId).AnyContext(); break; case WebHookType.Slack: var project = await _projectRepository.GetByIdAsync(body.ProjectId).AnyContext(); var token = project?.GetSlackToken(); if (token == null) { return; } await _slackService.RevokeAccessTokenAsync(token.AccessToken).AnyContext(); if (project.NotificationSettings.Remove(Project.NotificationIntegrations.Slack) | project.Data.Remove(Project.KnownDataKeys.SlackToken)) { await _projectRepository.SaveAsync(project, o => o.Cache()); } break; } }