using Azure.Identity; using Hutopy.Application.Common.Interfaces; using Hutopy.Domain.Interfaces; using Hutopy.Infrastructure.Data; using Hutopy.Infrastructure.Services; using Hutopy.Web.Services; using Microsoft.AspNetCore.Mvc; using NSwag; using NSwag.Generation.Processors.Security; namespace Hutopy.Web; public static class DependencyInjection { public static IServiceCollection AddWebServices(this IServiceCollection services) { services.AddDatabaseDeveloperPageExceptionFilter(); services.AddScoped(); services.AddScoped(); services.AddHttpContextAccessor(); services.AddHealthChecks() .AddDbContextCheck(); services.AddExceptionHandler(); services.AddRazorPages(); // Customise default API behaviour services.Configure(options => options.SuppressModelStateInvalidFilter = true); services.AddEndpointsApiExplorer(); services.AddOpenApiDocument((configure, sp) => { configure.Title = "Hutopy API"; // Add JWT configure.AddSecurity("JWT", Enumerable.Empty(), new OpenApiSecurityScheme { Type = OpenApiSecuritySchemeType.ApiKey, Name = "Authorization", In = OpenApiSecurityApiKeyLocation.Header, Description = "Type into the textbox: Bearer {your JWT token}." }); configure.OperationProcessors.Add(new AspNetCoreOperationSecurityScopeProcessor("JWT")); }); return services; } public static IServiceCollection AddKeyVaultIfConfigured(this IServiceCollection services, ConfigurationManager configuration) { var keyVaultUri = configuration["KeyVaultUri"]; if (!string.IsNullOrWhiteSpace(keyVaultUri)) { configuration.AddAzureKeyVault( new Uri(keyVaultUri), new DefaultAzureCredential()); } return services; } }