private static void SeedData(ExicoShopifyDbContext exicoDbContext, ExicoIdentityDbContext identityContext, ILogger logger, IConfiguration config, IServiceScope scope) { SeedSettingsData(exicoDbContext, config, logger); SeedPlanData(exicoDbContext, logger, config); SeedAdminRoleAndUser(identityContext, exicoDbContext, logger, config, scope); }
private static void SeedAdminRoleAndUser(ExicoIdentityDbContext identityContext, ExicoShopifyDbContext exicoDbContext, ILogger logger, IConfiguration config, IServiceScope scope) { //TODO check and make it a little bit robus var roleStore = new RoleStore <IdentityRole>(identityContext); IdentityResult result = null; logger.LogInformation("creating admin role."); if (!identityContext.Roles.Any(r => r.Name == UserInContextHelper.ADMIN_ROLE)) { result = roleStore.CreateAsync(new IdentityRole() { Name = UserInContextHelper.ADMIN_ROLE, NormalizedName = UserInContextHelper.ADMIN_ROLE }).Result; if (result.Succeeded == false) { logger.LogError($"Could not create admin role.{string.Join('.', result.Errors)}"); } else { logger.LogInformation("Successfully created admin role"); } } else { logger.LogInformation("Admin role already exists.So skipping role creation."); result = IdentityResult.Success; } if (result.Succeeded) { UserManager <AspNetUser> _userManager = scope.ServiceProvider.GetService <UserManager <AspNetUser> >(); //read config values for admin user var user = new AspNetUser(); config.Bind("AdminSeed", user); if (!identityContext.Users.Any(u => u.UserName == user.UserName)) { logger.LogInformation("Creating user."); //prepare user user.PlanId = user.PlanId ?? exicoDbContext.Plans.First().Id; user.BillingOn = user.BillingOn ?? DateTime.Today; user.ShopifyAccessToken = user.ShopifyAccessToken ?? "an-invalid-token"; user.ShopifyChargeId = user.ShopifyChargeId ?? 123456; var passGenrerator = scope.ServiceProvider.GetService <IGenerateUserPassword>(); var pass = passGenrerator.GetPassword(new Data.Domain.AppModels.PasswordGeneratorInfo(user)); result = _userManager.CreateAsync(user, pass).Result; if (result.Succeeded) { logger.LogInformation($"Finished creating user '{user.UserName}'"); } else { logger.LogError($"Error creating user.{string.Join('.', result.Errors)}"); } } else { result = IdentityResult.Success; logger.LogInformation($"Skipping user creation. User '{user.UserName}' already exists."); } if (result.Succeeded) { logger.LogInformation($"Assigning admin role to user '{user.UserName}'"); user = _userManager.FindByEmailAsync(user.Email).Result; var userIsInRole = _userManager.IsInRoleAsync(user, UserInContextHelper.ADMIN_ROLE).Result; if (!userIsInRole) { result = _userManager.AddToRolesAsync(user, new string[] { UserInContextHelper.ADMIN_ROLE }).Result; if (result.Succeeded) { logger.LogInformation($"Finished assigning admin role to user '{user.UserName}'"); } else { logger.LogError($"Error assigning user to admin role.{string.Join('.', result.Errors)}"); } } else { logger.LogWarning($"Skipping assigning user to admin role because user '{user.UserName}' already is an admin."); } } else { logger.LogWarning($"Skipping assigning user to admin role because user reation failed."); } } logger.LogInformation("Finished seeding admin role and user"); }