Files
SkydiveLogs/Back/skydiveLogs-api/Startup.cs
Sébastien André f671d0b1d0 Fix IoC
2021-04-18 10:49:21 +02:00

129 lines
4.2 KiB
C#

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using skydiveLogs_api.DomainBusiness.Interfaces;
using skydiveLogs_api.Ioc;
using skydiveLogs_api.Settings;
using System.IO;
using System.Text;
namespace skydiveLogs_api
{
public class Startup
{
#region Public Constructors
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
#endregion Public Constructors
#region Public Methods
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.EnvironmentName == "Development")
{
app.UseDeveloperExceptionPage();
}
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseCors();
app.UseAuthentication();
app.UseMvc();
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options => { options.EnableEndpointRouting = false; })
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
services.AddHttpContextAccessor();
// JWT
var jwtSection = Configuration.GetSection("JWT");
services.Configure<JwtSettings>(jwtSection);
var jwtSettings = new JwtSettings();
jwtSection.Bind(jwtSettings);
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = jwtSettings.Issuer,
ValidAudience = jwtSettings.Issuer,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Passphrase))
};
});
// CORS
var corsSettings = new CorsSettings();
Configuration.GetSection("Cors").Bind(corsSettings);
services.AddCors(options =>
{
options.AddDefaultPolicy(
builder =>
{
builder.WithOrigins(corsSettings.FrontUrl)
.AllowAnyHeader()
.AllowAnyMethod();
});
});
// IoC
var iocService = new IocService(services, Configuration);
iocService.Configure();
// AutoMapper
services.AddAutoMapper(typeof(Mapper.ModelProfile));
CheckAndInitDb(services);
}
#endregion Public Methods
#region Private Methods
private void CheckAndInitDb(IServiceCollection services)
{
string connectionString = Configuration.GetConnectionString("DefaultConnection");
string dbFile = connectionString.Replace("Filename=", string.Empty);
if (!File.Exists(dbFile))
{
var serviceProvider = services.BuildServiceProvider();
var initDbService = serviceProvider.GetRequiredService<IInitDbService>();
initDbService.GenerateDb();
}
}
#endregion Private Methods
#region Public Properties
public IConfiguration Configuration { get; }
#endregion Public Properties
}
}