From 1be0c8884233c0b599a26f8422a17c8077323ea4 Mon Sep 17 00:00:00 2001 From: Fazzani Date: Sun, 29 Dec 2024 00:07:50 +0100 Subject: [PATCH] Some fixes --- README.md | 7 +++++-- src/Proxarr.Api/Configuration/AppConfiguration.cs | 15 +-------------- .../Configuration/ClientConfiguration.cs | 9 +++++++++ src/Proxarr.Api/Core/ApiKeyDelegatingHandler.cs | 15 +++++++++------ src/Proxarr.Api/Program.cs | 9 ++++++++- 5 files changed, 32 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 24a727a..10581e9 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@

- Automatically categorize your requested movies and tv shows from your watching providers. + Prevents Sonarr/Radarr from downloading media already available for your region on streaming services (e.g., Netflix, Amazon Prime Video)
:boom: Report Bug :boom: · @@ -127,9 +127,12 @@ docker run -itd --rm -e LOG_LEVEL=Debug -p 8880:8880 -v ${PWD}/config:/app/confi ## Roadmap - [ ] Add more providers (JustWatch, Reelgood, etc) +- [ ] Global error handling - [ ] Add more tests -- [ ] Improve logging and error handling +- [ ] Improve logging - [ ] Add Api versioning +- [ ] HealthCheck: change log level to debug +- [ ] Add security See the [open issues](https://github.com/Fazzani/Proxarr/issues) for a full list of proposed features (and known issues). diff --git a/src/Proxarr.Api/Configuration/AppConfiguration.cs b/src/Proxarr.Api/Configuration/AppConfiguration.cs index 8dfc460..1cfde81 100644 --- a/src/Proxarr.Api/Configuration/AppConfiguration.cs +++ b/src/Proxarr.Api/Configuration/AppConfiguration.cs @@ -12,7 +12,7 @@ public sealed class AppConfiguration public string FULL_SCAN_CRON { get; set; } = "0 6 * * 1"; - public List Clients { get; set; } + public List Clients { get; set; } private Dictionary _watchProviders; @@ -57,17 +57,4 @@ private Dictionary InitProviders() return dict; } } - - public sealed class ClientInstance - { - ///

- /// The name of the application (Sonarr or Radarr) - /// - public required string Application { get; set; } - public required string BaseUrl { get; set; } - public required string ApiKey { get; set; } - - public bool IsSonarr => Application.Equals("Sonarr", StringComparison.OrdinalIgnoreCase); - public bool IsRadarr => Application.Equals("Radarr", StringComparison.OrdinalIgnoreCase); - } } diff --git a/src/Proxarr.Api/Configuration/ClientConfiguration.cs b/src/Proxarr.Api/Configuration/ClientConfiguration.cs index cfc475a..95af1dc 100644 --- a/src/Proxarr.Api/Configuration/ClientConfiguration.cs +++ b/src/Proxarr.Api/Configuration/ClientConfiguration.cs @@ -3,7 +3,16 @@ public sealed class ClientConfiguration { public const string SECTION_NAME = $"{AppConfiguration.SECTION_NAME}:Clients"; + + /// + /// Must be Sonarr or Radarr + /// + public required string Application { get; set; } public required string ApiKey { get; set; } public required string BaseUrl { get; set; } + + + public bool IsSonarr => Application.Equals("Sonarr", StringComparison.OrdinalIgnoreCase); + public bool IsRadarr => Application.Equals("Radarr", StringComparison.OrdinalIgnoreCase); } } diff --git a/src/Proxarr.Api/Core/ApiKeyDelegatingHandler.cs b/src/Proxarr.Api/Core/ApiKeyDelegatingHandler.cs index 8c6d48a..2aa5967 100644 --- a/src/Proxarr.Api/Core/ApiKeyDelegatingHandler.cs +++ b/src/Proxarr.Api/Core/ApiKeyDelegatingHandler.cs @@ -1,4 +1,5 @@ -using Proxarr.Api.Configuration; +using Microsoft.Extensions.Options; +using Proxarr.Api.Configuration; namespace Proxarr.Api.Core { @@ -6,11 +7,13 @@ public class ApiKeyDelegatingHandler : DelegatingHandler { private const string API_KEY_HEADER_NAME = "X-API-KEY"; - private readonly IConfiguration _configuration; + private readonly AppConfiguration _configuration; + private readonly ILogger _logger; - public ApiKeyDelegatingHandler(IConfiguration configuration) + public ApiKeyDelegatingHandler(IOptions configuration, ILogger logger) { - _configuration = configuration; + _configuration = configuration?.Value ?? throw new ArgumentNullException(nameof(configuration)); + _logger = logger; } protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) @@ -18,11 +21,11 @@ protected override async Task SendAsync(HttpRequestMessage if (!request.Headers.Contains(API_KEY_HEADER_NAME) && request.RequestUri != null) { var key = $"{request.RequestUri.Scheme}://{request.RequestUri.Host}"; - var clients = _configuration.GetSection(ClientConfiguration.SECTION_NAME).Get>(); - var clientConfig = clients?.FirstOrDefault(x => x.BaseUrl.Equals(key, StringComparison.OrdinalIgnoreCase)); + var clientConfig = _configuration.Clients?.FirstOrDefault(x => x.BaseUrl.Equals(key, StringComparison.OrdinalIgnoreCase)); if (clientConfig != null) { + _logger.LogInformation("Adding API Key to request for {BaseUrl}", clientConfig.BaseUrl); request.Headers.Add(API_KEY_HEADER_NAME, clientConfig.ApiKey); } } diff --git a/src/Proxarr.Api/Program.cs b/src/Proxarr.Api/Program.cs index 9af349f..a34c826 100644 --- a/src/Proxarr.Api/Program.cs +++ b/src/Proxarr.Api/Program.cs @@ -46,6 +46,7 @@ }); builder.Services.AddHealthChecks(); +builder.Services.AddProblemDetails(); // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi builder.Services.AddOpenApi(); @@ -92,7 +93,11 @@ if (app.Environment.IsDevelopment()) { app.MapOpenApi(); - app.MapScalarApiReference(); + app.MapScalarApiReference(opt => + { + opt.Title = "Proxarr API"; + opt.Theme = ScalarTheme.Mars; + }); } app.UseAuthorization(); @@ -101,4 +106,6 @@ app.MapHealthChecks("/health"); +app.UseExceptionHandler(); + await app.RunAsync(); \ No newline at end of file