first commit
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
using OpenWarehouse.auth.api.Common.CustomIdentifyManager;
|
||||
|
||||
namespace OpenWarehouse.auth.api.Common.DefaultUserAndRole;
|
||||
|
||||
public class DefaultIdentify(
|
||||
ILogger<DefaultIdentify> logger,
|
||||
SignInManager<ApplicationUser> signInManager,
|
||||
RoleManager<ApplicationRole> roleManager,
|
||||
UserManager<ApplicationUser> userManager,
|
||||
ApplicationDbContext applicationDbContext,
|
||||
PrivilageManager.PrivilegeManager privilegeManager,
|
||||
IConfiguration configuration)
|
||||
{
|
||||
public async Task SeedAsync()
|
||||
{
|
||||
if (!await applicationDbContext.RolePrivilages.AnyAsync(x => true))
|
||||
{
|
||||
var listOfRoles = GlobalPrivilage.GatherPrivilegeStrings();
|
||||
foreach (var privilage in listOfRoles)
|
||||
{
|
||||
var rolePrivilage = new RolePrivilage() { Privilage = privilage };
|
||||
applicationDbContext.RolePrivilages.Add(rolePrivilage);
|
||||
logger.LogDebug($"Created privilage: {privilage}");
|
||||
}
|
||||
|
||||
await applicationDbContext.SaveChangesAsync();
|
||||
}
|
||||
|
||||
|
||||
if (!roleManager.Roles.Any())
|
||||
{
|
||||
ApplicationRole admin = new ApplicationRole()
|
||||
{
|
||||
Name = "Admin",
|
||||
IsGlobalAdmin = true,
|
||||
};
|
||||
ApplicationRole user = new ApplicationRole()
|
||||
{
|
||||
Name = "User",
|
||||
IsGlobalAdmin = false
|
||||
};
|
||||
ApplicationRole service = new ApplicationRole()
|
||||
{
|
||||
Name = "Service",
|
||||
IsGlobalAdmin = true
|
||||
};
|
||||
if ((await roleManager.CreateAsync(admin)).Succeeded)
|
||||
{
|
||||
logger.LogDebug($"Created role {admin}");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning($"Unable create role {admin}");
|
||||
}
|
||||
if ((await roleManager.CreateAsync(user)).Succeeded)
|
||||
{
|
||||
logger.LogDebug($"Created role {user.Name}");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning($"Unable create role {user.Name}");
|
||||
}
|
||||
if ((await roleManager.CreateAsync(service)).Succeeded)
|
||||
{
|
||||
logger.LogDebug($"Created role {service.Name}");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning($"Unable create role {service.Name}");
|
||||
}
|
||||
}
|
||||
|
||||
if (!userManager.Users.Any())
|
||||
{
|
||||
var username = configuration["SuperUser:Name"] ?? "Admin";
|
||||
var email = configuration["SuperUser:Email"] ?? "Admin@admin.local";
|
||||
|
||||
var password = configuration["SuperUser:Password"] ?? GenerateRandomPass(10);
|
||||
|
||||
|
||||
var user = new ApplicationUser() { UserName = username, Email = email, EmailConfirmed = true};
|
||||
var userResult = (await userManager.CreateAsync(user, password));
|
||||
if (userResult.Succeeded)
|
||||
{
|
||||
var claimResult = await userManager.AddClaimAsync(user, AccountType.Admin.Claim());
|
||||
|
||||
if (claimResult.Succeeded)
|
||||
{
|
||||
logger.LogInformation($"Sucess added claim {AccountType.Admin.Claim()} to user {user.UserName}.");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning($"Unable added claim {AccountType.Admin.Claim()} to user {user.UserName}.");
|
||||
}
|
||||
|
||||
logger.LogInformation($"Created user, Name: {user.UserName} Email: {user.Email}, Password: {password}");
|
||||
var roleResult = (await userManager.AddToRoleAsync(user, "Admin"));
|
||||
if (roleResult.Succeeded)
|
||||
{
|
||||
logger.LogInformation($"Added role Admin to {user.UserName}");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning($"Unable added role Admin to user {user.UserName}");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.LogWarning($"Unable create user {user.UserToken}. Messs: {string.Join(";",userResult.Errors)}");
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private string GenerateRandomPass(int length)
|
||||
{
|
||||
const string upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
const string lower = "abcdefghijklmnopqrstuvwxyz";
|
||||
const string digits = "0123456789";
|
||||
const string specialChars = "!@#$%^&*()_+{}\":'<>?[];,./";
|
||||
|
||||
var allChars = upper + lower + digits + specialChars;
|
||||
var random = new Random();
|
||||
var passwordChars = new char[length];
|
||||
|
||||
passwordChars[0] = upper[random.Next(upper.Length)];
|
||||
passwordChars[1] = lower[random.Next(lower.Length)];
|
||||
passwordChars[2] = digits[random.Next(digits.Length)];
|
||||
passwordChars[3] = specialChars[random.Next(specialChars.Length)];
|
||||
|
||||
for (int i = 4; i < length; i++)
|
||||
{
|
||||
passwordChars[i] = allChars[random.Next(allChars.Length)];
|
||||
}
|
||||
|
||||
return new string(passwordChars.OrderBy(c => random.Next()).ToArray());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user