using System.Runtime.Serialization.Formatters; using System.Text; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.IdentityModel.Tokens; using SiteManagementSystem_SoftwareEngineering_.Extension; using SiteManagementSystem_SoftwareEngineering_.Interface; using SiteManagementSystem_SoftwareEngineering_.Service; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddDbContext(options => options.UseMySql( builder.Configuration.GetConnectionString("SQL"), MySqlServerVersion.AutoDetect(builder.Configuration.GetConnectionString("SQL")) //MariaDbServerVersion.AutoDetect(builder.Configuration.GetConnectionString("SQL")) ) ); builder .Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { var jwtConfig = builder.Configuration.GetSection("Jwt"); var key = Encoding.UTF8.GetBytes(jwtConfig.GetValue("SecurityKey")!); options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = jwtConfig.GetValue("Issuer"), ValidAudience = jwtConfig.GetValue("Audience"), IssuerSigningKey = new SymmetricSecurityKey(key) }; }); builder .Services.AddTokenFactory(options => { var config = builder.Configuration.GetSection("Jwt"); options.Issuer = config.GetValue("Issuer")!; options.Audience = config.GetValue("Audience")!; options.SigningKey = config.GetValue("SecurityKey")!; options.AccessTokenExpire = config.GetValue("AccessTokenExpire"); options.RefreshTokenExpire = config.GetValue("RefreshTokenExpire"); options.RefreshTokenBefore = config.GetValue("RefreshTokenBefore"); }) .AddUserManager(options => options.HashSalt = builder.Configuration.GetValue("SecretSalt")! ).AddScoped() .AddRedisUtils(options => { options.RedisConnectionString = builder.Configuration.GetConnectionString("Redis")!; options.RedisDB = int.Parse(builder.Configuration["RedisDB"] ?? "0"); } ).AddSingleton(typeof(ICacheService<>), typeof(RedisService<>)); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();