using Microsoft.AspNetCore.Identity; using IdentityUser = cuqmbr.TravelGuide.Identity.Models.IdentityUser; using IdentityRole = cuqmbr.TravelGuide.Identity.Models.IdentityRole; using Microsoft.Extensions.DependencyInjection; using IdentityRoleEnum = cuqmbr.TravelGuide.Application.Common.Models .IdentityRole; namespace cuqmbr.TravelGuide.Identity; public static class IdentitySeeder { public static void Seed(IServiceProvider serviceProvider) { using var userManager = serviceProvider .GetService>(); userManager.UserValidators.Clear(); userManager.PasswordValidators.Clear(); using var roleManager = serviceProvider .GetService>(); roleManager.RoleValidators.Clear(); // Seed Roles foreach (var role in IdentityRoleEnum.Enumerations) { var roleString = role.Value.Name; var roleExists = roleManager.RoleExistsAsync(roleString).Result; if (roleExists) { continue; } roleManager.CreateAsync(new IdentityRole() { Name = roleString, ConcurrencyStamp = Guid.NewGuid().ToString("D") }).Wait(); } // Seed Identity var users = new (string Email, string Password, IdentityRoleEnum[] Roles)[] { ("admin", "admin", new [] { IdentityRoleEnum.Administrator }), }; foreach (var user in users) { var userExists = userManager .FindByEmailAsync(user.Email).Result is not null; if (userExists) { continue; } var newUser = new IdentityUser { Email = user.Email, NormalizedEmail = user.Email.ToUpper(), EmailConfirmed = true, SecurityStamp = Guid.NewGuid().ToString("D"), RefreshTokens = default! }; var hashedPassword = userManager.PasswordHasher.HashPassword(newUser, user.Password); newUser.PasswordHash = hashedPassword; userManager .CreateAsync(newUser) .Wait(); var userRoles = user.Roles.Select(x => x.Name); userManager .AddToRolesAsync(newUser, userRoles) .Wait(); } } }