From 7af5e0080eab203dd1c4563c70c3a482deba6044 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 7 Jul 2019 18:24:14 -0500 Subject: [PATCH] separate out IListService and IUrlService --- .../Clients/IAgentHttpClientFactory.cs | 9 ---- .../Core/Interfaces/Services/IListService.cs | 9 ++++ .../Core/Interfaces/Services/IUrlService.cs | 9 ++++ .../Extensions/ServiceCollectionExtensions.cs | 44 +++++++++++++------ .../Features/Lists/DownloadRawText.cs | 6 +-- .../Features/Lists/DownloadSevenZip.cs | 6 +-- .../Features/Lists/DownloadZip.cs | 6 +-- .../Features/Urls/ValidateUrls.cs | 6 +-- .../ListService.cs} | 8 ++-- .../Infrastructure/Services/UrlService.cs | 25 +++++++++++ 10 files changed, 89 insertions(+), 39 deletions(-) delete mode 100644 src/FilterLists.Agent/Core/Interfaces/Clients/IAgentHttpClientFactory.cs create mode 100644 src/FilterLists.Agent/Core/Interfaces/Services/IListService.cs create mode 100644 src/FilterLists.Agent/Core/Interfaces/Services/IUrlService.cs rename src/FilterLists.Agent/Infrastructure/{Clients/AgentHttpClientFactory.cs => Services/ListService.cs} (68%) create mode 100644 src/FilterLists.Agent/Infrastructure/Services/UrlService.cs diff --git a/src/FilterLists.Agent/Core/Interfaces/Clients/IAgentHttpClientFactory.cs b/src/FilterLists.Agent/Core/Interfaces/Clients/IAgentHttpClientFactory.cs deleted file mode 100644 index fbef68ec1..000000000 --- a/src/FilterLists.Agent/Core/Interfaces/Clients/IAgentHttpClientFactory.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Net.Http; - -namespace FilterLists.Agent.Core.Interfaces.Clients -{ - public interface IAgentHttpClientFactory - { - HttpClient HttpClient { get; } - } -} \ No newline at end of file diff --git a/src/FilterLists.Agent/Core/Interfaces/Services/IListService.cs b/src/FilterLists.Agent/Core/Interfaces/Services/IListService.cs new file mode 100644 index 000000000..014f807da --- /dev/null +++ b/src/FilterLists.Agent/Core/Interfaces/Services/IListService.cs @@ -0,0 +1,9 @@ +using System.Net.Http; + +namespace FilterLists.Agent.Core.Interfaces.Services +{ + public interface IListService + { + HttpClient HttpClient { get; } + } +} \ No newline at end of file diff --git a/src/FilterLists.Agent/Core/Interfaces/Services/IUrlService.cs b/src/FilterLists.Agent/Core/Interfaces/Services/IUrlService.cs new file mode 100644 index 000000000..95bac666e --- /dev/null +++ b/src/FilterLists.Agent/Core/Interfaces/Services/IUrlService.cs @@ -0,0 +1,9 @@ +using System.Net.Http; + +namespace FilterLists.Agent.Core.Interfaces.Services +{ + public interface IUrlService + { + HttpClient HttpClient { get; } + } +} \ No newline at end of file diff --git a/src/FilterLists.Agent/Extensions/ServiceCollectionExtensions.cs b/src/FilterLists.Agent/Extensions/ServiceCollectionExtensions.cs index 1de34a6dc..688959f5a 100644 --- a/src/FilterLists.Agent/Extensions/ServiceCollectionExtensions.cs +++ b/src/FilterLists.Agent/Extensions/ServiceCollectionExtensions.cs @@ -5,8 +5,10 @@ using FilterLists.Agent.AppSettings; using FilterLists.Agent.Core.Interfaces.Clients; using FilterLists.Agent.Core.Interfaces.Repositories; +using FilterLists.Agent.Core.Interfaces.Services; using FilterLists.Agent.Infrastructure.Clients; using FilterLists.Agent.Infrastructure.Repositories; +using FilterLists.Agent.Infrastructure.Services; using LibGit2Sharp; using MediatR; using Microsoft.Extensions.Configuration; @@ -30,8 +32,9 @@ public static void RegisterAgentServices(this IServiceCollection services) services.AddTransient(); services.AddMediatR(AppDomain.CurrentDomain.GetAssemblies()); services.AddSingleton(); - services.AddAgentHttpClient(); services.AddGitHubClient(); + services.AddListService(); + services.AddUrlService(); services.AddArchiveRepository(); services.AddTransient(); services.AddTransient(); @@ -72,19 +75,6 @@ private static void AddLoggingCustom(this IServiceCollection services) }); } - private static void AddAgentHttpClient(this IServiceCollection services) - { - services.AddHttpClient() - .ConfigureHttpMessageHandlerBuilder(b => - { - b.PrimaryHandler = new HttpClientHandler {AllowAutoRedirect = false}; - b.Build(); - }) - .AddTransientHttpErrorPolicy(b => - b.OrResult(r => r.StatusCode == HttpStatusCode.TooManyRequests) - .WaitAndRetryAsync(5, i => i * TimeSpan.FromSeconds(3))); - } - private static void AddGitHubClient(this IServiceCollection services) { services.AddSingleton(s => @@ -97,6 +87,32 @@ private static void AddGitHubClient(this IServiceCollection services) }); } + private static void AddListService(this IServiceCollection services) + { + services.AddHttpClient() + .ConfigureHttpMessageHandlerBuilder(b => + { + b.PrimaryHandler = new HttpClientHandler {AllowAutoRedirect = false}; + b.Build(); + }) + .AddTransientHttpErrorPolicy(b => + b.OrResult(r => r.StatusCode == HttpStatusCode.TooManyRequests) + .WaitAndRetryAsync(5, i => i * TimeSpan.FromSeconds(3))); + } + + private static void AddUrlService(this IServiceCollection services) + { + services.AddHttpClient() + .ConfigureHttpMessageHandlerBuilder(b => + { + b.PrimaryHandler = new HttpClientHandler {AllowAutoRedirect = false}; + b.Build(); + }) + .AddTransientHttpErrorPolicy(b => + b.OrResult(r => r.StatusCode == HttpStatusCode.TooManyRequests) + .WaitAndRetryAsync(5, i => i * TimeSpan.FromSeconds(3))); + } + private static void AddArchiveRepository(this IServiceCollection services) { services.AddTransient(s => diff --git a/src/FilterLists.Agent/Features/Lists/DownloadRawText.cs b/src/FilterLists.Agent/Features/Lists/DownloadRawText.cs index 638bf8de4..269c0559d 100644 --- a/src/FilterLists.Agent/Features/Lists/DownloadRawText.cs +++ b/src/FilterLists.Agent/Features/Lists/DownloadRawText.cs @@ -4,7 +4,7 @@ using System.Threading; using System.Threading.Tasks; using FilterLists.Agent.Core.Entities; -using FilterLists.Agent.Core.Interfaces.Clients; +using FilterLists.Agent.Core.Interfaces.Services; using FilterLists.Agent.Extensions; using MediatR; using Microsoft.Extensions.Logging; @@ -30,9 +30,9 @@ public class Handler : AsyncRequestHandler private readonly HttpClient _httpClient; private readonly ILogger _logger; - public Handler(IAgentHttpClientFactory agentHttpClientFactory, ILogger logger) + public Handler(IListService listService, ILogger logger) { - _httpClient = agentHttpClientFactory.HttpClient; + _httpClient = listService.HttpClient; _logger = logger; } diff --git a/src/FilterLists.Agent/Features/Lists/DownloadSevenZip.cs b/src/FilterLists.Agent/Features/Lists/DownloadSevenZip.cs index 6139fa8bb..c297ea770 100644 --- a/src/FilterLists.Agent/Features/Lists/DownloadSevenZip.cs +++ b/src/FilterLists.Agent/Features/Lists/DownloadSevenZip.cs @@ -3,7 +3,7 @@ using System.Threading; using System.Threading.Tasks; using FilterLists.Agent.Core.Entities; -using FilterLists.Agent.Core.Interfaces.Clients; +using FilterLists.Agent.Core.Interfaces.Services; using MediatR; using Microsoft.Extensions.Logging; using SharpCompress.Archives; @@ -30,9 +30,9 @@ public class Handler : AsyncRequestHandler private readonly HttpClient _httpClient; private readonly ILogger _logger; - public Handler(IAgentHttpClientFactory agentHttpClientFactory, ILogger logger) + public Handler(IListService listService, ILogger logger) { - _httpClient = agentHttpClientFactory.HttpClient; + _httpClient = listService.HttpClient; _logger = logger; } diff --git a/src/FilterLists.Agent/Features/Lists/DownloadZip.cs b/src/FilterLists.Agent/Features/Lists/DownloadZip.cs index be7828518..e8d7c4c87 100644 --- a/src/FilterLists.Agent/Features/Lists/DownloadZip.cs +++ b/src/FilterLists.Agent/Features/Lists/DownloadZip.cs @@ -3,7 +3,7 @@ using System.Threading; using System.Threading.Tasks; using FilterLists.Agent.Core.Entities; -using FilterLists.Agent.Core.Interfaces.Clients; +using FilterLists.Agent.Core.Interfaces.Services; using MediatR; using Microsoft.Extensions.Logging; using SharpCompress.Common; @@ -29,9 +29,9 @@ public class Handler : AsyncRequestHandler private readonly HttpClient _httpClient; private readonly ILogger _logger; - public Handler(IAgentHttpClientFactory agentHttpClientFactory, ILogger logger) + public Handler(IListService listService, ILogger logger) { - _httpClient = agentHttpClientFactory.HttpClient; + _httpClient = listService.HttpClient; _logger = logger; } diff --git a/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs b/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs index de1181ca1..a25cf036c 100644 --- a/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs +++ b/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs @@ -5,7 +5,7 @@ using System.Threading; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; -using FilterLists.Agent.Core.Interfaces.Clients; +using FilterLists.Agent.Core.Interfaces.Services; using FilterLists.Agent.Extensions; using FilterLists.Agent.Features.Urls.Models.ValidationResults; using MediatR; @@ -31,9 +31,9 @@ public class Handler : IRequestHandler> private readonly HttpClient _httpClient; private readonly ILogger _logger; - public Handler(IAgentHttpClientFactory agentHttpClientFactory, ILogger logger) + public Handler(IUrlService urlService, ILogger logger) { - _httpClient = agentHttpClientFactory.HttpClient; + _httpClient = urlService.HttpClient; _logger = logger; } diff --git a/src/FilterLists.Agent/Infrastructure/Clients/AgentHttpClientFactory.cs b/src/FilterLists.Agent/Infrastructure/Services/ListService.cs similarity index 68% rename from src/FilterLists.Agent/Infrastructure/Clients/AgentHttpClientFactory.cs rename to src/FilterLists.Agent/Infrastructure/Services/ListService.cs index 275c8f356..bb3057d29 100644 --- a/src/FilterLists.Agent/Infrastructure/Clients/AgentHttpClientFactory.cs +++ b/src/FilterLists.Agent/Infrastructure/Services/ListService.cs @@ -1,15 +1,15 @@ using System; using System.Net.Http; using System.Net.Http.Headers; -using FilterLists.Agent.Core.Interfaces.Clients; +using FilterLists.Agent.Core.Interfaces.Services; using JetBrains.Annotations; -namespace FilterLists.Agent.Infrastructure.Clients +namespace FilterLists.Agent.Infrastructure.Services { [UsedImplicitly] - public class AgentHttpClientFactory : IAgentHttpClientFactory + public class ListService : IListService { - public AgentHttpClientFactory(HttpClient client) + public ListService(HttpClient client) { client.Timeout = TimeSpan.FromSeconds(90); diff --git a/src/FilterLists.Agent/Infrastructure/Services/UrlService.cs b/src/FilterLists.Agent/Infrastructure/Services/UrlService.cs new file mode 100644 index 000000000..4704c705e --- /dev/null +++ b/src/FilterLists.Agent/Infrastructure/Services/UrlService.cs @@ -0,0 +1,25 @@ +using System; +using System.Net.Http; +using System.Net.Http.Headers; +using FilterLists.Agent.Core.Interfaces.Services; +using JetBrains.Annotations; + +namespace FilterLists.Agent.Infrastructure.Services +{ + [UsedImplicitly] + public class UrlService : IUrlService + { + public UrlService(HttpClient client) + { + client.Timeout = TimeSpan.FromSeconds(90); + + var header = new ProductHeaderValue("FilterLists.Agent"); + var userAgent = new ProductInfoHeaderValue(header); + client.DefaultRequestHeaders.UserAgent.Add(userAgent); + + HttpClient = client; + } + + public HttpClient HttpClient { get; } + } +} \ No newline at end of file