using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; using System.Text; using uWine.Core.Domain.Repositories; using uWine.Core.Infrastructure.Repository; using uWine.Core.Infrastructure.Services; namespace uWine.Api.Builder { public class Servicies { public static WebApplicationBuilder? AddAuthentiction(WebApplicationBuilder? builder) { builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { var jwtSettings = builder.Configuration.GetSection("JwtSettings"); options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = jwtSettings["Issuer"], ValidAudience = jwtSettings["Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings["Secret"])) }; }); return builder; } public static WebApplicationBuilder? AddRepository(WebApplicationBuilder? builder) { builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); return builder; } public static WebApplicationBuilder? AddServices(WebApplicationBuilder? builder) { builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); return builder; } public static WebApplicationBuilder? AddSwagger(WebApplicationBuilder? builder) { builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Il tuo API", Version = "v1" }); // 1. Configurazione per JWT Bearer Token c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "Inserisci il JWT Token nel campo 'Value' con il prefisso 'Bearer '. Esempio: 'Bearer your_token_here'", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, Scheme = "Bearer" }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new string[] {} } }); // 2. Configurazione per Basic Authentication c.AddSecurityDefinition("Basic", new OpenApiSecurityScheme { Description = "Basic authentication header", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.Http, Scheme = "basic" }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Basic" } }, new string[] {} } }); // Opzionale: per i commenti XML della documentazione // var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; // var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); // c.IncludeXmlComments(xmlPath); }); return builder; } } }