/
ibavca1
/
A4.ControlPost
Обзор
Документация
Войти
/
ibavca1
/
A4.ControlPost
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/A4.ControlPost.Server/Program.cs
162 строки
5 KB
ibavcagmailcom
Добавлен мониторинг системы
21 май 2026, 06:21
21 май 2026, 06:21
de1b8f0
Код
Авторство
О чём код?
// Program.cs using A4.ControlPost.Core; using A4.ControlPost.Server.Data; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Diagnostics.HealthChecks; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using System.Diagnostics; using System.Text; var builder = WebApplication.CreateBuilder(args); // Добавь DbContext с Identity builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection"))); // 🔥 Добавь Identity builder.Services.AddIdentity<ApplicationUser, IdentityRole>(options => { options.User.RequireUniqueEmail = true; options.Password.RequiredLength = 6; options.Password.RequireDigit = false; options.Password.RequireLowercase = false; options.Password.RequireUppercase = false; options.Password.RequireNonAlphanumeric = false; }) .AddEntityFrameworkStores<AppDbContext>() .AddDefaultTokenProviders(); // JWT Authentication builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { var key = Encoding.UTF8.GetBytes(builder.Configuration["JwtSettings:Secret"]!); options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = builder.Configuration["JwtSettings:Issuer"], ValidAudience = builder.Configuration["JwtSettings:Audience"], IssuerSigningKey = new SymmetricSecurityKey(key) }; }); builder.Services.AddAuthorization(); builder.Services.AddControllers(); // ✅ Добавляем Health Checks builder.Services.AddHealthChecks() .AddDbContextCheck<AppDbContext>(name: "Database") .AddDiskStorageHealthCheck(options => options.AddDrive("C:\\", 500), "disk") .AddCheck<CpuHealthCheck>("CPU"); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); // Применить миграции using (var scope = app.Services.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService<AppDbContext>(); await context.Database.MigrateAsync(); // ✅ } // Удаление всех пользователей using (var scope = app.Services.CreateScope()) { var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>(); // Получаем всех пользователей var users = userManager.Users.ToList(); if (app.Environment.IsDevelopment()) { foreach (var user in users) { await userManager.DeleteAsync(user); } Trace.TraceInformation($"✅ Удалено {users.Count} пользователей"); } Console.WriteLine(); } // Создание ролей и админа using (var scope = app.Services.CreateScope()) { var roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>(); var userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>(); var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>(); string[] roleNames = { "user", "admin" }; foreach (var roleName in roleNames) { if (!await roleManager.RoleExistsAsync(roleName)) { await roleManager.CreateAsync(new IdentityRole(roleName)); logger.LogInformation("✅ Создана роль: {Role}", roleName); } } var adminUser = await userManager.FindByNameAsync("admin"); if (adminUser == null) { var adminPassword = builder.Configuration["AdminPassword"] ?? "admin123!"; var user = new ApplicationUser { UserName = "admin", Email = "admin@example.com", CreatedAt = DateTime.UtcNow }; var result = await userManager.CreateAsync(user, adminPassword); if (result.Succeeded) { await userManager.AddToRoleAsync(user, "admin"); logger.LogInformation("✅ Админ-пользователь создан"); } else { logger.LogError("❌ Ошибка создания админа: {Errors}", string.Join(", ", result.Errors)); } } } app.MapControllers(); app.MapHealthChecks("/health", new HealthCheckOptions { ResponseWriter = async (context, report) => { context.Response.ContentType = "application/json"; var result = new { status = report.Status.ToString(), checks = report.Entries.Select(e => new { name = e.Key, status = e.Value.Status.ToString(), description = e.Value.Description, duration = e.Value.Duration, data = e.Value.Data }), totalDuration = report.TotalDuration }; await context.Response.WriteAsJsonAsync(result); } }); app.Run();