Files
2025-07-20 11:49:20 +02:00

125 lines
5.2 KiB
C#

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<IAuthenticationRepository, MariaDbAuthenticationRepository>();
builder.Services.AddTransient<IOwnerRepository, MariadbOwnerRepository>();
builder.Services.AddTransient<IAddressRepository, MariaDbAddressRepository>();
builder.Services.AddTransient<IContactRepository, MariaDbContactRepository>();
builder.Services.AddTransient<IVineyardRepository, MariaDbVineyardRepository>();
builder.Services.AddTransient<IUserRepository, MariaDbUserRepository>();
return builder;
}
public static WebApplicationBuilder? AddServices(WebApplicationBuilder? builder)
{
builder.Services.AddTransient<AuthenticationService>();
builder.Services.AddTransient<OwnerService>();
builder.Services.AddTransient<UserService>();
builder.Services.AddTransient<ICoordinatesService, CoordinatesService>();
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;
}
}
}