/// <summary>
        ///     Creates an instance of a serviceclient and configures it to send an event notification.
        ///     See: https://developer.github.com/webhooks/#payloads for specification
        /// </summary>
        private IServiceClient CreateServiceClient(SubscriptionRelayConfig relayConfig, string eventName, TimeSpan?timeout)
        {
            try
            {
                var client = ServiceClientFactory.Create(relayConfig.Config.Url);
                client.Timeout       = timeout;
                client.RequestFilter = request =>
                {
                    request.ContentType = MimeTypes.Json;
                    request.Headers.Remove(WebhookEventConstants.SecretSignatureHeaderName);
                    request.Headers.Remove(WebhookEventConstants.RequestIdHeaderName);
                    request.Headers.Remove(WebhookEventConstants.EventNameHeaderName);

                    if (relayConfig.Config.ContentType.HasValue())
                    {
                        request.ContentType = relayConfig.Config.ContentType;
                    }
                    if (relayConfig.Config.Secret.HasValue())
                    {
                        request.Headers.Add(WebhookEventConstants.SecretSignatureHeaderName, CreateContentHmacSignature(request, relayConfig.Config.Secret));
                    }
                    request.Headers.Add(WebhookEventConstants.RequestIdHeaderName, CreateRequestIdentifier());
                    request.Headers.Add(WebhookEventConstants.EventNameHeaderName, eventName);
                };
                return(client);
            }
            catch (Exception ex)
            {
                logger.Error(@"Failed to connect to subscriber: {0}, this URL is not valid".Fmt(relayConfig.Config.Url), ex);
                return(null);
            }
        }
        public void UpdateResults(List <SubscriptionDeliveryResult> results)
        {
            var serviceClient = ServiceClientFactory.Create(SubscriptionsBaseUrl);

            if (OnAuthenticationRequired != null)
            {
                serviceClient.OnAuthenticationRequired = () => OnAuthenticationRequired(serviceClient);
            }

            serviceClient.Put(new UpdateSubscriptionHistory
            {
                Results = results
            });
        }
        public List <SubscriptionRelayConfig> Search(string eventName)
        {
            var serviceClient = ServiceClientFactory.Create(SubscriptionsBaseUrl);

            if (OnAuthenticationRequired != null)
            {
                serviceClient.OnAuthenticationRequired = () => OnAuthenticationRequired(serviceClient);
            }

            return(serviceClient.Get(new SearchSubscriptions
            {
                EventName = eventName
            }).Subscribers);
        }