86 lines
2.4 KiB
C#
86 lines
2.4 KiB
C#
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<IdentityUser>>();
|
|
userManager.UserValidators.Clear();
|
|
userManager.PasswordValidators.Clear();
|
|
|
|
using var roleManager = serviceProvider
|
|
.GetService<RoleManager<IdentityRole>>();
|
|
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();
|
|
}
|
|
|
|
}
|
|
}
|
|
|