125 lines
5.1 KiB
C#
125 lines
5.1 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<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;
|
|
}
|
|
}
|
|
}
|