public async Task SendEvent(IHiarcEvent theEvent) { try { var accessKeyId = _kinesisSettings.AccessKeyId; var secretAccessKey = _kinesisSettings.SecretAccessKey; var streamName = _kinesisSettings.Stream; var partitionKey = theEvent.Event; var kinesisClient = new AmazonKinesisClient(accessKeyId, secretAccessKey, _region); var serializedEvent = JsonSerializer.Serialize(theEvent); using var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(theEvent.Event)); var requestRecord = new PutRecordRequest() { StreamName = streamName, PartitionKey = partitionKey, Data = memoryStream }; var responseRecord = await kinesisClient.PutRecordAsync(requestRecord); _logger.LogDebug($"Successfully sent event '{theEvent.Event}' to '{this.Name}'. Payload: {serializedEvent}"); } catch (Exception ex) { _logger.LogError($"Failed to send event '{theEvent.Event}' to '{this.Name}'. Exception: {ex.Message}"); } }
public async Task SendEvent(IHiarcEvent theEvent) { foreach (var es in _eventServices) { await Task.Run(() => { es.SendEvent(theEvent); }); } }
public async Task SendEvent(IHiarcEvent theEvent) { try { var serializedEvent = JsonSerializer.Serialize(theEvent); var httpContent = new StringContent(serializedEvent); httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); if (!string.IsNullOrWhiteSpace(_webhookSettings.Secret)) { // TODO: https://stripe.com/docs/webhooks/signatures var unixNow = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); var payload = $"{unixNow}.{serializedEvent}"; var encoding = new UTF8Encoding(); var keyBytes = encoding.GetBytes(_webhookSettings.Secret); var textBytes = encoding.GetBytes(payload); using HMACSHA256 hash = new HMACSHA256(keyBytes); var hashBytes = hash.ComputeHash(textBytes); var hashString = BitConverter.ToString(hashBytes).Replace("-", "").ToLower(); var signature = $"t={unixNow},v1={hashString}"; httpContent.Headers.Add(HIARC_SIGNATURE, signature); } var response = await WebhookClient.PostAsync(_webhookSettings.URL, httpContent); if (response.IsSuccessStatusCode) { _logger.LogDebug($"Successfully sent event '{theEvent.Event}' to '{this.Name}'. Payload: {serializedEvent}"); } else { var body = await response.Content.ReadAsStringAsync(); _logger.LogError($"Failed to send event to '{this.Name}'. Response Body: {body}"); } } catch (Exception ex) { _logger.LogError($"Failed to send event to '{this.Name}'. Exception: {ex.Message}"); } }
public async Task SendEvent(IHiarcEvent theEvent) { try { var topicClient = new TopicClient(_serviceBusSettings.ConnectionString, _serviceBusSettings.Topic); var serializedEvent = JsonSerializer.Serialize(theEvent); var message = new Message(Encoding.UTF8.GetBytes(serializedEvent)) { ContentType = "application/json", MessageId = Guid.NewGuid().ToString() }; await topicClient.SendAsync(message); _logger.LogDebug($"Successfully sent event '{theEvent.Event}' to '{this.Name}'. Payload: {serializedEvent}"); } catch (Exception ex) { _logger.LogError($"Failed to send event to '{this.Name}'. Exception: {ex.Message}"); } }
public async Task SendEvent(IHiarcEvent theEvent) { try { var serializedEvent = JsonSerializer.Serialize(theEvent); var topicName = new TopicName(_pubSubSettings.ProjectId, _pubSubSettings.Topic); var sacByteArray = Encoding.UTF8.GetBytes(_pubSubSettings.ServiceAccountCredential); var sacStream = new MemoryStream(sacByteArray); var credential = GoogleCredential.FromServiceAccountCredential(ServiceAccountCredential.FromServiceAccountData(sacStream)); var createSettings = new ClientCreationSettings(credentials: credential.ToChannelCredentials()); var publisher = await CreateAsync(topicName, clientCreationSettings : createSettings); var messageId = await publisher.PublishAsync(serializedEvent); await publisher.ShutdownAsync(TimeSpan.FromSeconds(10)); _logger.LogDebug($"Successfully sent event '{theEvent.Event}' to '{this.Name}'. Payload: {serializedEvent}"); } catch (Exception ex) { _logger.LogError($"Failed to send event '{theEvent.Event}' to '{this.Name}'. Exception: {ex.Message}"); } }