diff --git a/Marechai.Database/Seeders/All.cs b/Marechai.Database/Seeders/All.cs index 435c4767..fdd89062 100644 --- a/Marechai.Database/Seeders/All.cs +++ b/Marechai.Database/Seeders/All.cs @@ -49,7 +49,15 @@ namespace Marechai.Database.Seeders start = DateTime.Now; Console.WriteLine("\u001b[31;1mSeeding application roles...\u001b[0m"); - Roles.Seed(userManager, roleManager, configuration); + Roles.Seed(roleManager, configuration); + end = DateTime.Now; + + Console.WriteLine("\u001b[31;1mTook \u001b[32;1m{0} seconds\u001b[31;1m...\u001b[0m", + (end - start).TotalSeconds); + + start = DateTime.Now; + Console.WriteLine("\u001b[31;1mSeeding application users...\u001b[0m"); + Users.Seed(userManager, roleManager); end = DateTime.Now; Console.WriteLine("\u001b[31;1mTook \u001b[32;1m{0} seconds\u001b[31;1m...\u001b[0m", diff --git a/Marechai.Database/Seeders/Roles.cs b/Marechai.Database/Seeders/Roles.cs index 92b0ab78..b08464fa 100644 --- a/Marechai.Database/Seeders/Roles.cs +++ b/Marechai.Database/Seeders/Roles.cs @@ -8,8 +8,7 @@ namespace Marechai.Database.Seeders { public static class Roles { - public static void Seed(UserManager userManager, RoleManager roleManager, - IConfiguration configuration) + public static void Seed(RoleManager roleManager, IConfiguration configuration) { var roles = configuration.GetSection("MarechaiRoles").GetChildren().Select(x => new { diff --git a/Marechai.Database/Seeders/Users.cs b/Marechai.Database/Seeders/Users.cs new file mode 100644 index 00000000..0e1e75d9 --- /dev/null +++ b/Marechai.Database/Seeders/Users.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using Marechai.Database.Models; +using Microsoft.AspNetCore.Identity; + +namespace Marechai.Database.Seeders +{ + public static class Users + { + public static void Seed(UserManager userManager, RoleManager roleManager) + { + ApplicationRole uberAdminRole = roleManager.FindByNameAsync("UberAdmin").Result; + + if(uberAdminRole is null) + { + Console.WriteLine("Cannot find UberAdmin role, is database properly seeded?"); + + return; + } + + IList uberAdmins = userManager.GetUsersInRoleAsync("UberAdmin").Result; + + if(uberAdmins.Count > 1) + { + Console.WriteLine("Too many uberadmins, only one can exist"); + + foreach(ApplicationUser user in uberAdmins) + { + Console.WriteLine("Removing uberadmin permissions from user {0}", user.UserName); + + userManager.RemoveFromRoleAsync(user, "UberAdmin"); + } + } + + if(uberAdmins.Count == 1) + return; + + ApplicationUser uberAdmin = userManager.FindByEmailAsync("claunia@claunia.com").Result ?? + userManager.FindByNameAsync("claunia").Result; + + if(uberAdmin is null) + { + uberAdmin = new ApplicationUser + { + UserName = "claunia", Email = "claunia@claunia.com", EmailConfirmed = true + }; + + byte[] newPass = new byte[8]; + new Random().NextBytes(newPass); + string newPassString = Convert.ToBase64String(newPass); + + IdentityResult result = userManager.CreateAsync(uberAdmin, newPassString).Result; + + if(result.Succeeded) + { + userManager.AddToRoleAsync(uberAdmin, "UberAdmin").Wait(); + Console.WriteLine("Created new claunia uberadmin with password {0}.", newPassString); + } + else + { + Console.WriteLine("Could not create new uberadmin."); + } + + return; + } + + Console.WriteLine("Giving uberadmin permissions to user claunia"); + userManager.AddToRoleAsync(uberAdmin, "UberAdmin").Wait(); + } + } +} \ No newline at end of file diff --git a/Marechai.sln.DotSettings b/Marechai.sln.DotSettings index f7e5ddf3..0a9008d3 100644 --- a/Marechai.sln.DotSettings +++ b/Marechai.sln.DotSettings @@ -1,5 +1,8 @@  + True True True True + True + True True \ No newline at end of file diff --git a/Marechai/Marechai.csproj b/Marechai/Marechai.csproj index 50879e90..748c3e58 100644 --- a/Marechai/Marechai.csproj +++ b/Marechai/Marechai.csproj @@ -2,7 +2,7 @@ netcoreapp3.1 - 3.0.99.1017 + 3.0.99.1018 Canary Islands Computer Museum Copyright © 2003-2020 Natalia Portillo Canary Islands Computer Museum Website