From 923a848deb88a90b0081cb9aaaa2e979cd30dc1c Mon Sep 17 00:00:00 2001 From: Victor Usoltsev Date: Tue, 24 Nov 2020 19:43:16 +1300 Subject: [PATCH 1/2] Adds xml documentation generation. Better error handling when xml documentation is missing. --- src/Ombi/Extensions/StartupExtensions.cs | 85 ++++++++++++------------ src/Ombi/Ombi.csproj | 1 + 2 files changed, 42 insertions(+), 44 deletions(-) diff --git a/src/Ombi/Extensions/StartupExtensions.cs b/src/Ombi/Extensions/StartupExtensions.cs index d14dc2e9e..e42dfb609 100644 --- a/src/Ombi/Extensions/StartupExtensions.cs +++ b/src/Ombi/Extensions/StartupExtensions.cs @@ -1,13 +1,9 @@ using System; -using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication.JwtBearer; -using Microsoft.AspNetCore.JsonPatch.Operations; -using Microsoft.AspNetCore.Mvc.ApiExplorer; -using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Tokens; @@ -15,18 +11,16 @@ using Microsoft.OpenApi.Models; using Ombi.Config; using Ombi.Helpers; using Ombi.Models.Identity; -using Swashbuckle.AspNetCore.Swagger; -using Swashbuckle.AspNetCore.SwaggerGen; namespace Ombi { - public static class StartupExtensions + public static class StartupExtensions { public static void AddSwagger(this IServiceCollection services) { services.AddSwaggerGen(c => { - c.SwaggerDoc("v1", new OpenApiInfo() + c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "Ombi Api V1", @@ -37,35 +31,39 @@ namespace Ombi } }); - - - c.AddSecurityDefinition("ApiKey", new OpenApiSecurityScheme { Description = "API Key provided by Ombi. Example: \"ApiKey: {token}\"", Name = "ApiKey", - In = ParameterLocation.Header, + In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey }); + c.CustomSchemaIds(x => x.FullName); - var basePath = Path.GetDirectoryName(AppContext.BaseDirectory); - var xmlPath = Path.Combine(basePath, "Swagger.xml"); + try { - c.IncludeXmlComments(xmlPath); + string basePath = Path.GetDirectoryName(AppContext.BaseDirectory); + string assemblyName = Assembly.GetExecutingAssembly().GetName().Name; + string xmlPath = Path.Combine(basePath ?? string.Empty, $"{assemblyName}.xml"); + if (File.Exists(xmlPath)) + { + c.IncludeXmlComments(xmlPath); + } + else + { + Console.WriteLine($"Swagger failed to find documentation file at '{xmlPath}'."); + } } catch (Exception e) { Console.WriteLine(e); } - c.DescribeAllParametersInCamelCase(); }); } - - public static void AddAppSettingsValues(this IServiceCollection services, IConfigurationRoot configuration) { services.Configure(configuration.GetSection("ApplicationSettings")); @@ -78,13 +76,10 @@ namespace Ombi public static void AddJwtAuthentication(this IServiceCollection services, IConfigurationRoot configuration) { - var tokenOptions = configuration.GetSection("TokenAuthentication"); - var tokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(StartupSingleton.Instance.SecurityKey)), - RequireExpirationTime = true, ValidateLifetime = true, ValidAudience = "Ombi", @@ -92,33 +87,35 @@ namespace Ombi ClockSkew = TimeSpan.Zero, }; - services.AddAuthentication(options => - { - options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; - options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; - }).AddJwtBearer(x => - { - x.Audience = "Ombi"; - x.TokenValidationParameters = tokenValidationParameters; - x.Events = new JwtBearerEvents + services + .AddAuthentication(options => { - OnMessageReceived = context => + options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; + options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; + }) + .AddJwtBearer(x => + { + x.Audience = "Ombi"; + x.TokenValidationParameters = tokenValidationParameters; + x.Events = new JwtBearerEvents { - var accessToken = context.Request.Query["access_token"]; - - // If the request is for our hub... - var path = context.HttpContext.Request.Path; - if (!string.IsNullOrEmpty(accessToken) && - (path.StartsWithSegments("/hubs"))) + OnMessageReceived = context => { - // Read the token out of the query string - context.Token = accessToken; - } - return Task.CompletedTask; - } - }; - }); + var accessToken = context.Request.Query["access_token"]; + + // If the request is for our hub... + var path = context.HttpContext.Request.Path; + if (!string.IsNullOrEmpty(accessToken) && + (path.StartsWithSegments("/hubs"))) + { + // Read the token out of the query string + context.Token = accessToken; + } + return Task.CompletedTask; + } + }; + }); } } } \ No newline at end of file diff --git a/src/Ombi/Ombi.csproj b/src/Ombi/Ombi.csproj index 04a896596..9ac73264c 100644 --- a/src/Ombi/Ombi.csproj +++ b/src/Ombi/Ombi.csproj @@ -14,6 +14,7 @@ ClientApp\ $(DefaultItemExcludes);$(SpaRoot)node_modules\** true + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml From fe711b6783d781f1474c0476b7d767f416d52f77 Mon Sep 17 00:00:00 2001 From: Victor Usoltsev Date: Tue, 24 Nov 2020 22:06:41 +1300 Subject: [PATCH 2/2] Ignores Trakt exceptions when retrieving optional tv show information. --- src/Ombi.Api.Trakt/TraktApi.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Ombi.Api.Trakt/TraktApi.cs b/src/Ombi.Api.Trakt/TraktApi.cs index c3faa5115..8bdabebe5 100644 --- a/src/Ombi.Api.Trakt/TraktApi.cs +++ b/src/Ombi.Api.Trakt/TraktApi.cs @@ -1,4 +1,5 @@  +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -48,7 +49,18 @@ namespace Ombi.Api.Trakt public async Task GetTvExtendedInfo(string imdbId) { - return await Client.Shows.GetShowAsync(imdbId, TraktExtendedOption.Full); + try + { + return await Client.Shows.GetShowAsync(imdbId, TraktExtendedOption.Full); + } + catch (Exception e) + { + // Ignore the exception since the information returned from this API is optional. + Console.WriteLine($"Failed to retrieve extended tv information from Trakt. IMDbId: '{imdbId}'."); + Console.WriteLine(e); + } + + return null; } } }