public StatusCode Register() { WebhookSettings settings = new WebhookSettings() { Url = EndpointRoute, Subscription = Subscription }; string json = JsonConvert.SerializeObject((WebhookSettingsDTO)settings); var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://chatapi.viber.com/pa/set_webhook"); httpWebRequest.Headers.Add("X-Viber-Auth-Token", AuthToken); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); string result = string.Empty; using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { result = streamReader.ReadToEnd(); } RegistrationResponse info = JsonConvert.DeserializeObject <RegistrationResponse>(result); return((StatusCode)info.status); }
private WebhookSettings GetwebhookSettings(IServiceProvider provider) { var webhookSettings = new WebhookSettings(); Configuration.GetSection($"Values:{nameof(XeroConfiguration)}:{nameof(WebhookSettings)}").Bind(webhookSettings); return(webhookSettings); }
public ValidationFailure Test(WebhookSettings settings) { try { NotifyWebhook( new WebhookPayload { EventType = "Test", Series = new WebhookSeries() { Id = 1, Title = "Test Title", Path = "C:\\testpath", TvdbId = 1234 }, Episodes = new List<WebhookEpisode>() { new WebhookEpisode() { Id = 123, EpisodeNumber = 1, SeasonNumber = 1, Title = "Test title" } } }, settings ); } catch (WebhookException ex) { return new NzbDroneValidationFailure("Url", ex.Message); } return null; }
private Client(string apiKey, string username, string password, HttpClient httpClient, bool disposeClient, StrongGridClientOptions options) { _mustDisposeHttpClient = disposeClient; _httpClient = httpClient; _options = options ?? GetDefaultOptions(); _fluentClient = new FluentClient(new Uri(SENDGRID_V3_BASE_URI), httpClient) .SetUserAgent(Client.UserAgent) .SetRequestCoordinator(new SendGridRetryStrategy()); _fluentClient.Filters.Remove <DefaultErrorFilter>(); // Order is important: DiagnosticHandler must be first. // Also, the list of filters must be kept in sync with the filters in Utils.GetFluentClient in the unit testing project. _fluentClient.Filters.Add(new DiagnosticHandler(_options.LogLevelSuccessfulCalls, _options.LogLevelFailedCalls)); _fluentClient.Filters.Add(new SendGridErrorHandler()); if (!string.IsNullOrEmpty(apiKey)) { _fluentClient.SetBearerAuthentication(apiKey); } if (!string.IsNullOrEmpty(username)) { _fluentClient.SetBasicAuthentication(username, password); } AccessManagement = new AccessManagement(_fluentClient); Alerts = new Alerts(_fluentClient); ApiKeys = new ApiKeys(_fluentClient); Batches = new Batches(_fluentClient); Blocks = new Blocks(_fluentClient); Bounces = new Bounces(_fluentClient); Campaigns = new Campaigns(_fluentClient); Categories = new Categories(_fluentClient); Contacts = new Contacts(_fluentClient); CustomFields = new CustomFields(_fluentClient); Designs = new Designs(_fluentClient); EmailActivities = new EmailActivities(_fluentClient); EmailValidation = new EmailValidation(_fluentClient); GlobalSuppressions = new GlobalSuppressions(_fluentClient); InvalidEmails = new InvalidEmails(_fluentClient); IpAddresses = new IpAddresses(_fluentClient); IpPools = new IpPools(_fluentClient); Lists = new Lists(_fluentClient); Mail = new Mail(_fluentClient); Segments = new Segments(_fluentClient); SenderIdentities = new SenderIdentities(_fluentClient); Settings = new Settings(_fluentClient); SpamReports = new SpamReports(_fluentClient); Statistics = new Statistics(_fluentClient); Subusers = new Subusers(_fluentClient); Suppressions = new Suppressions(_fluentClient); Teammates = new Teammates(_fluentClient); Templates = new Templates(_fluentClient); UnsubscribeGroups = new UnsubscribeGroups(_fluentClient); User = new User(_fluentClient); WebhookSettings = new WebhookSettings(_fluentClient); WebhookStats = new WebhookStats(_fluentClient); SenderAuthentication = new SenderAuthentication(_fluentClient); }
private Client(string apiKey, string username, string password, string baseUri, string apiVersion, HttpClient httpClient) { _mustDisposeHttpClient = httpClient == null; _httpClient = httpClient; #if DEBUG Version = "DEBUG"; #else var assemblyVersion = typeof(Client).GetTypeInfo().Assembly.GetName().Version; Version = $"{assemblyVersion.Major}.{assemblyVersion.Minor}.{assemblyVersion.Build}"; #endif _fluentClient = new FluentClient(new Uri($"{baseUri.TrimEnd('/')}/{apiVersion.TrimStart('/')}"), httpClient) .SetUserAgent($"StrongGrid/{Version} (+https://github.com/Jericho/StrongGrid)") .SetRequestCoordinator(new SendGridRetryStrategy()); _fluentClient.Filters.Remove <DefaultErrorFilter>(); _fluentClient.Filters.Add(new DiagnosticHandler()); _fluentClient.Filters.Add(new SendGridErrorHandler()); if (!string.IsNullOrEmpty(apiKey)) { _fluentClient.SetBearerAuthentication(apiKey); } if (!string.IsNullOrEmpty(username)) { _fluentClient.SetBasicAuthentication(username, password); } AccessManagement = new AccessManagement(_fluentClient); Alerts = new Alerts(_fluentClient); ApiKeys = new ApiKeys(_fluentClient); Batches = new Batches(_fluentClient); Blocks = new Blocks(_fluentClient); Bounces = new Bounces(_fluentClient); Campaigns = new Campaigns(_fluentClient); Categories = new Categories(_fluentClient); Contacts = new Contacts(_fluentClient); CustomFields = new CustomFields(_fluentClient); GlobalSuppressions = new GlobalSuppressions(_fluentClient); InvalidEmails = new InvalidEmails(_fluentClient); IpAddresses = new IpAddresses(_fluentClient); IpPools = new IpPools(_fluentClient); Lists = new Lists(_fluentClient); Mail = new Mail(_fluentClient); Segments = new Segments(_fluentClient); SenderIdentities = new SenderIdentities(_fluentClient); Settings = new Settings(_fluentClient); SpamReports = new SpamReports(_fluentClient); Statistics = new Statistics(_fluentClient); Subusers = new Subusers(_fluentClient); Suppressions = new Suppressions(_fluentClient); Teammates = new Teammates(_fluentClient); Templates = new Templates(_fluentClient); UnsubscribeGroups = new UnsubscribeGroups(_fluentClient); User = new User(_fluentClient); WebhookSettings = new WebhookSettings(_fluentClient); WebhookStats = new WebhookStats(_fluentClient); Whitelabel = new Whitelabel(_fluentClient); }
public WebhookService(ILogger <WebhookService> logger, HttpClient client, WebhookSettings settings) { _logger = logger; _settings = settings; client.BaseAddress = new Uri("https://discord.com/api/"); _client = client; }
public static void DoWork(OperationController operation) { System.Globalization.CultureInfo before = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); operation.Reset(); var sw = new Stopwatch(); try { sw.Start(); var fInfo = new FileInfo(operation.InputFile); var parser = new EvtcParser(new EvtcParserSettings(Properties.Settings.Default.Anonymous, Properties.Settings.Default.SkipFailedTries, Properties.Settings.Default.ParsePhases, Properties.Settings.Default.ParseCombatReplay, Properties.Settings.Default.ComputeDamageModifiers, Properties.Settings.Default.CustomTooShort, Properties.Settings.Default.DetailledWvW), APIController); //Process evtc here ParsedEvtcLog log = parser.ParseLog(operation, fInfo, out GW2EIEvtcParser.ParserHelpers.ParsingFailureReason failureReason); if (failureReason != null) { failureReason.Throw(); } var externalTraces = new List <string>(); string[] uploadresult = UploadOperation(externalTraces, fInfo); if (Properties.Settings.Default.SendEmbedToWebhook && Properties.Settings.Default.UploadToDPSReports) { var webhookSettings = new WebhookSettings(Properties.Settings.Default.WebhookURL, !Properties.Settings.Default.SendSimpleMessageToWebhook ? BuildEmbed(log, uploadresult[0]) : null); WebhookController.SendMessage(externalTraces, uploadresult[0], webhookSettings); } foreach (string trace in externalTraces) { operation.UpdateProgress(trace); } if (uploadresult[0].Contains("https")) { operation.DPSReportLink = uploadresult[0]; } //Creating File GenerateFiles(log, operation, uploadresult, fInfo); } catch (Exception ex) { throw new ProgramException(ex); } finally { sw.Stop(); GC.Collect(); Thread.CurrentThread.CurrentCulture = before; operation.Elapsed = ("Elapsed " + sw.ElapsedMilliseconds + " ms"); } }
public WebhookEventService(string name, IOptions <WebhookSettings> webhookSettings, ILogger <HiarcEventServiceProvider> logger) { _name = name; _webhookSettings = webhookSettings.Value; _logger = logger; var serviceProvider = new ServiceCollection().AddHttpClient().BuildServiceProvider(); clientFactory = serviceProvider.GetService <IHttpClientFactory>(); }
public void OnRename(Series series, WebhookSettings settings) { var payload = new WebhookPayload { EventType = "Rename", Series = new WebhookSeries(series) }; NotifyWebhook(payload, settings); }
/// <summary> /// Initializes a new instance of the <see cref="BaseClient" /> class. /// </summary> /// <param name="apiKey">Your api key.</param> /// <param name="httpClient">Allows you to inject your own HttpClient. This is useful, for example, to setup the HtppClient with a proxy.</param> /// <param name="disposeClient">Indicates if the http client should be dispose when this instance of BaseClient is disposed.</param> /// <param name="options">Options for the SendGrid client.</param> /// <param name="logger">Logger.</param> public BaseClient(string apiKey, HttpClient httpClient, bool disposeClient, StrongGridClientOptions options, ILogger logger = null) { _mustDisposeHttpClient = disposeClient; _httpClient = httpClient; _options = options; _logger = logger ?? NullLogger.Instance; _fluentClient = new FluentClient(new Uri(SENDGRID_V3_BASE_URI), httpClient) .SetUserAgent($"StrongGrid/{Version} (+https://github.com/Jericho/StrongGrid)") .SetRequestCoordinator(new SendGridRetryStrategy()); _fluentClient.Filters.Remove <DefaultErrorFilter>(); // Remove all the built-in formatters and replace them with our custom JSON formatter _fluentClient.Formatters.Clear(); _fluentClient.Formatters.Add(new JsonFormatter()); // Order is important: DiagnosticHandler must be first. // Also, the list of filters must be kept in sync with the filters in Utils.GetFluentClient in the unit testing project. _fluentClient.Filters.Add(new DiagnosticHandler(_options.LogLevelSuccessfulCalls, _options.LogLevelFailedCalls, _logger)); _fluentClient.Filters.Add(new SendGridErrorHandler()); if (string.IsNullOrEmpty(apiKey)) { throw new ArgumentNullException(apiKey); } _fluentClient.SetBearerAuthentication(apiKey); AccessManagement = new AccessManagement(FluentClient); Alerts = new Alerts(FluentClient); ApiKeys = new ApiKeys(FluentClient); Batches = new Batches(FluentClient); Blocks = new Blocks(FluentClient); Bounces = new Bounces(FluentClient); Designs = new Designs(FluentClient); EmailActivities = new EmailActivities(FluentClient); EmailValidation = new EmailValidation(FluentClient); GlobalSuppressions = new GlobalSuppressions(FluentClient); InvalidEmails = new InvalidEmails(FluentClient); IpAddresses = new IpAddresses(FluentClient); IpPools = new IpPools(FluentClient); Mail = new Mail(FluentClient); Settings = new Settings(FluentClient); SpamReports = new SpamReports(FluentClient); Statistics = new Statistics(FluentClient); Subusers = new Subusers(FluentClient); Suppressions = new Suppressions(FluentClient); Teammates = new Teammates(FluentClient); Templates = new Templates(FluentClient); UnsubscribeGroups = new UnsubscribeGroups(FluentClient); User = new User(FluentClient); WebhookSettings = new WebhookSettings(FluentClient); WebhookStats = new WebhookStats(FluentClient); SenderAuthentication = new SenderAuthentication(FluentClient); }
/// <summary> /// Webhook. Реигстрация /// </summary> /// <param name="endpointRouteURL"></param> /// <returns></returns> // public StatusCode RemovingYourWebhook(string endpointRouteURL) public string RegisterWebhook_my_VbAPI_1(string webhookUrl) // ++ { string result = string.Empty; try { WebhookSettings settings = new WebhookSettings() { Url = webhookUrl // Subscription = Subscription }; string json = JsonConvert.SerializeObject((WebhookSettings)settings); var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://chatapi.viber.com/pa/set_webhook"); httpWebRequest.Headers.Add("X-Viber-Auth-Token", _authToken); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); // string result = string.Empty; using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { result = streamReader.ReadToEnd(); } // RegistrationResponse info = JsonConvert.DeserializeObject<RegistrationResponse>(result); // return (StatusCode)info.status; result = json + " \r\n - // - \r\n " + result; // result = json; } catch (Exception ex) { string s = ex.Message; string t = ex.StackTrace; // throw; //MessageBox.Show(s + " \r\n " // + t); } return(result); }
public void NotifyWebhook(WebhookPayload body, WebhookSettings settings) { try { var client = RestClientFactory.BuildClient(settings.Url); var request = new RestRequest((Method) settings.Method); request.RequestFormat = DataFormat.Json; request.AddBody(body); client.ExecuteAndValidate(request); } catch (RestException ex) { throw new WebhookException("Unable to post to webhook: {0}", ex, ex.Message); } }
public void OnGrab(Series series, RemoteEpisode episode, QualityModel quality, WebhookSettings settings) { var payload = new WebhookPayload { EventType = "Grab", Series = new WebhookSeries(series), Episodes = episode.Episodes.ConvertAll(x => new WebhookEpisode(x) { Quality = quality.Quality.Name, QualityVersion = quality.Revision.Version, ReleaseGroup = episode.ParsedEpisodeInfo.ReleaseGroup }) }; NotifyWebhook(payload, settings); }
public async Task UpdateEventWebhookSettingsAsync() { // Arrange var enabled = true; var url = "url"; var bounce = true; var click = true; var deferred = true; var delivered = true; var dropped = true; var groupResubscribe = true; var groupUnsubscribe = true; var open = true; var processed = true; var spamReport = true; var unsubscribe = true; var apiResponse = @"{ 'enabled': true, 'url': 'url', 'group_resubscribe': true, 'delivered': true, 'group_unsubscribe': true, 'spam_report': true, 'bounce': true, 'deferred': true, 'unsubscribe': true, 'processed': true, 'open': true, 'click': true, 'dropped': true }" ; var mockHttp = new MockHttpMessageHandler(); mockHttp.Expect(new HttpMethod("PATCH"), Utils.GetSendGridApiUri(EVENT_ENDPOINT, "settings")).Respond("application/json", apiResponse); var client = Utils.GetFluentClient(mockHttp); var webhooks = new WebhookSettings(client); // Act var result = await webhooks.UpdateEventWebhookSettingsAsync(enabled, url, bounce, click, deferred, delivered, dropped, groupResubscribe, groupUnsubscribe, open, processed, spamReport, unsubscribe, null, CancellationToken.None).ConfigureAwait(false); // Assert mockHttp.VerifyNoOutstandingExpectation(); mockHttp.VerifyNoOutstandingRequest(); result.ShouldNotBeNull(); }
public void OnDownload(Series series, EpisodeFile episodeFile, WebhookSettings settings) { var payload = new WebhookPayload { EventType = "Download", Series = new WebhookSeries(series), Episodes = episodeFile.Episodes.Value.ConvertAll(x => new WebhookEpisode(x) { Quality = episodeFile.Quality.Quality.Name, QualityVersion = episodeFile.Quality.Revision.Version, ReleaseGroup = episodeFile.ReleaseGroup, SceneName = episodeFile.SceneName }) }; NotifyWebhook(payload, settings); }
public async Task GetEventWebhookSettingsAsync() { // Arrange var apiResponse = @"{ 'enabled': true, 'url': 'url', 'group_resubscribe': true, 'delivered': true, 'group_unsubscribe': true, 'spam_report': true, 'bounce': true, 'deferred': true, 'unsubscribe': true, 'processed': true, 'open': true, 'click': true, 'dropped': true }" ; var mockHttp = new MockHttpMessageHandler(); mockHttp.Expect(HttpMethod.Get, Utils.GetSendGridApiUri(EVENT_ENDPOINT, "settings")).Respond("application/json", apiResponse); var client = Utils.GetFluentClient(mockHttp); var webhooks = new WebhookSettings(client); // Act var result = await webhooks.GetEventWebhookSettingsAsync(null, CancellationToken.None).ConfigureAwait(false); // Assert mockHttp.VerifyNoOutstandingExpectation(); mockHttp.VerifyNoOutstandingRequest(); result.ShouldNotBeNull(); result.Url.ShouldBe("url"); result.GroupResubscribe.ShouldBe(true); result.Delivered.ShouldBe(true); result.GroupUnsubscribe.ShouldBe(true); result.SpamReport.ShouldBe(true); result.Bounce.ShouldBe(true); result.Deferred.ShouldBe(true); result.Unsubscribe.ShouldBe(true); result.Processed.ShouldBe(true); result.Open.ShouldBe(true); result.Click.ShouldBe(true); result.Dropped.ShouldBe(true); }
public bool Webhook([FromBody] WebhookSettings settings) { try { settings.Enabled = true; WebhookNotification.NotifyAsync( new NotificationOptions { NotificationType = NotificationType.Test, RequestId = -1 }, settings); return(true); } catch (Exception e) { Log.LogError(LoggingEvents.Api, e, "Could not test your webhook"); return(false); } }
public async Task SendEventTestAsync() { // Arrange var url = "url"; var mockHttp = new MockHttpMessageHandler(); mockHttp.Expect(new HttpMethod("POST"), Utils.GetSendGridApiUri(EVENT_ENDPOINT, "test")).Respond(HttpStatusCode.NoContent); var client = Utils.GetFluentClient(mockHttp); var webhooks = new WebhookSettings(client); // Act await webhooks.SendEventTestAsync(url, null, CancellationToken.None).ConfigureAwait(false); // Assert mockHttp.VerifyNoOutstandingExpectation(); mockHttp.VerifyNoOutstandingRequest(); }
public void SendTest() { // Arrange var url = "url"; var mockHttp = new MockHttpMessageHandler(); mockHttp.Expect(new HttpMethod("POST"), Utils.GetSendGridApiUri("user/webhooks/event/test")).Respond(HttpStatusCode.NoContent); var client = Utils.GetFluentClient(mockHttp); var webhooks = new WebhookSettings(client); // Act webhooks.SendTestAsync(url, CancellationToken.None).Wait(); // Assert mockHttp.VerifyNoOutstandingExpectation(); mockHttp.VerifyNoOutstandingRequest(); }
public async Task GetInboundParseWebhookSettings() { // Arrange var hostname = "myhostname.com"; var mockHttp = new MockHttpMessageHandler(); mockHttp.Expect(HttpMethod.Get, Utils.GetSendGridApiUri(INBOUNDPARSE_ENDPOINT, "settings", hostname)).Respond("application/json", SINGLE_INBOUNDPARSE_WEBHOOK_SETTING_JSON); var client = Utils.GetFluentClient(mockHttp); var webhooks = new WebhookSettings(client); // Act var result = await webhooks.GetInboundParseWebhookSettingsAsync(hostname, null, CancellationToken.None).ConfigureAwait(false); // Assert mockHttp.VerifyNoOutstandingExpectation(); mockHttp.VerifyNoOutstandingRequest(); result.ShouldNotBeNull(); }
public static PayloadSignatureTuple CreateSamplePayload(int numberOfEvents, bool useValidSigningKey, int firstSequenceNumber) { var sampleEvents = CreateThisManyEvents(numberOfEvents); var payload = new Payload { Events = sampleEvents, FirstEventSequence = firstSequenceNumber, LastEventSequence = firstSequenceNumber + numberOfEvents - 1 }; var payloadString = JsonConvert.SerializeObject(payload); string signature; if (useValidSigningKey) { var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build(); var webhookSettings = configuration.GetSection("WebhookSettings").Get <WebhookSettings>(); signature = new SignatureVerifier(webhookSettings).GenerateSignature(payloadString); } else { var webhookSettings = new WebhookSettings { SigningKey = "InvalidKey" }; signature = new SignatureVerifier(webhookSettings).GenerateSignature(payloadString); } return(new PayloadSignatureTuple(payload, signature)); }
public async Task GetAllInboundParseWebhookSettings() { // Arrange var apiResponse = "{'result':[" + SINGLE_INBOUNDPARSE_WEBHOOK_SETTING_JSON + "," + SINGLE_INBOUNDPARSE_WEBHOOK_SETTING_JSON + "]}"; var mockHttp = new MockHttpMessageHandler(); mockHttp.Expect(HttpMethod.Get, Utils.GetSendGridApiUri(INBOUNDPARSE_ENDPOINT, "settings")).Respond("application/json", apiResponse); var client = Utils.GetFluentClient(mockHttp); var webhooks = new WebhookSettings(client); // Act var result = await webhooks.GetAllInboundParseWebhookSettings(CancellationToken.None).ConfigureAwait(false); // Assert mockHttp.VerifyNoOutstandingExpectation(); mockHttp.VerifyNoOutstandingRequest(); result.ShouldNotBeNull(); result.Length.ShouldBe(2); }
public SignatureVerifier(WebhookSettings settings) { _settings = settings; }
private void ConfigureServices() { _eventServices = new List <IEventService>(); foreach (var es in _hiarcSettings.EventServices) { if (!es.Enabled) { continue; } if (es.Provider == AWS_KINESIS) { var settings = new KinesisSettings { AccessKeyId = ((dynamic)es.Config).AccessKeyId, SecretAccessKey = ((dynamic)es.Config).SecretAccessKey, RegionSystemName = ((dynamic)es.Config).RegionSystemName, Stream = ((dynamic)es.Config).Stream }; IOptions <KinesisSettings> kinesisSettings = Options.Create(settings); IEventService kinesisService = new KinesisEventService(es.Name, kinesisSettings, _logger); _eventServices.Add(kinesisService); } else if (es.Provider == AZURE_SERVICE_BUS) { var settings = new ServiceBusSettings { ConnectionString = ((dynamic)es.Config).ConnectionString, Topic = ((dynamic)es.Config).Topic }; IOptions <ServiceBusSettings> serviceBusSettings = Options.Create(settings); IEventService serviceBusService = new ServiceBusEventService(es.Name, serviceBusSettings, _logger); _eventServices.Add(serviceBusService); } else if (es.Provider == GOOGLE_PUBSUB) { var settings = new PubSubSettings { ServiceAccountCredential = ((dynamic)es.Config).ServiceAccountCredential, ProjectId = ((dynamic)es.Config).ProjectId, Topic = ((dynamic)es.Config).Topic }; IOptions <PubSubSettings> pubSubSettings = Options.Create(settings); IEventService pubSubService = new PubSubEventService(es.Name, pubSubSettings, _logger); _eventServices.Add(pubSubService); } else if (es.Provider == WEBHOOK) { var settings = new WebhookSettings { URL = ((dynamic)es.Config).URL, Secret = ((dynamic)es.Config).Secret }; IOptions <WebhookSettings> webhookSettings = Options.Create(settings); IEventService webhookService = new WebhookEventService(es.Name, webhookSettings, _logger); _eventServices.Add(webhookService); } else { throw new Exception($"Unsupported event service provider: {es.Provider}"); } } }
/// <summary> /// Initializes a new instance of the <see cref="BaseClient" /> class. /// </summary> /// <param name="apiKey">Your api key.</param> /// <param name="username">Your username. Ignored if the api key is specified.</param> /// <param name="password">Your password. Ignored if the api key is specified.</param> /// <param name="httpClient">Allows you to inject your own HttpClient. This is useful, for example, to setup the HtppClient with a proxy.</param> /// <param name="disposeClient">Indicates if the http client should be dispose when this instance of BaseClient is disposed.</param> /// <param name="options">Options for the SendGrid client.</param> /// <param name="logger">Logger.</param> public BaseClient(Parameter <string> apiKey, Parameter <string> username, Parameter <string> password, HttpClient httpClient, bool disposeClient, StrongGridClientOptions options, ILogger logger = null) { _mustDisposeHttpClient = disposeClient; _httpClient = httpClient; _options = options ?? GetDefaultOptions(); _logger = logger ?? NullLogger.Instance; _fluentClient = new FluentClient(new Uri(SENDGRID_V3_BASE_URI), httpClient) .SetUserAgent($"StrongGrid/{Version} (+https://github.com/Jericho/StrongGrid)") .SetRequestCoordinator(new SendGridRetryStrategy()); _fluentClient.Filters.Remove <DefaultErrorFilter>(); // Order is important: DiagnosticHandler must be first. // Also, the list of filters must be kept in sync with the filters in Utils.GetFluentClient in the unit testing project. _fluentClient.Filters.Add(new DiagnosticHandler(_options.LogLevelSuccessfulCalls, _options.LogLevelFailedCalls, _logger)); _fluentClient.Filters.Add(new SendGridErrorHandler()); if (apiKey.HasValue) { if (string.IsNullOrEmpty(apiKey)) { throw new ArgumentNullException(apiKey); } else { _fluentClient.SetBearerAuthentication(apiKey); } } else if (username.HasValue) { if (string.IsNullOrEmpty(username)) { throw new ArgumentNullException(username); } else { _fluentClient.SetBasicAuthentication(username, password); } } else { throw new ArgumentException("You must provide either an API key or a username and a password."); } AccessManagement = new AccessManagement(FluentClient); Alerts = new Alerts(FluentClient); ApiKeys = new ApiKeys(FluentClient); Batches = new Batches(FluentClient); Blocks = new Blocks(FluentClient); Bounces = new Bounces(FluentClient); Designs = new Designs(FluentClient); EmailActivities = new EmailActivities(FluentClient); EmailValidation = new EmailValidation(FluentClient); GlobalSuppressions = new GlobalSuppressions(FluentClient); InvalidEmails = new InvalidEmails(FluentClient); IpAddresses = new IpAddresses(FluentClient); IpPools = new IpPools(FluentClient); Mail = new Mail(FluentClient); Settings = new Settings(FluentClient); SpamReports = new SpamReports(FluentClient); Statistics = new Statistics(FluentClient); Subusers = new Subusers(FluentClient); Suppressions = new Suppressions(FluentClient); Teammates = new Teammates(FluentClient); Templates = new Templates(FluentClient); UnsubscribeGroups = new UnsubscribeGroups(FluentClient); User = new User(FluentClient); WebhookSettings = new WebhookSettings(FluentClient); WebhookStats = new WebhookStats(FluentClient); SenderAuthentication = new SenderAuthentication(FluentClient); }