diff options
| -rw-r--r-- | Jellyfin.Server/Startup.cs | 23 | ||||
| -rw-r--r-- | MediaBrowser.Common/Net/DefaultHttpClient.cs | 77 | ||||
| -rw-r--r-- | MediaBrowser.Common/Net/NamedClient.cs | 18 | ||||
| -rw-r--r-- | MediaBrowser.Common/Net/UserAgentDelegatingHandler.cs | 49 |
4 files changed, 36 insertions, 131 deletions
diff --git a/Jellyfin.Server/Startup.cs b/Jellyfin.Server/Startup.cs index a2db7b5c1..eb74d906f 100644 --- a/Jellyfin.Server/Startup.cs +++ b/Jellyfin.Server/Startup.cs @@ -1,9 +1,11 @@ using System; using System.ComponentModel; +using System.Net.Http.Headers; using Jellyfin.Api.TypeConverters; using Jellyfin.Server.Extensions; using Jellyfin.Server.Middleware; using Jellyfin.Server.Models; +using MediaBrowser.Common; using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; @@ -21,14 +23,17 @@ namespace Jellyfin.Server public class Startup { private readonly IServerConfigurationManager _serverConfigurationManager; + private readonly IApplicationHost _applicationHost; /// <summary> /// Initializes a new instance of the <see cref="Startup" /> class. /// </summary> /// <param name="serverConfigurationManager">The server configuration manager.</param> - public Startup(IServerConfigurationManager serverConfigurationManager) + /// <param name="applicationHost">The application host.</param> + public Startup(IServerConfigurationManager serverConfigurationManager, IApplicationHost applicationHost) { _serverConfigurationManager = serverConfigurationManager; + _applicationHost = applicationHost; } /// <summary> @@ -49,10 +54,18 @@ namespace Jellyfin.Server services.AddJellyfinApiAuthorization(); services - .AddTransient<UserAgentDelegatingHandler>() - .AddHttpClient<DefaultHttpClient>() - .ConfigurePrimaryHttpMessageHandler(x => new DefaultHttpClientHandler()) - .AddHttpMessageHandler<UserAgentDelegatingHandler>(); + .AddHttpClient(NamedClient.Default, c => + { + c.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(_applicationHost.Name.Replace(' ', '-'), _applicationHost.ApplicationVersionString)); + }) + .ConfigurePrimaryHttpMessageHandler(x => new DefaultHttpClientHandler()); + + services.AddHttpClient(NamedClient.MusicBrainz, c => + { + c.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(_applicationHost.Name.Replace(' ', '-'), _applicationHost.ApplicationVersionString)); + c.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(_applicationHost.ApplicationUserAgentAddress)); + }) + .ConfigurePrimaryHttpMessageHandler(x => new DefaultHttpClientHandler()); } /// <summary> diff --git a/MediaBrowser.Common/Net/DefaultHttpClient.cs b/MediaBrowser.Common/Net/DefaultHttpClient.cs deleted file mode 100644 index be18e82db..000000000 --- a/MediaBrowser.Common/Net/DefaultHttpClient.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.IO; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Common.Net -{ - /// <summary> - /// Default http client. - /// </summary> - public class DefaultHttpClient - { - private readonly HttpClient _httpClient; - - /// <summary> - /// Initializes a new instance of the <see cref="DefaultHttpClient" /> class. - /// </summary> - /// <param name="httpClient">Instance of httpclient.</param> - public DefaultHttpClient(HttpClient httpClient) - { - _httpClient = httpClient; - } - - /// <summary> - /// Make GET request. - /// </summary> - /// <param name="url">Url to request.</param> - /// <returns>A <see cref="Task"/> containing the <see cref="HttpResponseMessage"/>.</returns> - public Task<HttpResponseMessage> GetAsync(Uri url) - { - return _httpClient.GetAsync(url); - } - - /// <summary> - /// Make GET request. - /// </summary> - /// <param name="url">Url to request.</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>A <see cref="Task"/> containing the <see cref="HttpResponseMessage"/>.</returns> - public Task<HttpResponseMessage> GetAsync(Uri url, CancellationToken cancellationToken) - { - return _httpClient.GetAsync(url, cancellationToken); - } - - /// <summary> - /// Get stream. - /// </summary> - /// <param name="url">Url to get stream from.</param> - /// <returns>A <see cref="Task"/> containing the <see cref="Stream"/>.</returns> - public Task<Stream> GetStreamAsync(Uri url) - { - return _httpClient.GetStreamAsync(url); - } - - /// <summary> - /// Send request. - /// </summary> - /// <param name="requestMessage">The <see cref="HttpRequestMessage"/>.</param> - /// <returns>A <see cref="Task"/> containing the <see cref="HttpResponseMessage"/>.</returns> - public Task<HttpResponseMessage> SendAsync(HttpRequestMessage requestMessage) - { - return _httpClient.SendAsync(requestMessage); - } - - /// <summary> - /// Send request. - /// </summary> - /// <param name="requestMessage">The <see cref="HttpRequestMessage"/>.</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>A <see cref="Task"/> containing the <see cref="HttpResponseMessage"/>.</returns> - public Task<HttpResponseMessage> SendAsync(HttpRequestMessage requestMessage, CancellationToken cancellationToken) - { - return _httpClient.SendAsync(requestMessage, cancellationToken); - } - } -} diff --git a/MediaBrowser.Common/Net/NamedClient.cs b/MediaBrowser.Common/Net/NamedClient.cs new file mode 100644 index 000000000..0f6161c32 --- /dev/null +++ b/MediaBrowser.Common/Net/NamedClient.cs @@ -0,0 +1,18 @@ +namespace MediaBrowser.Common.Net +{ + /// <summary> + /// Registered http client names. + /// </summary> + public static class NamedClient + { + /// <summary> + /// Gets the value for the default named http client. + /// </summary> + public const string Default = nameof(Default); + + /// <summary> + /// Gets the value for the MusicBrainz named http client. + /// </summary> + public const string MusicBrainz = nameof(MusicBrainz); + } +} diff --git a/MediaBrowser.Common/Net/UserAgentDelegatingHandler.cs b/MediaBrowser.Common/Net/UserAgentDelegatingHandler.cs deleted file mode 100644 index 74dc22b7a..000000000 --- a/MediaBrowser.Common/Net/UserAgentDelegatingHandler.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Net.Http; -using System.Net.Http.Headers; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Common.Net -{ - /// <summary> - /// User agent delegating handler. - /// Adds User-Agent header to all requests. - /// </summary> - public class UserAgentDelegatingHandler : DelegatingHandler - { - private readonly ProductInfoHeaderValue[] _userAgentValues; - - /// <summary> - /// Initializes a new instance of the <see cref="UserAgentDelegatingHandler"/> class. - /// </summary> - /// <param name="applicationHost">Instance of the <see cref="IApplicationHost"/> interface.</param> - public UserAgentDelegatingHandler(IApplicationHost applicationHost) - { - _userAgentValues = new[] - { - new ProductInfoHeaderValue(applicationHost.Name.Replace(' ', '-'), applicationHost.ApplicationVersionString) - }; - } - - /// <summary> - /// Send request message. - /// </summary> - /// <param name="request">The request message.</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>A <see cref="Task"/> containing the <see cref="HttpResponseMessage"/>.</returns> - protected override Task<HttpResponseMessage> SendAsync( - HttpRequestMessage request, - CancellationToken cancellationToken) - { - if (request.Headers.UserAgent.Count == 0) - { - for (var i = 0; i < _userAgentValues.Length; i++) - { - request.Headers.UserAgent.Add(_userAgentValues[i]); - } - } - - return base.SendAsync(request, cancellationToken); - } - } -} |
