using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.EntityFrameworkCore; using Project.Application.Interfaces; using Project.Application.MappingProfiles; using Project.Application.Services; using Project.Infrastructure; using Project.Infrastructure.Interfaces; using Project.Infrastructure.Repositories; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Automapper builder.Services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly); // ProductService, ProductRepository builder.Services.AddScoped(); builder.Services.AddScoped(); // CategoryService, CategoryRepository builder.Services.AddScoped(); builder.Services.AddScoped(); // UserService, UserRepository builder.Services.AddScoped(); builder.Services.AddScoped(); // RoleService, RoleRepository builder.Services.AddScoped(); builder.Services.AddScoped(); // AuthService builder.Services.AddScoped(); // TwoFactorAuthService, TwoFactorAuthReposittory builder.Services.AddScoped(); builder.Services.AddScoped(); // DatabaseContext builder.Services.AddDbContext(options => { options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly("Project.Web")); }); builder.Services.AddMemoryCache(); // CookieAuth builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.Cookie.HttpOnly = true; options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest; options.Cookie.SameSite = SameSiteMode.Strict; options.LoginPath = "/api/auth/login"; options.LogoutPath = "/api/auth/logout"; }); // Authorization builder.Services.AddAuthorization(options => { options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin")); }); builder.Logging.ClearProviders(); builder.Logging.AddConsole(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();